728x90
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
$db = dbconnect();
if($_POST['lid'] && isset($_POST['lphone'])){
$_POST['lid'] = addslashes($_POST['lid']); #특수문자앞에 백슬래쉬를 붙임
$_POST['lphone'] = addslashes($_POST['lphone']);
$result = mysqli_fetch_array(mysqli_query($db,"select id,lv from chall59 where id='{$_POST['lid']}' and phone='{$_POST['lphone']}'"));
if($result['id']){
echo "id : {$result['id']}<br>lv : {$result['lv']}<br><br>";
if($result['lv'] == "admin"){
mysqli_query($db,"delete from chall59");
solve(59);
}
echo "<br><a href=./?view_source=1>view-source</a>";
exit();
}
}
if($_POST['id'] && isset($_POST['phone'])){
$_POST['id'] = addslashes($_POST['id']);
$_POST['phone'] = addslashes($_POST['phone']);
if(strlen($_POST['phone'])>=20) exit("Access Denied");
if(preg_match("/admin/i",$_POST['id'])) exit("Access Denied"); #대소문자 구분 x
if(preg_match("/admin|0x|#|hex|char|ascii|ord|select/i",$_POST['phone'])) exit("Access Denied");
mysqli_query($db,"insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')");
}
?>'a',
<html><head><title>Challenge 59</title></head><body>
<form method=post>
<table border=1>
<tr><td></td><td>ID</td><td>PHONE</td><td></td></tr>
<tr><td>JOIN</td><td><input name=id></td><td><input name=phone></td><td><input type=submit></td></tr>
<tr><td>LOGIN</td><td><input name=lid></td><td><input name=lphone></td><td><input type=submit></td></tr>
</form>
<br>
<a href=./?view_source=1>view-source</a>
</body></html>
소스 코드를 보면 대부분 다 필터링 기능이 있다는걸 알 수 있다.
addslashes 함수는 작은따옴표, 큰따옴표, 백슬래쉬 등의 기호들이 있으면 앞에 \(백슬래쉬)를 붙여 기호가 아닌 문자로 만드는 역할을 한다.
addslashes함수 우회법이 있기는 한데 이건 utf-8인코딩을 할때만 가능한 얘기니 여기서는 우회가 불가하다.
일단, lv에 admin이 오기 위해서 JOIN기능을 이용해 lv이 admin인 계정을 만들어야 한다.
이때, admin과 char, hex 등 모두 필터링이 되어있으니 reverse()함수 기능을 사용하겠다.
그리고 phone의 길이가 20이 넘으면 안되기에 다음과 같이 입력하겠다.
id에 nimda, phone에 22,reverse(id));-- 이렇게 입력하면 phone에 22가 들어가고 id를 reverse한 값인 admin이 lv에 들어가게 된다.
id에 nimda, phone에 22를 입력해서 로그인하면 flag를 얻을 수 있다.
728x90
반응형
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 23번 문제 풀이 (0) | 2023.12.03 |
---|---|
Webhacking.kr old-61 풀이 (0) | 2023.12.03 |
Webhacking.kr old-36 풀이 (0) | 2023.11.25 |
Webhacking.kr old-25 풀이 (php wrapper) (2) | 2023.11.21 |
[Webhacking.kr] old-18번 문제 풀이 (0) | 2023.08.13 |