반응형

소스보기 클릭


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



이전 3문제 script문제라서 편했는데 다시 injection문제로 돌아왔다.

id가 admin일때 풀리는것을 볼수있다.

여러가지 패턴을 막아놓았다

띄워쓰기,\,&,(,),|,select,from,0x(16진수 표기법) 대소문자구분 없이 막아놓았다.

admin no가 2라는 힌트도 주고있다.

그렇다면 앞의 쿼리는 거짓으로 만들고 뒤에 no=2일때 값을 받아오면 될거같다.

필터링을 피해 시도해보자

대충 2 or no=2"를 넣으면 될것으로보이는데 띄워쓰기가 필터링에 걸린다.

2%09or%09no=2로 입력해주면 될거같은데 입력하고 url을 보면

2%2509or%2509no%3D2로 나온다 아마 요청이 가면 %와=을 자체적으로 url인코딩을 적용하는것 같다.

url에 직접입력해주자

https://webhacking.kr/challenge/web-32/index.php?no=2%09or%09no=2

이런식으로 입력해주면 클리어!


반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-20  (0) 2019.11.25
webhacking.kr old-19  (0) 2019.11.25
webhacking.kr old-17  (1) 2019.11.25
webhacking.kr old-16  (0) 2019.11.25
webhacking.kr old-15  (0) 2019.11.25
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기