풀이
지금까지 풀었던 문제 중 제일 오래 걸린 문제다.
테스트 해보려고 내가 서버에 MySQL을 깔 줄이야 ㅠ.ㅠ
이 문제는 좀 특별한 게, Query를 총 2번 날린다.
그래서 그런지, query2가 정상적으로 동작하기 위해서는, 생각보다 좀 코드를 많이 꼬아야 한다.
이 문제는 result['id'] 값이 admin이면 해결되는 간단한 문제처럼 보인다. 이제 풀이를 봐보자.
우선 싱글, 더블 쿼터를 Filtering 하니, 이스케이프 문자(\)를 이용해 필터를 우회하자.
먼저 union select를 통해 query2가 실행되게 만들어보자.
id, pw로 컬럼이 총 2개이니 union select 1,2를 넣어보면 query2가 나오지 않을까 싶다.
Query: ?id=\&pw= union select 1,2%23
예상대로, query2가 정상적으로 출력되었다.
그렇다면 id=admin을 넣으면 되는게 아닐까? 하고 Query를 날려보았다.
라고 생각해서 이 부분에서 엄청나게 삽질을 했다.
당연하게도 테이블에 admin이란 값이 있는 줄 알았는데, 아니었다.
결론은, union select를 이용해 id 컬럼에 admin이란 값을 강제로 넣어야 한다.
다음 Query문을 생각해보자.
Query: ?id=\&pw= union select \,id='admin'#%23
$query2 = "select id from prob_green_dragon where id='{$result[id]}' and pw='{$result[pw]}'";
이 부분에 해당 Query문이 들어간다면 어떻게 변할지 살펴보자. (주석은 표기하지 않음.)
$query2 = "select id from prob_green_dragon where id='\' and pw=' union select id='admin''";
이 되어, id 컬럼에 admin이란 값이 들어가게 된다.
단, 싱글 쿼터와 더블 쿼터가 필터링 되어있기 때문에, hex값을 이용해 $query를 통과해보자.
마지막 $query2가 정상적인 동작을 하기 위해서는 admin이란 값은 2번 hex를 돌려줘야 한다.
최종 Query문은 다음과 같다.
Query: ?id=\&pw=union select 0x5c,0x20756e696f6e2073656c6563742030783631363436643639366523%23
'Wargame > LOS' 카테고리의 다른 글
[LOS] hell_fire 풀이 (st.23) (0) | 2020.05.31 |
---|---|
[LOS] evil_wizard 풀이 (st.24) (0) | 2020.05.31 |
[LOS] dark eyes 풀이 (st.22) (0) | 2020.05.30 |
[LOS] dragon 풀이 (st.20) (0) | 2020.05.30 |
[LOS] iron golem 풀이 (st.21) (0) | 2020.05.30 |