Tyojong
[LOS] zombie_assassin 본문
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
문제 목표
if($result['id']) solve("zombie_assassin");
id가 출력되면 문제가 해결된다.
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
id와 pw에서 입력받은 문자열은 addslashes함수와 strrev함수를 거친다.
addslashes함수는 ' " \ null 앞에 \를 붙여 문자열로 처리되도록 하는 함수이고
strrev함수는 문자열의 순서를 거꾸로 만드는 함수이다.
문제 해결
\나 '를 사용하려고 하면 문법에 맞지 않아 문제가 해결되지 않는다.
하지만 " 나 null(%00)를 사용하게 되면
"나 null 앞에 \가 붙게 되어 \" 가 되고 strrev함수로 인해 "\로 바뀌게 되어 기존에 있던 '가 문자열로 바뀌게 되어 "\' and pw= 라는 문자열을 만들 수 있어 우회가 가능하다.
이후 pw에 or 1=1 -- 을 거꾸로 만든 -- 1=1 ro 를 입력하게 되면
'web > LOS' 카테고리의 다른 글
[LOS] succubus (0) | 2025.08.13 |
---|---|
[LOS] assassin (0) | 2025.08.12 |
[LOS] giant (0) | 2025.08.11 |
[LOS] bugbear (0) | 2025.08.09 |
[LOS] darkknight (0) | 2025.08.08 |