
무슨 문제일까?
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 7</title>
</head>
<body>
<?php
$go=$_GET['val'];
if(!$go) {
echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");
$db = dbconnect();
$rand=rand(1,5);
if($rand==1){
$result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");
}
if($rand==2){
$result=mysqli_query($db,"select lv from chall7 where lv=(($go))") or die("nice try!");
}
if($rand==3){
$result=mysqli_query($db,"select lv from chall7 where lv=((($go)))") or die("nice try!");
}
if($rand==4){
$result=mysqli_query($db,"select lv from chall7 where lv=(((($go))))") or die("nice try!");
}
if($rand==5){
$result=mysqli_query($db,"select lv from chall7 where lv=((((($go)))))") or die("nice try!");
}
$data=mysqli_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); }
if($data[0]==1){
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Access_Denied!')\"><p>");
}
elseif($data[0]==2){
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Hello admin')\"><p>");
solve(7);
}
?>
<a href=./?view_source=1>view-source</a>
</body>
</html>
sqli 문제였다.
근데 풀면서 의문이 들었다.
그냥 15^13 넣으면 rand값이 뭐든 간에 2가 리턴되는거 아닌가?
왜 안되는지 참 의문이였고, 아직까지도 풀리지 않았다.. (아시는 분은 댓글 부탁드립니다!!)
여튼 15^13 부분에서 삽질을 참 오래 했다.
그러다가 그냥 앞에 union 써서 풀었다.
2 - + from _ = 공백 * /
이렇게 필터링하니까 이를 우회해서 짰다.
0)union(select(15^13))%23
이렇게 쓰면 되는데, 해석을 하자면
1. 0)을 통해 이전까지의 쿼리가 아무것도 리턴 안하도록 한다.
2. 그 뒤 union 쿼리로 2를 반환하도록 한다. 나는 15 XOR 13 연산을 사용했다.

풀었다!
'Web > webhacking.kr' 카테고리의 다른 글
| Webhacking.kr old-03 (0) | 2025.05.09 |
|---|---|
| Webhacking.kr old-56 (0) | 2025.05.08 |
| Webhacking.kr old-21 (0) | 2025.05.07 |
| Webhacking.kr RPG-1 (1) | 2025.05.07 |
| Webhacking.kr old-46 (1) | 2025.05.06 |