Nop <?php
include "./config.php";
$key = $_GET['key'];
if(md5($key) == "0") echo $flag;
else echo "Nop";
show_source(__FILE__);
?>
아래는 페이지 소스 보기.
Nop<code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /> </span><span style="color: #007700">include </span><span style="color: #DD0000">"./config.php"</span><span style="color: #007700">;<br /><br /> </span><span style="color: #0000BB">$key </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">];<br /> if(</span><span style="color: #0000BB">md5</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">) == </span><span style="color: #DD0000">"0"</span><span style="color: #007700">) echo </span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br /> else echo </span><span style="color: #DD0000">"Nop"</span><span style="color: #007700">;<br /><br /> </span><span style="color: #0000BB">show_source</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code>
Type juggling
: 느슨한 비교문자 사용으로 값이 일치하지 않더라도 TRUE 값을 리턴하는 취약점
[Concept] PHP Magic Hash 취약점 (tistory.com)
A==B 를 비교하면 자료형이 달라도 데이터만 일치하다면 TRUE 값을 반환하는 이 것을 PHP에서 Magic Hash라고 한다. 이를 방지하려면 A===B라고 표기하자.
여기서 지수 (exponential)을 이용한 트릭으로 인증을 우회할 수 있다.
'0e1234'==0 의 결과가 TRUE임을 이용하는 것이다.
$key = $_GET['key'];
if(md5($key) == "0") echo $flag;
else echo "Nop";
위에 따라 이 부분을 살펴보건대, md5 해시 결과가 0e로 시작하는 문자열이라면 TRUE를 받아 해당 검증을 우회할 수 있다.
위의 표에서 md5 magic number/string인 240610708을 0과 비교하면 TRUE가 나온다.
'CTF > SWING CTF 2023' 카테고리의 다른 글
[Web] Magic-3 (0) | 2023.08.05 |
---|---|
[Web] Magic-2 (0) | 2023.08.05 |
[Misc] Nogada (0) | 2023.08.05 |
[Rev] Unsolvable (0) | 2023.08.05 |
[Rev] README (0) | 2023.08.05 |