๐๏ธ Access
if you can bypass the strcmp function, you get the flag.
๐พ Exploit Algorithm & Payload
> view-source
<?php
require("./lib.php"); // for FLA
$password = sha1(md5(rand().rand().rand()).rand());
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}else if(isset($_POST['password'])){
sleep(1); // do not brute force!
if (strcmp($_POST['password'], $password) == 0) {
echo "Congratulations! Flag is <b>" . $FLAG ."</b>";
exit();
} else {
echo "Wrong password..";
}
}
?>
<br />
<br />
<form method="POST">
password : <input type="text" name="password" /> <input type="submit" value="chk">
</form>
<br />
<a href="?view-source">view-source</a>
#1
: '/' ํ์ด์ง์์ password๋ฅผ ์ ๋ ฅํ ์ ์๋ ํผ์ด ์๊ณ 'chk' ๋ฒํผ์ ๋๋ฅด๋ฉด ํจ์ค์๋๊ฐ ํ๋ฆฐ์ง ํ์ธํ ์ ์๋ค.
: '/?view-sourc' ํ์ด์ง์์๋ PHP ์น ํ์ด์ง์ ์ผ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
: strcmp ์ทจ์ฝ์ ์ ์ด์ฉํ๋ฉด ํ๋ฆด ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ ์ถํ ์ ์๋ค.
#2
strcmp(): ๋ ๋ฌธ์์ด์ด ๊ฐ์ผ๋ฉด 0์, ๊ฐ์ง ์์ผ๋ฉด 0์ด ์๋ ๊ฐ์ ๋ฐํ
strncmp(): ๋ ๋ฌธ์์ด์ ์ํ๋ ๊ธธ์ด๋งํผ ๊ฐ์ผ๋ฉด 0์ ๊ฐ์ง ์์ผ๋ฉด 0์ด ์๋ ๊ฐ์ ๋ฐํ
: strcmp($a, $b)๋ฅผ ์คํ ํ ๋, $a๊ฐ ์์ผ๋ฉด ์์, $b๊ฐ ์์ผ๋ฉด ์์, $a์ $b๊ฐ ๊ฐ์ผ๋ฉด 0์ด ๋ฐํ๋๋ค. ํ์ง๋ง PHP ํน์ ๋ฒ์ ์์ ์ ๋ ฅ ๊ฐ์ผ๋ก ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด strcmp ํจ์๊ฐ 0์ ๋ฆฌํดํ๋ ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ค.
: ์๋ก $a = Array("a")๊ณ $b = '0ab12..'์ฌ๋ strcmp($a, $b)==0์ True๋ค.
: ๊ฒ๋ค๊ฐ ํ์ฌ "==" ๋์จํ ๋น๊ต๋ฅผ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ NULL == 0(True)๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
("===" ์ผ๋ก ์๊ฒฉํ ๋น๊ต๋ฅผ ํ ๊ฒฐ๊ณผ NULL == 0 (False))
๐Analysis and results for obtaining the Flag DH{…}
'[Dreamhack]WebHacking > Wargame&CTF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] Level1: simple-ssti (0) | 2024.03.24 |
---|---|
[Dreamhack] Level1: random-test (2) | 2024.03.04 |
[Dreamhack] Level2: login-1 (2) | 2024.02.25 |
[Dreamhack] CTF Season 5 Round #4 - BypassIF (1) | 2024.02.25 |
[Dreamhack] Level2: baby-sqlite (0) | 2024.02.23 |