LOS 28단계 시작!
error 를 출력해주는 것을 보아 Error Based SQL Injection 를 이용해야 되는 문제인 듯 하다.
이 때 사용할 수 있는 것이 if() 와 select union 이었는데 둘 다 필터링되어 사용할 수 없다.
대신 이번에는 case 문을 이용하여 문제를 풀어보자!
case 문의 사용법은 다음과 같다.
case when 조건 then 참일 때 실행할 문장 else 거짓일 때 실행할 문장 end |
에러를 발생시키기 위한 조건이 무엇이 있을까 고민하다 구글링을 통해
mysql 에서 9e307*N의 형식으로 값을 넘기면 Logical Error 가 발생한다는 것을 알 수 있었다.
이를 이용하여 패스워드를 알아내는 Python 코드를 작성해보았다.
case 문의 조건은 id = 'admin' and pw < 0x{}{} 로 주었다.
앞의 {}는 hex_pw 로 처음은 공백으로 시작한다.
뒤의 {}는 j를 hex 값으로 바꾼뒤 0x를 제외한 숫자만 가져온 값이다.
즉, 패스워드 맨 왼쪽부터 비교하였다.
문자열을 비교할 때,
'abc' 와 'd' 를 비교하면 'd' 가 큰 것을 이용하였다.
결과는 0DC4EFBB 라는 문자열이 나왔다.
Mysql 에서는 대소문자를 구분하지 않지만, php 에서는 대소문자를 구분하기 때문에 소문자로 바꿔주어야 한다.
성공!
'WarGame > LOS (Lord Of SQLInjection)' 카테고리의 다른 글
29단계 : phantom (0) | 2020.01.27 |
---|---|
27단계 : blue_dragon (0) | 2020.01.26 |
26단계 : red_dragon (0) | 2020.01.26 |
25단계 : green_dragon (0) | 2020.01.22 |
24단계 : evil_wizard (0) | 2020.01.22 |