(Lord of SQLInjection) green_dragon 문제입니다.
먼저 필터링을 살펴보면 prob, _, . , ' , " 가 필터링되고 있습니다.
query가 실행되는 부분을 살펴보면 처음에는 GET방식으로 id pw를 입력받고
결과는 result라는 변수에 대입해 if문으로 한번더 id와 pw를 확인하는 구문을 실행하고 있습니다.
이때 query2를 페이지에 출력해주고 있는데
id가 admin이면 문제가 해결된다고 합니다.
문제를 천천히 살펴보다 아래 구문에 대해 익숙한 느낌을 받아 LOS의 이전문제 들을 찾아봤습니다.
그러다 이전에 풀었던 서큐버스 문제와 유사함을 찾을 수 있었습니다.
https://skysquirrel.tistory.com/77
(Lord of SQLInjection) succubus 문제
(Lord of SQLInjection) succubus 문제입니다. 코드의 필터링부터 살펴보면 prob, _, . , (, ), ' 를 막고 있습니다. 그런데 이전 문제와는 다르게 id=admin 이 아닌 쿼리가 성공하기만 하면 문제가 해결된다고..
skysquirrel.tistory.com
이번 문제도 서큐버스 문제처럼 싱글쿼터를 막고 있으니 이를 우회하기 위해
백슬래시를 활용해보기로 했습니다.
다만, 이번문제에 서큐버스에서 사용한 or 1=1%23 을 삽입하게 되면
id 하나의 결과만을 출력하는 코드가 되는데
이후 query2 부분에서 pw를 입력받아야 하기에 이는 불가능한 구조가 됩니다.
해서 이를 해결하기 위해 여러가지 찾아보다 union구문을 활용하게 되었습니다.
union select 1,2%23 으로 값을 대입한다면
id='1' and pw='2' 형태가 되므로 query2에서 확인할 id 와 pw
두개의 결과를 도출하는게 가능합니다.
위 내용을 토대로 시도하면
2개의 결과를 받았기에 쿼리가 실행되고 query2가 페이지에 출력된것을 확인할 수 있습니다.
이제 query2 구문을 다시보면
id 하나만 결과를 도출하면 되는데 이때 id가 admin 이어야 합니다.
이부분은 서큐버스와 query에서 처럼 \ 와 union select 'admin'# 을 사용하면 가능할 것으로 보입니다.
그래서 select 1부분에 \ 를 2부분에는 union select 'admin'# 을 넣어 봤습니다.
단, 'admin'은 싱글쿼터 필터링 문제로 0x61646d696e23 으로 우회했는데
union이 두번들어가서 인지 \ 다음에 콤마( , ) 가 와서 인지 제대로 실행이 되지 않았습니다.
(SQL문법 공부를 더 하면 보완해서 설명을 추가하겠습니다.)
여러가지 방법을 찾다가
'admin'은 문자열이며 SQL에서는 아스키코드 16진수로 값을 넣어도 문자열로 인식하니
\ 와 union select도 아스키코드 16진수로 변환한다면 가능하지 않을까 생각이 들었습니다.
온라인 16진수 변환기를 사용해
https://www.branah.com/ascii-converter
ASCII Converter - Hex, decimal, binary, base64, and ASCII converter
Convert ASCII characters to their hex, decimal and binary representations and vice versa. In addition, base64 encode/decode binary data. The converter happens automatically.
www.branah.com
\ 는 0x5c로 union select 0x61646d696e#은
0x756e696f6e 73656c656374 30783631363436643639366523로 변환해
값을 전달했습니다.
결과는 union select 0x61646d696e#이 전부 붙어서 SQL 명령어로써 작동을 하지 않습니다.
띄어쓰기를 해보려고 여러가지를 시도하다가
다시 돌아와 아스키 코드표를 보니 SP 띄어쓰기가 있었습니다
(최근 공부가 뜸했는데 엄청난 삽질을 했습니다...)
16진수 0x20을 띄어쓰기 할공간에 추가로 값을 넣어주면
0x756e696f6e 20 73656c656374 20 30783631363436643639366523 이 됩니다.
최종적으로 코드를 정리하면 아래와 같이 되고
id=\&pw=union%20select%200x5c,0x756e696f6e2073656c6563742030783631363436643639366523%23
문제사이트에 값을 전달해보면
문제를 해결하였습니다.
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) blue_dragon 문제 (0) | 2022.11.17 |
---|---|
(Lord of SQLInjection) red_dragon 문제 (0) | 2022.11.13 |
(Lord of SQLInjection) evil_wizard 문제 (0) | 2022.10.09 |
(Lord of SQLInjection) hell_fire 문제 (0) | 2022.10.09 |
(Lord of SQLInjection) dark_eyes 문제 (0) | 2022.10.09 |