본문 바로가기
CTF, 워게임 문제 풀이/webhacking.kr

webhacking.kr 46번 문제

by secumark 2022. 12. 14.
728x90

 

SQL Injection 문제다.

 

<?php
  
include "../../config.php";
  if(
$_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 46</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get>
level : <input name=lv value=1><input type=submit>
</form>
<hr><a href=./?view_source=1>view-source</a><hr>
<?php
  
if($_GET['lv']){
    
$db dbconnect();
    
$_GET['lv'] = addslashes($_GET['lv']);
    
$_GET['lv'] = str_replace(" ","",$_GET['lv']);
    
$_GET['lv'] = str_replace("/","",$_GET['lv']);
    
$_GET['lv'] = str_replace("*","",$_GET['lv']);
    
$_GET['lv'] = str_replace("%","",$_GET['lv']);
    if(
preg_match("/select|0x|limit|cash/i",$_GET['lv'])) exit();
    
$result mysqli_fetch_array(mysqli_query($db,"select id,cash from chall46 where lv=$_GET[lv]"));
    if(
$result){
      echo(
"{$result['id']} information<br><br>money : {$result['cash']}");
      if(
$result['id'] == "admin"solve(46);
    }
  }
?>
</body>
</html>

 

source code부터 보자.

일단 lv에 addslashes를 적용하고 있고.. " ", /, *, %를 모두 ""로 처리해버리고 있다. 

select, 0x, limit, cash, i를 쓰면 exit()을 하고 있고,

"select id,cash from chall46 where lv=$_GET[lv]" 이 부분을 조작해야하는 것 같다.

그리고 result['id']가 admin이면 문제가 해결됨.

 

 

일단 level에 숫자를 입력해봤는데, 1-4까지는 cash~ 데이터가 나오고 5부턴 아무것도 안나온다.

lv=1 and id='admin'

이런식으로 입력하면될거 같은데 addslashes를 사용하고 있으니까

%27이 '..

공백은 %20

그리고 지금 0x도 우회하고 있음..... ㅡㅡ

char는 써도 되려나? 아스키코드표를 참고하면 admin은 char(97,100,109,105,110)이다.

lv=1%20&&%20id=%27char(97,100,109,105,110)%27

 

음.... 이렇게 했는데 안된다.

 

..

get 방식으로 처음에 보냈는데 안돼서 그냥 input 창에

1&&id=char(97,100,109,105,110) 이렇게 입력했더니

 

 

문제가 풀렸다. 

참고로 char() 말고 이진수로도 풀이가 가능하다고 함. (16진수만 필터링 됨)

 

어렵다 어려워

 

728x90

'CTF, 워게임 문제 풀이 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 48번 문제 풀이  (0) 2022.12.16
webhacking.kr 47번 문제 풀이  (0) 2022.12.16
webhacking.kr 45번 문제  (0) 2022.12.13
webhacking.kr 44번 문제  (0) 2022.12.10
webhacking.kr 43번 문제  (0) 2022.12.10

댓글