article thumbnail image
Published 2021. 9. 25. 01:02

old-46은 SQL Injection문제다.

level을 입력하는 form이 존재한다.

 

해당 문제에 존재하는 필터링과 query의 구조를 확인해보자.

 

<?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>

 

일단 lv파라미터의 값이 존재해야 한다.

 

그 아래 lv파라미터에 addslashes함수가 사용됐다.

그리고 공백, /, *, %가 empty string으로 대체된다.

다음으로 select, 0x, limit, cash가 preg_match로 필터링된다.

 

마지막으로 query는 다음과 같다.

select id,cash from chall46 where lv=$_GET[lv]

 

이번 문제에서는 새로운 쿼리를 lv파라미터 위치에 Injection하면 될 것 같다.

 

admin id를 불러오기 위해서는 lv에 아무 숫자나 넣고 or 연산자로 id='admin'을 묶어야 한다.

이때 '가 addslashes함수에 의해 필터링되므로 admin을 대체할 수 있는 다른 string을 넣어줘야 한다.

이전 문제에서는 hex()를 사용했지만 이번 문제에서 0x가 필터링 되므로 이번에는 char()를 사용해서 해결했다.

 

char()는 아스키코드 숫자에 해당하는 문자를 출력하는 함수이다.

따라서 admin에 해당하는 각 아스키코드를 넣어주면 admin을 대체할 수 있다.

id='admin'    →    id=char(97,100,109,105,110)

 

위 내용들을 종합해서 payload를 작성하면 다음과 같다.

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

 

해당 payload를 실행하면 아래처럼 문제를 해결할 수 있다.

old-46 해결!

 

 

 

 

'Study > Web Hacking' 카테고리의 다른 글

[Webhacking.kr] old-35  (0) 2021.09.29
[Webhacking.kr] old-11  (0) 2021.09.29
[Webhacking.kr] old-45  (0) 2021.09.25
[Webhacking.kr] old-08  (0) 2021.09.18
[Webhacking.kr] old-03  (0) 2021.09.18
복사했습니다!