풀이
이번 문제는 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 |