
https://dreamhack.io/wargame/challenges/1113
php 7.4로 작성된 페이지입니다.
알맞은 Input 값을 입력하고 플래그를 획득하는 문제입니다.
플래그 형식은 DH{} 입니다.
제시된 check.php파일을 확인해 보았습니다.
<?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>";
?>
가 핵심 input1 과 input2를 알아내는 핵심 코드임을 유추해볼 수 있었습니다.
input1을 해결하기 위해 관련 코드를 확인해 보았습니다.
if($input_1 != "" && $input_2 != ""){
if(strlen($input_1) < 4){
if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
위의 코드를 확인한 결과입니다.
갑자기 등장한 "7.A", 문자를 보고, 문자마다 고유한 숫자 값을 부여한 아스키코드 관련된 문제가 아닌지 유추해 보았습니다.
아스키코드 변환기 ( https://ko.rakko.tools/tools/76/) 를 사용하여, 7.9가 55 46 57 , 7.A가 55 46 65 임을 확인하였습니다.

그 사이의 랜덤한 아스키 코드 55 46 58 을 변환하였더니 7.: , input1의 입력값을 알아낼 수 있었습니다.

input2를 해결하기 위해 관련 코드를 확인해 보았습니다.
if(strlen($input_2) < 3 && strlen($input_2) > 1){
if($input_2 < 74 && $input_2 > "74"){
위의 코드를 확인한 결과입니다.
2여야 합니다."74" 보다 커야합니다. 즉, 문자열 74의 아스키코드와 숫자 74의 사이여야 합니다.아스키코드 변환기를 사용하여 "74"가 55 52 임을 확인하였습니다.

55 53 , 55 54 ... 등을 변환해가며 숫자 74보다 작은 길이 2의 문자를 찾아내면 됩니다.
랜덤한 값인 55 60 을 변환해보니 7< 임을 확인하였습니다.

이는 74보다 작은 값이고, 문자열 "74"보다 아스키코드의 값이 큼으로 input2의 입력값 또한 알아낼 수 있었습니다.
input1 : 7.: , input2 : '7<' 로 로그인을 시도하였고, 성공적으로 플래그를 획득할 수 있었습니다.


input1 must be a string:"7.9" and less than "7.A" and "8"input1 = "7.:" (ASCII: 55 46 58), which fits within the required ASCII range between "7.9" (55 46 57) and "7.A" (55 46 65).input2 must:"74""7<" satisfies the condition (7< = ASCII 55 60)input1 = "7.:" and input2 = "7<" reveals the flag.