1. ๋ฌธ์
https://dreamhack.io/wargame/challenges/1113
2. ํด๊ฒฐ ๊ณผ์
๋ฌธ์ ํ์ด์ง์ ์ ์ํ๋ฉด ๋๊ฐ์ input๊ฐ์ ์ ๋ ฅํ๋ ์นธ์ด ๋ฌ๋ค.
์ด ๊ฐ์ ๋ฐ๋ผ try again ๋ฑ์ด ๊ฒฐ๊ณผํ๋ฉด์ผ๋ก ๋ณด์ฌ์ง๋ค.
(1) ์ฝ๋ ๋ถ์
<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>
์ค์ํ ๋ถ๋ถ์ input ๊ฐ์ ๋ํ ์กฐ๊ฑด๋ฌธ ์ ๋น๊ต ์ฐ์ฐ์ด๋ค.
๊ฐ์ฅ ์ฒซ ๋ถ๋ถ์์๋ ๋ ๋ณ์์ ๊ฐ์ด ํ ๋น๋์๋์ง ํ์ธํ๋ค. post๋ก ๋ฐ๋ ์ ๋ ฅ๊ฐ์ ๋ชจ๋ ๋ฌธ์์ด๋ก ์ ๋ ฅ๋๋ค.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$input_1 = $_POST["input1"] ? $_POST["input1"] : "";
$input_2 = $_POST["input2"] ? $_POST["input2"] : "";
sleep(1);
1) input_1์ ๋ํด์๋ ๊ธธ์ด๊ฐ 4๋ณด๋ค ์์์ง ํ์ธํ๊ณ ,
2) input_1์ ๊ฐ์ด "8"๋ณด๋ค ์๊ณ , "7.A"๋ณด๋ค ์์ผ๋ฉฐ, "7.9"๋ณด๋ค ์ปค์ผ ํ๋ค.
์ด๋ ๋น๊ต๊ฐ์ ""๋ก ๋ฌธ์์ด๋ก ๋์ด์๋ ๊ฒ์ ๋ณด์, ๋จ์ํ ์ซ์ ๋น๊ต ๋ฌธ์ ๋ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์๋ค.
์์คํค ์ฝ๋๊ฐ ์๊ฐ๋์ ์ด๋ฅผ ํตํด ๋น๊ต ์ฐ์ฐ์ ํต๊ณผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค.
if($input_1 != "" && $input_2 != ""){
if(strlen($input_1) < 4){
if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9"){
"8"์ 10์ง์์ ์์คํค ๊ฐ์ผ๋ก ์นํํด์ ์๊ฐํ๋ฉด 56, "7.A"๋ 55 46 65, "7,9"๋ 55 46 57์ด๋ค.
์ฆ, 56 ๋ณด๋ค ์๊ณ , 55 46 57 - 55 46 65 ์ฌ์ด์ ๊ฐ์ด์ด์ผ ํ๋ค.
[10์ง์ <-> ๋ฌธ์์ด] https://ko.calc-site.com/bases/ascii
์ด์ ํด๋นํ๋ 55 46 60 ์ ๊ฐ์ ๋ฌธ์๋ก ์นํํด๋ณด๋ฉด 7.<์ด ๋์จ๋ค.
์ด๋ ๋ฌธ์์ด์ด ๊ธธ์ด๊ฐ 4 ๋ฏธ๋ง์ด๋ฉฐ, ์กฐ๊ฑด๋ฌธ์ ํด๋นํ๋ ๊ฒ์ด๋ค.
+)
ํ์ง๋ง ์ด 55 46 60์ ๊ฐ์ด 56๋ณด๋ค ์์์ง ํ์คํ์ง ์์ ์ค์ ๋ก php ์ฝ๋๋ก ๋น๊ต๋ฌธ์ ๋ง๋ค์ด ํ์ธํด๋ณด์๋ค.
<?php
function compareStrings($str1, $str2) {
if ($str1 < $str2) {
echo "\"$str1\" < \"$str2\"<br>";
} elseif ($str1 > $str2) {
echo "\"$str1\" > \"$str2\"<br>";
} else {
echo "\"$str1\" = \"$str2\"<br>";
}
}
// ๋น๊ตํ ๋ฌธ์์ด๋ค
$input = "7.<";
$input1 = "7.9";
$input2 = "7.A";
$input3 = "8";
// ๋ฌธ์์ด ๋น๊ต ๊ฒฐ๊ณผ ์ถ๋ ฅ
compareStrings($input, $input1); // "7.9" ๋น๊ต
compareStrings($input, $input2); // "7.A" ๋น๊ต
compareStrings($input, $input3); // "8" ๋น๊ต
?>
[๊ฒฐ๊ณผ]
"7.<" > "7.9"
"7.<" < "7.A"
"7.<" < "8"
PHP์์ ๋ฌธ์์ด์ ๋น๊ตํ ๋์๋ ๋ฌธ์์ด์ ์ ์ฒด๋ฅผ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋ค.
์ด๋, ๋น๊ต๋ ๋ฌธ์์ด์ ๊ตฌ์ฑํ๋ ๊ฐ ๋ฌธ์์ ASCII ๊ฐ์ ๋ฐ๋ผ ์ด๋ฃจ์ด์ง๋ค. ๋ฐ๋ผ์, ๋ ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๊ฐ ๋์ผํ๋ค๋ฉด, ๊ทธ ๋ค์ ๋ฌธ์๋ฅผ ๋น๊ตํ๊ณ , ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด ์ ์ฒด ๋ฌธ์์ด์ ๋น๊ตํ๋ค.
- "7.<"์ "8"์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ๊ฐ๊ฐ '7'๊ณผ '8'์ด๋ค
- '7'์ ASCII ๊ฐ์ 55์ด๊ณ , '8'์ ASCII ๊ฐ์ 56์ด๋ค.
์ฌ๊ธฐ์ ๋ ๋ฒ์งธ ๋ฌธ์๋ ๋น๊ตํ ํ์๊ฐ ์๋ค. ์๋ํ๋ฉด ์ฒซ ๋ฒ์งธ ๋ฌธ์์์ ์ด๋ฏธ ์ฐจ์ด๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. '7'(55)๋ณด๋ค '8'(56)์ด ํฌ๊ธฐ ๋๋ฌธ์, "7.<"๋ "8"๋ณด๋ค ์์ ๊ฒ์ผ๋ก ํ๋จ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์, ๋ฌธ์์ด ๋น๊ต๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์์์ ์ด๋ฏธ ๊ฒฐ์ ๋์๊ณ , ๋ ์ด์ ๋ค๋ฅธ ๋ฌธ์๋ค์ ๋น๊ตํ์ง ์๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ด๋ PHP๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋๋ถ๋ถ ๋น์ทํ๊ฒ ๋์ํ๋ค.
๋ค์์ผ๋ก input_2์ ๋ํ ๋น๊ต์ฐ์ฐ์ด๋ค.
1) input_2์ ๋ํด์๋ ๊ธธ์ด๊ฐ 3๋ณด๋ค ์์์ผ ํ๋ฉฐ, 1๋ณด๋ค ์ปค์ผ ํ๋ค (์ฆ 2์ฌ์ผ ํ๋ค.)
2) ๊ฐ์ 74๋ณด๋ค ์๊ณ "74"๋ณด๋ค ์ปค์ผ ํ๋ค.
if(strlen($input_2) < 3 && strlen($input_2) > 1){
if($input_2 < 74 && $input_2 > "74"){
๋ค์ input_2๋ 2์๋ฆฌ ์๋ก ๊ฐ์ด 74๋ณด๋ค ์๊ณ , ์์คํค๊ฐ "74" ์ฆ, 55 52๋ณด๋ค ์ปค์ผ ํ๋ค.
PHP์์๋ ์ ์์ ๋ฌธ์์ด ๋น๊ต์, ๋ฌธ์์ด์ด ์ ์(์์คํค๊ฐ)๋ก ์ ํํด์ ๋น๊ตํ๋ค.
์ฆ 55 52 - 74 ์ฌ์ด์ ์ ์ค 2์๋ฆฌ์ธ ๋ฌธ์์ด์ ์ฐพ์ผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ 55 74 (7J) ์ ๊ฐ์ ์๊ฐํด๋๋ค.
7J๊ฐ 74๋ณด๋ค ์์ ์ด์ ๋ ์๋ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค.
7J๋ ๋ฌธ์์ด๋ก ์ ์ํ์ผ๋ก ๋ฐ๋๋ฉด 7๋ก ๋ฐ๋๊ฒ ๋๋ค. ์ฆ 74๋ณด๋ค ์์ ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค.
<?php
function convertAndCompare($str, $int) {
// ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํ
$converted = (int)$str;
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
echo "Original string: \"$str\"\n";
echo "Converted to integer: $converted\n";
// ๋น๊ต ๊ฒฐ๊ณผ ์ถ๋ ฅ
if ($converted == $int) {
echo "The converted value ($converted) is equal to $int.\n";
} elseif ($converted < $int) {
echo "The converted value ($converted) is less than $int.\n";
} else {
echo "The converted value ($converted) is greater than $int.\n";
}
echo "----------------------------\n";
}
// ํ
์คํธ ๋ฌธ์์ด๊ณผ ์ ์
$str1 = "7J";
$str2 = "12.34abc";
$str3 = "abc123";
$str4 = "00056xyz";
$int = 74;
convertAndCompare($str1, $int);
convertAndCompare($str2, $int);
convertAndCompare($str3, $int);
convertAndCompare($str4, $int);
?>
(2) ์ต์คํ๋ก์
์ด์ ๋ฐ๋ผ input_1์๋ 7.< , input_2์๋ 7J๋ฅผ ์ ๋ ฅํ๋ค.
ํ๋๊ทธ ํ๋ ์ฑ๊ณต