풀이
hex로만 삽질하다가, Limelee님 풀이를 참고했습니다.
URL: https://blog.limelee.xyz/
Limelee
blog.limelee.xyz
이번 문제는 Error Based + Blind SQLi이다.
preg_match 함수가 괄호와 union을 모두 거르니, 괄호가 필요없는 case문과 hex값으로 접근을 시도해야한다.
먼저 case문에 대해 설명해보겠다.
CASE (비교 컬럼),
WHEN 비교식,
THEN 참일 경우,
ELSE 아닐 경우.
END
이 형태로 이루어져있다. if문 사용하듯이 사용하면 될 것 같다.
이제, Query문에서 error가 발생하면 페이지에 error가 출력된다는 점을 노려 Query문을 작성해보자.
Query: ?pw=1' or id=0x61646d696e and case when pw>(비교할 hex 값) then 1 else 9e307*9e307 end%23
해당 쿼리에 대해 설명해보도록 하겠다.
먼저 addslashes 함수를 피하기 위해서, admin 값을 hex 값인 0x61646d696e로 바꿔줬다.
뒤에는 case문이 따라온다. if로 표현하자면 다음과 같다.
if(pw>(비교할 hex 값), 1, 9e307*9e307)
만약 pw값이 qwe123이라고 가정해보자.
qwe123을 hex값으로 표현하면 0x717765313233 이다.
Query에 pw>0x71이란 값이 들어가게 된다면, 당연하게도 case문은 참을 뱉어낸다.
그러나, pw>0x72가 들어가게 된다면, case문은 거짓을 뱉고, 첫 번째 pw값이 (비교한 hex값 - 1)이란 사실을 알 수 있다.
이러한 풀이 방식으로 짠 파이썬 코드는 다음과 같다.
단, 대소문자에 유의하고, 마지막 hex 값은 -1 처리가 되지 않는다는 점을 조심하자.
'Wargame > LOS' 카테고리의 다른 글
[LOS] phantom 풀이 (st.29) (0) | 2020.06.04 |
---|---|
[LOS] blue_dragon 풀이 (st.27) (0) | 2020.06.03 |
[LOS] red_dragon 풀이 (st.26) (0) | 2020.06.03 |
[LOS] hell_fire 풀이 (st.23) (0) | 2020.05.31 |
[LOS] evil_wizard 풀이 (st.24) (0) | 2020.05.31 |