본문 바로가기

웹해킹/webhacking.kr

old-50 롸업(webhacking.kr)

SQL Injection 문제이다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 50</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<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");
  }
?>
<hr><a href=./?view_source=1>view-source</a>
</body>
</html>

소스 코드이다.

solve(50)이 뜨게 하려면 result[lv]이 3이 되어야 한다.

result는 id와 pw로 찾은 lv값이다.

for문으로 get방식의 모든 변수를 정규식으로 검사한다.

'from', 'pw', '(', ')', 공백, '%', '=', '>', '<'를 검사한다.

그리고 id도 따로 검사를 한다.

id에 union이 들어갈 수 없다.

lv이 3인 계정을 찾아서 로그인해야 한다.

그리고 addslashes와 mb_convert_encoding 함수가 있는데 

addslashes는 ', ", \를 문자 앞에 \로 처리를 한다.

mb_convert_encoding 함수는 %a1~%fe문자를 해당 문자 뒤에 \ 까지 하나의 문자로 인식한다.

그래서 '로 sql injection을 하려면 %a1' 이런식으로 쓰면 '가 \로 처리되고 %a1\가 문자로 인식되서 '를 사용할 수 있다.

공백 필터링은 /**/ 이렇게 주석을 열고닫는 처리로 우회한다.

=이 필터링 되기 때문에 like를 사용해서 lv이 3인 값을 가져오려면

%a1'||lv/**/like/**/3%23

이렇게 id를 작성해주면 된다.

하지만 이렇게 보내면 wrong이라고 뜬다.

3 대신 2를 넣어주면 lv:2라고 잘 뜨니까 페이로드의 문제는 아니고 lv이 3인 값이 없는 것 같다.

그래서 union select로 임의 값을 가져와야 할 것 같은데 id에서는 필터링 당하고 있으니 pw에 넣어준다.

id=%a1'/*
pw=*/union/**/select/**/3%23

이렇게 넣어주면 된다.

/* 주석 처리 때문에 md5부분까지 전부 주석 처리되고 결국 union select 3만 남는다.

넣어주면 문제가 풀린다.

'웹해킹 > webhacking.kr' 카테고리의 다른 글

old-54 롸업(webhacking.kr)  (0) 2023.12.10
old-51 롸업(webhacking.kr)  (0) 2023.12.10
old-34 롸업(webhacking.kr)  (0) 2023.12.10
old-33 롸업(webhacking.kr)  (0) 2023.12.08
old-32 롸업(webhacking.kr)  (0) 2023.12.08