반응형

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 46</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get>
level : <input name=lv value=1><input type=submit>
</form>
<hr><a href=./?view_source=1>view-source</a><hr>
<?php
  if($_GET['lv']){
    $db = dbconnect();
    $_GET['lv'] = addslashes($_GET['lv']);
    $_GET['lv'] = str_replace(" ","",$_GET['lv']);
    $_GET['lv'] = str_replace("/","",$_GET['lv']);
    $_GET['lv'] = str_replace("*","",$_GET['lv']);
    $_GET['lv'] = str_replace("%","",$_GET['lv']);
    if(preg_match("/select|0x|limit|cash/i",$_GET['lv'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select id,cash from chall46 where lv=$_GET[lv]"));
    if($result){
      echo("{$result['id']} information<br><br>money : {$result['cash']}");
      if($result['id'] == "admin") solve(46);
    }
  }
?>
</body>
</html>

 


<?php
  if($_GET['lv']){
    $db = dbconnect();
    $_GET['lv'] = addslashes($_GET['lv']);
    $_GET['lv'] = str_replace(" ","",$_GET['lv']);
    $_GET['lv'] = str_replace("/","",$_GET['lv']);
    $_GET['lv'] = str_replace("*","",$_GET['lv']);
    $_GET['lv'] = str_replace("%","",$_GET['lv']);
    if(preg_match("/select|0x|limit|cash/i",$_GET['lv'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select id,cash from chall46 where lv=$_GET[lv]"));
    if($result){
      echo("{$result['id']} information<br><br>money : {$result['cash']}");
      if($result['id'] == "admin") solve(46);
    }
  }
?>

 

GET 방식 파라미터 lv의 값이 있으면, lv의 값에서 특수 문자들 앞에 역슬래쉬를 붙히고, 공백, 슬래쉬, 애스터리스크, 퍼센트 기호는 없앤다.

 

그리고 lv의 값에 특정 문자가 포함되어 있으면 종료하고, 포함되어 있지 않으면 SQL 쿼리문의 조건절에 내가 입력한 값을 포함한다.

 

그리고 SQL 쿼리의 응답 데이터가 있으면 result의 'id'와 'cash'의 값을 출력하고 id의 값이 admin이면 풀린다.

 


 

lv 파라미터의 값을 1로 줬을 때

 

 

lv 파라미터의 값을 2로 줬을 때

 

 

lv 파라미터의 값을 3으로 줬을 때

 

 

lv 파라미터의 값을 4로 줬을 때

 


풀이

 

이번 문제에서는 '0x'를 필터링하므로 16진수 인코딩을 할 수 없고,'%'도 필터링하기 때문에 URL 인코딩을 할 수 없다.

 

그러므로 char() 함수를 이용해 10진수를 문자로 변환하여 id가 admin인 데이터를 출력하도록 한다.

 

?lv=0||id=char(97,100,109,105,110)

 

반응형

'전쟁 > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-2  (0) 2022.07.22
[Webhacking.kr] old-21  (0) 2022.07.21
[Webhacking.kr] old-49  (0) 2022.07.21
[Webhacking.kr] old-7  (0) 2022.07.19
[Webhacking.kr] old-61  (0) 2022.07.19

+ Recent posts