본문 바로가기

CTF/SWING CTF 2023

[Web] Magic-2

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">&lt;?php<br />&nbsp;&nbsp;</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">"./config.php"</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000BB">extract</span><span style="color: #007700">(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">);<br />&nbsp;&nbsp;if(</span><span style="color: #0000BB">$privateKey&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">$key</span><span style="color: #007700">)&nbsp;echo&nbsp;</span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br />&nbsp;&nbsp;else&nbsp;echo&nbsp;</span><span style="color: #DD0000">"Nop"</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;</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">?&gt;</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