카테고리 없음
Type c-j
서어연연
2024. 5. 25. 20:33
https://dreamhack.io/wargame/challenges/960
Type c-j
Description php로 작성된 페이지입니다. 알맞은 Id과 Password를 입력하여 플래그를 획득하세요. 플래그의 형식은 DH{...} 입니다.
dreamhack.io
문제에 들어가면 이와 같은 로그인 창이 뜬다.
문제 파일을 다운 받고 차례로 열어봤다.
<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++) {
$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>';
}
?>
</div>
</body>
</html>
이는 check 파일이다.
여기서
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>";
이 부분을 보면 id 길이가 10이고 pw 길이가 8임을 알 수 있다.
아이디를 어떻게 구하는가..
찾아보니 $input_id를 int형으로 받고 있는데 이런 경우에 맨 앞자리가 문자형이면 항상 0이라고 한다.
따라서 아이디에는 0을 10번 치면 되겠고 비밀번호를 보자.
$id = getRandStr();
$pw = sha1("1");
sha1 는 단방향 암호의 한 종류로 Secure Hash Algorithm이다.
sha 해시값을 구해주는 사이트를 통해 sha1 해시값을 구했다.
굉장히 긴데 앞에서 pw 길이가 8이라고 했으므로 8자까지 입력해주겠다.
플래그 값이 떴다!