본문 바로가기

Web Hacking/Dreamhack

[Dreamhack] Type c-j write up

올바른 ip와 pw를 입력하면 flag가 나온다. 

 

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Type c-j</title>
</head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">Type c-j</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">Index page</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav><br/><br/><br/>
    <div class="container">
    <?php
function getRandStr($length = 10)
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';

    for ($i = 0; $i < $length; $i++) { // 0 ~ 61까지의 랜덤 숫자로 10자리 생성
        $randomString .= $characters[mt_rand(0, $charactersLength - 1)];
    }
    return $randomString;

}
require_once 'flag.php';
error_reporting(0);
$id = getRandStr(); // 10자리 랜덤 문자
$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>';
}
?>
    </div>
</body>
</html>

 

코드를 보게되면 사용자가 입력한 ip를 int로 형변환하여 랜덤 생성된 문자열과 비교를하고 있다. 직접 php로 문자열을 int로 형변환해보니

 

0이 나온다. 따라서 a 10개를 id에 입력하면 0이될거고 if문에서 길이비교는 통과할 것 같다. 입력해보니

 

? 패스가 된다. 일단 비밀번호는 sha1함수를 통해 1을 해시화한 값이다.

 

 

해보니 위와 같은 값이 나온다. 마찬가지로 int로 형변환을 해본다. 

 

356만 나온다. 뒤에 a값 5개를 넣으면 어차피 인식이 안될거니 자리수를 채워준다. 

 

ㄷㄷ

 

 

if문에서 앞 조건이 형변환 하니 강제 형변환 돼서 뒤 조건도 int형이 되어 조건이 성립된 것 같다.