jyamethyst21 님의 블로그
[DreamHack] Web 파트 php7cmp4re 문제 풀이 본문
문제는 다음과 같다.

먼저 문제에 주어진 사이트에 접속을 시도해보았다.

사이트에 접속해보면 input1, input2에 어떠한 값 2개를 입력하고 제출버튼을 했을 때 flag가 출력되는 것으로 보여진다.
이제 문제에서 제공한 코드를 전부 살펴보도록 하겠다.
코드1) flag.php
<?php
$flag = 'flag{**Sample**}'
?>
코드2) index.php
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>php7cmp4re</title>
</head>
<body>
<!-- Fixed navbar -->
<nav class="navbar navbar-default navbar-fixed-stop">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="/">php7cmp4re</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">index page</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container">
<div class="box">
<h4>Enter the correct Input.</h4>
<p>
<form method="post" action="/check.php">
<input type="text" placeholder="input1" name="input1">
<input type="text" placeholder="input2" name="input2">
<input type="submit" value="제출">
</form>
</p>
</div>
<?php
require_once('flag.php');
error_reporting(0);
?>
</div>
</body>
</html>
코드 3_전체) check.php
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>php7cmp4re</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="/">php7cmp4re</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Index page</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container">
<?php
require_once('flag.php');
error_reporting(0);
// POST request
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$input_1 = $_POST["input1"] ? $_POST["input1"] : "";
$input_2 = $_POST["input2"] ? $_POST["input2"] : "";
sleep(1);
if($input_1 != "" && $input_2 != ""){
if(strlen($input_1) < 4){
if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
if(strlen($input_2) < 3 && strlen($input_2) > 1){
if($input_2 < 74 && $input_2 > "74"){
echo "</br></br></br><pre>FLAG\n";
echo $flag;
echo "</pre>";
} else echo "<br><br><br><h4>Good try.</h4>";
} else echo "<br><br><br><h4>Good try.</h4><br>";
} else echo "<br><br><br><h4>Try again.</h4><br>";
} else echo "<br><br><br><h4>Try again.</h4><br>";
} else{
echo '<br><br><br><h4>Fill the input box.</h4>';
}
} else echo "<br><br><br><h3>WHat??!</h3>";
?>
</div>
</body>
</html>
코드 3_일부(핵심)_) check.php
if($input_1 != "" && $input_2 != ""){
if(strlen($input_1) < 4){
if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
if(strlen($input_2) < 3 && strlen($input_2) > 1){
if($input_2 < 74 && $input_2 > "74"){
echo "</br></br></br><pre>FLAG\n";
echo $flag;
해당 문제에는 flag.php, index.php, check.php의 파일이 주어진다. 세개의 코드 파일을 다 열어보면 직접적으로 flag 값을 출력하는 코드와 관련있는 파일은 check.php임을 알 수 있다. check.php의 전체 코드에서 핵심 부분만 추출하면 코드 3_일부(핵심)_)과 같다.
input_1의 조건: 널값이지 않고 길이가 4미만이며, “8” 보다 작고 “7.A” 보다 작으며 “7.9” 보다는 커야한다.
input_2의 조건: 길이가 3미만 1 이상, 74 보다 작고 “74” 보다 커야한다.
코드에서 “”안에 숫자와 문자가 있는 것을 보고 바로 아스키 코드와 관련 있다는 것을 알아챘다. 아래와 같이 파이썬 코드를 활용하여 각 값을 아스키 코드로 변환하였다.
a="8"
b="7"
c="9"
d="."
e="A"
f="4"
print("8:",ord(a))
print("7.A:",ord(b),ord(d),ord(e))
print("7.9:",ord(b),ord(d),ord(c))
print("74:",ord(b),ord(f))
# 결과
#8: 56
#7.A: 55 46 65
#7.9: 55 46 57
#74: 55 52
코드의 결과를 보고 정리한 값을 다음과 같다.
input_1: 길이 4미만, 55 46 57<input_1<55 46 65, input_1<56
input_2: 길이 1이상 3미만, 55 52<input_2<74
상기 조건에 맞는 값을 아래 아스키표를 보고 찾아보았다.
어떠한 특정 값을 원하는 것은 아닌 것 같고 해당 범위에 맞는 값이기만 하면 되니까 조건에 맞게 아무거나 설정하였다.
설정값) input_1=7.;(55 46 59) , input_2=FF (70 70)

위 풀이를 토대로 아래와 같이 사이트에 값을 입력했더니 flag 값을 찾을 수 있었다.


⛳️ FLAG: DH{81df5f707394347306c1ce2693601349407013aedbf79ae8d97a502c3d138bfe}
'WARGAME 🔫' 카테고리의 다른 글
| [H4CKING GAME] 디지털 포렌식 Season1 : Easy (0) | 2025.09.01 |
|---|---|
| [H4CKING GAME] 디지털 포렌식 Season1 : Paint (1) | 2025.08.31 |
| [DreamHack] Web 파트 command-injection-1 문제 풀이 (0) | 2025.04.08 |
| [DreamHack] 디지털 포렌식 파트 Steg-Pack 문제 풀이 (0) | 2025.03.31 |
| [webhacking.kr] old-01 문제 풀이 (0) | 2025.03.14 |
