Wargame.kr
Web_700
ip log table
700점짜리 문제도 거의 끝나가네요. Blind SQL Injection을 이용하여 풀이하는 문제인 것 같습니다.
바로 문제를 확인 해 보도록 하죠.
문제에 접속 해 보니 상단에 admin 계정으로 로그인 할 수 있는 페이지로 접근 할 수 있는 버튼이 있고, 아래 테이블에는 idx와 함께 IP가 있습니다.
해당 테이블의 항목들을 클릭하면 아래와 같은 log time이 나타납니다.
이 log time은 문제 페이지에 접속한 당시의 서버 시간을 나타내는 것 같습니다.
그리고 Request 때리는 부분을 확인해봤더니 chk.php 페이지로 POST 요청을 날려주는데, 파라미터로 idx를 같이 날려줍니다.
이 idx가 위에서 확인했던 log time을 구별해주는 지표가 됩니다.
여기서 생각 할 수 있는것은 이 idx 파라미터가 전달 될 때 select 쿼리를 사용할텐데, 여기에 single quotation이 없는 등의 코딩 실수가 있을 경우 SQL Injection이 가능할 것입니다.
그래서 위와 같이 burp suite를 이용하여 idx 파라미터에 select문을 사용하여 table명을 알아내는 코드를 짰더니, 참과 거짓에 따라 다른 값이 나타났습니다.
(chk.php 페이지에서는 idx가 문제 페이지에 나타나있는 테이블에 존재하지 않는 경우 1970년 1월 1일자로 나타납니다.)
따라서 이를 이용하여 Blind SQL Injection을 먹일 수 있습니다.
python으로 테이블명을 알아 낼 수 있는 스크립트를 작성했습니다.
돌려보도록 하죠.
페이지 내에 sleep문이 적용되어있는지 약간 느린 반응을 보여줬습니다. 이 11글자 알아내는데 30초가 넘게 걸렸습니다...
아무튼 limit의 숫자를 늘려가며 admin_table이라는 테이블을 알아냈습니다.
이 테이블 안에 아마도 admin 계정의 id와 pw를 알아 낼 수 있는 컬럼이 있을 것입니다.
위에서 사용했던 payload.py를 복사하여 약간 내용을 수정 후 column.py로 바꾸고 컬럼 값을 찾는 스크립트를 돌려봤습니다.
이 또한 limit 값을 늘려가며 찾아보았더니 id와 ps라는 컬럼을 찾아 낼 수 있었습니다.
이제 이를 이용하여 admin 계정의 id와 pw를 알아내면 될 것 같습니다.
id는 blue_admin
pw는 0h~myp4ss!인 것을 알아냈습니다.
이제 이를 admin 페이지에 접속하여 로그인 해 보도록 하죠.
짠! flag를 찾아냈습니다.
'Wargame > Wargame.kr' 카테고리의 다른 글
[Wargame.kr] Web_800_QnA (0) | 2016.05.27 |
---|---|
[Wargame.kr] Web_700_php? c? (0) | 2016.05.27 |
[Wargame.kr] Web_700_lonely guys (0) | 2016.05.26 |
[Wargame.kr] Web_700_dmbs335 (0) | 2016.05.26 |
[Wargame.kr] Web_650_crack crack crack it (0) | 2016.05.25 |