https://dreamhack.io/wargame/challenges/1113
서버를 생성 후 들어가보면 이런 화면이 뜬다.

한번 입력해보았다.

그러니 다시 해보라고 뜬다.


이것도 다시해보라고 뜨길래 코드를 뜯어보았다.
<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>
좀 이상한 코드 부분은 이것이다.
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>";
input_1와 input_2를 입력받는데,
첫번째 조건 : $input_1과 $input_2가 모두 비어있지 않은지
두번째 조건 : input_1의 길이가 4보다 작아야한다.
세번째 조건 : input_1이 "8"보다 작고 "7.A"보다 작으며 "7.9"보다 큰지를 확인한다.
--> 7.A보다 작은 수가 무엇인지 모르겠고, 8보다 작고 7.9보다 큰 수는 7.9XX를 의미하는게 아닐까라는 생각..
네번째 조건 : input_2의 길이가 3보다 작고 1보다 큰지 본다.
다섯번째 조건 : input_2가 74보다 작고 "74"보다 큰지 확인한다.
이 조건이 되게 이상하다고 생각했다.
특히 7.A가 이상하다고 생각했다. 갑자기 문자가?
그래서 아스키코드가 아닐까? 라는 생각이 들어 변환해보았다.
input_1부터 해결해보자면
7.A --> 55 46 65

7.9 --> 55 46 57

즉, 55 46 57 < ? < 55 46 65 의 사이이면 되는 것이다.

7.:이 만족하는 것을 확인했다.
이제 input_2를 해결해보면
74 --> 55 52

즉, $(55 52) < ? < 74 의 사이의 숫자이면 되는 것이다.
그리고 길이가 2이여야 하기에 찾아보면
$(55 52) < 8

< --> 60

이것을 보고 숫자가 아닌 문자를 쓰면 되겠구나 싶었다.
문자 길이가 2여야 하기 때문에 << 로 해준다.



성공^^
아래는 실패한 것..


그러나 good try가 떴다.. 뭘까?
알고보니 조건을 잘못 생각했다.