WarGame/Webhacking.kr

[Webhacking.kr] old-18 Answer

Old-18 Domain & Tool

  • 구분 : SQL Injection
  • 문제풀이에 사용된 도구 
    • Chrome 103.0.5060.66 

 


Old-18 Question & Answer

문제 페이지에 들어가면 대놓고 SQL Injection이라고 써있다.(저 값은 BASIC으로 입력해본거고 당연히 False였다.) 아래 view-source로 친절하게 source를 주셨으니 확인해보자

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 18</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; }
a { color:lightgreen; }
</style>
</head>
<body>
<br><br>
<center><h1>SQL INJECTION</h1>
<form method=get action=index.php>
<table border=0 align=center cellpadding=10 cellspacing=0>
<tr><td><input type=text name=no></td><td><input type=submit></td></tr>
</table>
</form>
<a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br>
<?php
if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
  $result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2

  if($result['id']=="guest") echo "hi guest";
  if($result['id']=="admin"){
    solve(18);
    echo "hi admin!";
  }
}
?>
</a>
<br><br><a href=?view_source=1>view-source</a>
</center>
</body>
</html>

일단 대표적으로 preg_match로 문자열필터링을 수행하고 괄호들도 막고 있다. 0x값도 막아두었다. 그렇다고 뭐 못뚫는것은 아니니까 공백을 우회하는 다른 기법을 사용해서 no에 쓸데없는 값을 넣고 id를 admin으로 넣는 다음값을 injection하자(뒤에 admin의 no가 2라 그랬으니까 or no=2를 넣거나 id='admin'을 해도 무관할 거 같다.)

  • 123 or id='admin'

그러니까 위에 injection값에서 공백은 다른값으로 치환될 것이다.

공백을 우회하는 문자열은 많다. 기법으로는 괄호로 묶어주는 것도 가능하고 탭(%09), 아니면 캐리지값(%0a,0b,0c,0d)를 사용해도 된다. 필자는 %0A를 사용했다.

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

[Webhacking.kr] old-20 Answer  (0) 2022.07.22
[Webhacking.kr] old-19 Answer  (0) 2022.07.22
[Webhacking.kr] old-17 Answer  (0) 2022.07.22
[Webhacking.kr] old-16 Answer  (0) 2022.07.22
[Webhacking.kr] old-15 Answer  (0) 2022.07.22