문제 화면입니다. SQL injection 문제네요.
문제에 들어가보면 이렇게 테이블이 주어집니다. 간단히 기능 학습을 해보고 view-source를 눌러보겠습니다.
눈에 띄는 코드는 $_SERVER['QUERY_STRING'] 함수와 parse_str 함수입니다.
$_SERVER['QUERY_STRING']은 넘어온 값을 저장하는 것입니다.
ex) id=123&pw=123
그리고 parse_str은 인자를 php변수로 저장하는 함수입니다.
따라서 get 방식으로 보낸 값들이 php변수로 저장되는것입니다.
그리고 아래의
$col = preg_match('/^(subject|content|writer)$/isDU',$col) ? $col : '';
if($col) {
$query_parts = $col . " like '%" . $keyword . "%'";
}
에서 $col변수에 preg_match 함수가 false가 나오도록 한 다음 get으로 $query_parts에 원하는 쿼리를 입력해서 넘기면 문제를 풀 수 있습니다.
query_parts = 1 union select 1,2,3,4 -- 를 입력하면 1234가 나옵니다. 이제 table_name을 뽑아보도록 하겠습니다.
information_schema에서 table 목록들을 뽑았습니다. 플래그가 있을법한 테이블이 하나 있네요.
테이블 이름은 Th1s_1s_Flag_tbl 입니다. 이제 칼럼 목록을 뽑아보겠습니다.
column_type과 column_name을 같이 뽑았습니다.
f1ag 칼럼이 있네요 이제 테이블과 칼럼을 알았으니 칼럼에 있는 값을 뽑겠습니다.
flag가 나왔습니다.
'Wargame > wargame.kr' 카테고리의 다른 글
wargame.kr ip_log_table 풀이 (0) | 2017.02.23 |
---|---|
wargame.kr simple board (0) | 2017.02.19 |
wargame.kr web_chatting 650p (0) | 2016.10.04 |
wargame.kr jff3_magic 800p (0) | 2016.09.03 |
wargame.kr 4번 login filtering 450p (0) | 2016.07.25 |