728x90
• 알아야 할 것!!!!!!
- magic hash (PHP에서 사용하는 특수동작)
'0' == 0를 비교하면 두 개의 자료형이 달라도 데이터만 일치하며 TRUE를 반환한다.(최적의 자료형을 찾는다 => string >> float >> int 형 순이다)
-> A === B을 사용한다
ex) 지수를 통한 인증을 우회하는 방법 : 0e12345 == 0의 결과는 TRUE
ID와 Password를 통과를 하며 되는 문제이다.
<?php
function getRandStr($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[mt_rand(0, $charactersLength - 1)];
}
return $randomString;
}
require_once('flag.php');
error_reporting(0);
$id = getRandStr();
$pw = sha1("1");
// POST request
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$input_id = $_POST["input1"] ? $_POST["input1"] : "";
$input_pw = $_POST["input2"] ? $_POST["input2"] : "";
sleep(1);
if((int)$input_id == $id && strlen($input_id) === 10){
echo '<h4>ID pass.</h4><br>';
if((int)$input_pw == $pw && strlen($input_pw) === 8){
echo "<pre>FLAG\n";
echo $flag;
echo "</pre>";
}
} else{
echo '<h4>Try again.</h4><br>';
}
}else {
echo '<h3>Fail...</h3>';
}
?>
3개의 PHP 소스가 있지만 우리가 봐야 할 소스는 check.php 만 보면 된다.
if((int)$input_id == $id && strlen($input_id) === 10){
echo '<h4>ID pass.</h4><br>';
if((int)$input_pw == $pw && strlen($input_pw) === 8){
echo "<pre>FLAG\n";
echo $flag;
echo "</pre>";
}
} else{
echo '<h4>Try again.</h4><br>';
}
그중에 여기 부분을 보자~!
1. ID를 통과하기 위해서는 magic hash을 이용하여 0e123456로 길이를 10자로 맞춰주면 통과를 할 수 있다.
2. PW를 통과하기 위해서는 sha1("1")을 암호화하면 356a129~~ 로 시작된다. 그다음 형변환 356.0이므로, 356으로 시작하는 8글자 문자열을 입력하면 통과를 할 수 있다~!!
그렇게 계속 시도를 하다 보면 확률에 따라 flag를 얻을 수 있다~!!~
'모의해킹 > Dreamhack' 카테고리의 다른 글
SSTI(취약점 개념) (0) | 2023.11.09 |
---|---|
baby-union (0) | 2023.11.08 |
Broken Buffalo Wings (0) | 2023.11.05 |
random-test (0) | 2023.11.04 |
amocafe (0) | 2023.11.03 |