[LOS] blue_dragon 풀이 (st.27)
Wargame/LOS

[LOS] blue_dragon 풀이 (st.27)

풀이

 

이번 문제는 id, pw 모두 싱글 쿼터와 이스케이프 문자(\)를 Filtering 한다.

이렇게만 보면 정말 답이 없어 보이는 문제이다.

 

그러나, 코드를 자세히 보면, query를 보내고, preg_match 함수가 실행된다.

즉, Time Based SQLi를 사용할 수 있다는 것이다.

Time Based SQLi를 간단하게 설명해보겠다.


 

MySQL에는 sleep이라는 쿼리를 의도적으로 멈춰주는 함수가 존재한다.

예를 들어보자면 ?id=admin' or sleep(1)%23 이라는 쿼리를 보내면 1초 후 쿼리가 보내진다.

그렇다면 이런 쿼리를 보내보면 어떨까?

 

Query: ?id=admin&pw=1' or if(length(pw)>4, sleep(3), 1)%23

 

pw의 길이가 4 초과라면 sleep(3)이 적용되어, 3초 후에 쿼리가 보내질 것이고, 아니라면 1이라는 값이 들어가게 된다.

해당 문제에서는 pw의 길이가 4 초과이므로, sleep(3) 함수가 적용되어 홈페이지에서 로딩화면이 나타나게 되는 것이다.

 

이 점을 이용하여, pw 값을 맞춰보자.


부등식을 이용한 결과, pw의 길이는 8이라는 것을 알아냈다.

그럼 이제, pw의 정확한 값을 맞춰보자. 코드는 다음과 같다.

 

'Wargame > LOS' 카테고리의 다른 글

[LOS] frankenstein 풀이 (st.28)  (0) 2020.06.04
[LOS] phantom 풀이 (st.29)  (0) 2020.06.04
[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