촉촉한초코칩

Webhaking.kr old-18 본문

Study/Web Hacking

Webhaking.kr old-18

햄친구베이컨 2024. 11. 8. 14:14

코드

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

 

입력한번호가 guest이거나 admin이면 hi __가 출력된다.

admin의 번호는 2라고 나와있지만 where문에서 id를 guest로 검색하기 때문에 admin이 나오지 않는다. 

 

공격

그러므로 or, and 조건을 사용해서 admin이 나오도록 해본다. 

 

select id from chall18 where id='guest' and no=$_GET[no]​
  • true and true or true

정규표현식을 우회하여 작성해본다.

2	%6f%72	id='admin'
2	%6f%72	1=1

 

필터링에 걸리진 않지만 아무것도 뜨지 않는다. 

 

검색 찬스..

id='guest'에 있는 and를 틀리고 뒤에 or 조건에서 맞아야 한다. 

0%09or%09id='admin'

(url에서 공백은 %09라고 한다.)

 

그런데 입력해도 계속 안돼서 url 부분을 봤더니 입력을 저렇게 해도 url에서는 09앞에 숫자가 더 붙게된다. 제거해주면 된다. 

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

Webhacking.kr old-38  (0) 2024.11.08
Webhacking.kr - old-15  (1) 2024.11.08
Dreamhack - Apache htaccess  (0) 2024.10.05
Dreamhack - blind sql injection advanced  (0) 2024.09.29
wargame.kr md5 password  (0) 2024.09.23