๋ฌธ์
์์ค์ฝ๋๊ฐ ์ฃผ์ด์ก๋ค. ์ด์ธ์๋ ๋ณ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ๋ณด์ด์ง ์๋๊ฑธ ๋ณด๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํด์ ํธ๋๊ฒ ์๋๊น ์ถ๋ค.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 26</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
a { color:lightgreen; }
</style>
</head>
<body>
<?php
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
</html>
๋ฌธ์ ๋ถ์
#(1)
์ฒซ ๋ฒ์งธ ์กฐ๊ฑด๋ฌธ์ด๋ค. ์ฌ์ฉ์๋ก๋ถํฐ url ์ฟผ๋ฆฌ ๋ฌธ์์ด์์ id๊ฐ์ ๋ฐ์์จ๋ค. ์ด๋ id๊ฐ์ด admin์ด๋ผ๋ฉด no๋ฅผ ์ถ๋ ฅํ๋ค.
#(2)
์ฌ์ฉ์๋ก๋ถํฐ id๊ฐ์ ๋ฐ์์จ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์์จ id๊ฐ์ ๋์ฝ๋ฉํ๋ค. ์๋ฅผ๋ค์ด '#'์ ์ธ์ฝ๋ฉํ๋ฉด %23์ด ๋๊ณ , ์ด๋ฅผ ๋์ฝ๋ฉํ๋ฉด #๊ฐ ๋๋ค. ์ดํ ๋์ฝ๋ฉํ ๊ฐ์ด admin์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ํ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
<body>
<?php
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } #(1)
$_GET['id'] = urldecode($_GET['id']); #(2)
if($_GET['id'] == "admin"){
solve(26);
}
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
urldecode()
% ๊ธฐํธ์ ๋ค์ ์๋ ๋ ๊ฐ์ 16์ง์ ์ซ์๋ก ์ด์ด์ง ์ธ์ฝ๋ฉ๋ ๋ฌธ์๋ฅผ ์ค์ ๋ฌธ์๋ก ๋ณํํ์ฌ ๋์ฝ๋ฉํ๊ณ , + ๊ธฐํธ๋ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๋์ฒดํ๋ ํจ์์ด๋ค.
$url = 'https://www.example.com/page.php?name=John Doe'; $encoded_url = urlencode($url); echo $encoded_url . '<br>'; // ์ถ๋ ฅ: https%3A%2F%2Fwww.example.com%2Fpage.php%3Fname%3DJohn+Doe $decoded_url = urldecode($url); echo $decoded_url; // ์ถ๋ ฅ: https://www.example.com/page.php?name=John Doeโ
<์ฃผ์ํด์ผํ ์ >
$_GET, $_POST, $_REQUEST์ ๊ฐ์ ์ํผ๊ธ๋ก๋ฒ ๋ณ์๋ ์ด๋ฏธ URL ๋์ฝ๋ฉ์ด ๋ ์ํ์ด๋ค. ์ด๋ฌํ ๋ณ์์์ urldecode() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์์์น ๋ชปํ ๊ฒฐ๊ณผ ๋ฐ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๋ณ์๋ฅผ ์ถ๊ฐ๋ก ๋์ฝ๋ฉํ์ง ์์์ผ ํ๋ค.
์ทจ์ฝ์
1. (1)๋ฒ์ ์ํด id๊ฐ admin์ด๋ฉด ์๋๊ณ , (2)์ ์ํด ๋ณตํธํ๋ id๊ฐ admin์ด๋ฉด ๋ฌธ์ ๊ฐ ํ๋ฆฐ๋ค. ์ ๋ ฅ๊ฐ์ admin์ด ์๋๋ ์ถ๋ ฅ๊ฐ์ admin์ด์ฌ์ผํ๋ค?
์ต์คํ๋ก์(write-up ์ฐธ๊ณ )
PHP์์ url๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ id๋ ์ํผ๊ธ๋ก๋ฒ ๋ณ์์ ์ ์ฅ๋๊ธฐ ์ ์ ์๋์ผ๋ก ๋์ฝ๋ฉ๋๋ค(์ ๋ฆฌ ๋ถ๋ถ ์ฐธ๊ณ ). ๋๋ฌธ์ url ์ธ์ฝ๋ฉ ๋ ๋ฌธ์์ด์ด ๋์ฝ๋ฉ๋ ์ํ๋ก preg_match()์ ์ ๋ฌ๋๋ค.
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } #(1)
$_GET['id'] = urldecode($_GET['id']); #(2)
if($_GET['id'] == "admin"){
solve(26);
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ admin์ 2๋ฒ ์ธ์ฝ๋ฉ ํ ๊ฐ์ id๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์ธ์ฝ๋ฉ 1๋ฒ | %61%64%6d%69%6e |
์ธ์ฝ๋ฉ 2๋ฒ | %2561%2564%256d%2569%256e |
-> preg_match()๊ฐ ๋ ๋ฒ์งธ ์กฐ๊ฑด๋ฌธ๋ณด๋ค ์์ ์์นํ๊ธฐ ๋๋ฌธ์ %2561%2564%256d%2569%256e์ด ๋์ฝ๋ฉ ๋ %61%64%6d%69%6e๊ฐ์ admin๊ณผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์๊ฒ ๋๊ณ , ์๋ ์กฐ๊ฑด๋ฌธ์ urldecode์ ์ํด admin์ผ๋ก ๋์ฝ๋ฉ๋๋ฉฐ ๋ฌธ์ ๊ฐ ํ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ ๋ฆฌ
์ด์ค ์ธ์ฝ๋ฉ(Double Encoding)
: ๋์ผํ ์ธ์ฝ๋ฉ ์ฒด๊ณ(URL Encoding)๋ฅผ ์ด์ฉํ์ฌ ์ด์ค์ผ๋ก ์ธ์ฝ๋ฉํ ๊ฒ์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฐ๋ก์ฑ๋ ๊ถํ ๋ถ์ฌ ์ฒต๊ป๋ ๋ณด์ ํํฐ๋ฅผ ์ฐํํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉ๋๋ค.
์น ์๋ฒ์ ๋ธ๋ผ์ฐ์ ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋, ๋ธ๋ผ์ฐ์ ๋ <form>์์ ์ ๋ ฅ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ผ๋ก ๋ณด๋ด๊ณ , php๋ ์๋์ผ๋ก ๋์ฝ๋ฉ ํ์ฌ ํด์ํ๋ค.
-> ์ํผ ๊ธ๋ก๋ฒ ๋ณ์๋ ๋จ์ํ ๋์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ๋ฟ์ด๋ค.
'๐ฆ Private > webhacking.kr' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
old-16 (0) | 2025.01.02 |
---|---|
old-15 (0) | 2024.12.31 |