Nop <?php
include "./config.php";
extract($_GET);
if($privateKey === $key) 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">extract</span><span style="color: #007700">(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">);<br /> if(</span><span style="color: #0000BB">$privateKey </span><span style="color: #007700">=== </span><span style="color: #0000BB">$key</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>
[Web Hacking] PHP extract() function 취약점 (tistory.com)
위 링크를 참고해 PHP extract() function 취약점을 통해 풀 수 있다.
extract() 함수는 배열 속의 키 값들을 변수화하는 역할을 한다.
$_GET 또는 $_POST 인자도 넘길 수 있으며 넘어오는 파라미터와 값을 변수와 그 초기값으로 설정할 수 있다.
이때 넘어온 인자는 함수 사용 전의 기존 값을 덮어쓸 수 있는(Overwrite) 취약점이 발생한다.
extract($_GET)을 이용해 $_GET 배열 내부에 키 값을 생성해 변수로 활용한다.
privateKey와 key를 생성하고 같은 값을 할당하면 이를 비교한 뒤 TRUE를 반환할 것이다.
'CTF > SWING CTF 2023' 카테고리의 다른 글
[Web] Magic-4 (0) | 2023.08.05 |
---|---|
[Web] Magic-3 (0) | 2023.08.05 |
[Web] Magic-1 (0) | 2023.08.05 |
[Misc] Nogada (0) | 2023.08.05 |
[Rev] Unsolvable (0) | 2023.08.05 |