[LOS] frankenstein 풀이 (st.28)
Wargame/LOS

[LOS] frankenstein 풀이 (st.28)

 

 

풀이

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