labunix's blog

labunixのラボUnix

KVMにOWASP_Broken_Web_Apps_VM_1.2.ovaを導入する。

■KVMにOWASP_Broken_Web_Apps_VM_1.2.ovaを導入する。
 以下よりダウンロード

 OWASP Broken Web Applications Project
 https://sourceforge.net/projects/owaspbwa/files/1.2/

■KVMホストのバージョン

$ lsb_release -d
Description:	Debian GNU/Linux 9.5 (stretch)

$ dpkg -l | awk '/^ii/&&/kvm/{print $2,$3}'
qemu-kvm 1:2.8+dfsg-6+deb9u4

■OVAを展開してVMDKをQCOW2に変換
 lpic303-1.imgに合わせて、[hostname].imgの形式とする。

$ du -h OWASP_Broken_Web_Apps_VM_1.2.ova 
2.5G	OWASP_Broken_Web_Apps_VM_1.2.ova

$ tar tvf OWASP_Broken_Web_Apps_VM_1.2.ova 
-rw-r--r-- someone/64     5653 2015-08-03 13:28 OWASP_Broken_Web_Apps_VM_1.2.ovf
-rw-r--r-- someone/64      169 2015-08-03 13:28 OWASP_Broken_Web_Apps_VM_1.2.mf
-rw-r--r-- someone/64 2616692736 2015-08-03 13:34 OWASP_Broken_Web_Apps_VM_1.2-disk1.vmdk

$ qemu-img convert -O qcow2 OWASP_Broken_Web_Apps_VM_1.2-disk1.vmdk OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2 

$ du -h OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2
5.9G	OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2

$ sudo file /var/lib/libvirt/images/lpic303-1.img
/var/lib/libvirt/images/lpic303-1.img: QEMU QCOW Image (v3), 21474836480 bytes

$ sudo file OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2 
OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2: QEMU QCOW Image (v3), 8589934592 bytes

$ sudo mv OWASP_Broken_Web_Apps_VM_1.2-disk1.qcow2 /var/lib/libvirt/images/owasp-bwa.img
$ sudo chown root:root /var/lib/libvirt/images/owasp-bwa.img
$ sudo chmod 600 /var/lib/libvirt/images/owasp-bwa.img

$ sudo ls -lh /var/lib/libvirt/images/ | awk '/lpic303-1|owasp-bwa/'
-rw------- 1 root         root          21G  719 15:08 lpic303-1.img
-rw------- 1 root         root         5.9G  719 15:20 owasp-bwa.img

■仮想マシンの構成を確認する。
 CPU1コア、1GBメモリ、NW(NAT)、ubuntuベースのrootのパスワードが[owaspbwa]。

$ awk '/<Name>|CPU|memory|Network ovf|osType|Login/' OWASP_Broken_Web_Apps_VM_1.2.ovf
    <Network ovf:name="nat">
    <Name>OWASP Broken Web Apps VM v1.2</Name>
    <OperatingSystemSection ovf:id="93" vmw:osType="ubuntuGuest">
        <rasd:Description>Number of Virtual CPUs</rasd:Description>
        <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName>
        <rasd:ElementName>1024MB of memory</rasd:ElementName>
Login with username=root and password=owaspbwa</Annotation>

■以下からするとid=93は32bit版のubuntuらしい。
 バージョンが無いので適当に最新の17.10にした。
 (実際後で確認したところ、10.04.1 LTSでした)

 OpenNode OVF Reference
 https://opennodecloud.com/howto/2013/12/25/howto-ON-ovf-reference.html

$ w3m -dump https://opennodecloud.com/howto/2013/12/25/howto-ON-ovf-reference.html | grep -A 105 "CIM OsType value map" | grep Ubuntu
"Ubuntu" [93]
"Ubuntu 64-Bit" [94]

■上記と下記の記事をもとに拡張性を考慮して、仮想マシンマネージャから、
 カレント2/最大4コア、カレント2GB/最大4GB、ホストオンリーアダプタに接続する方針で構成。

 OWASP BWA インストール (VirtualBox) - 脆弱性診断研究会
 https://nilfigo.hatenablog.com/entry/2018/05/21/170000

 debian stretchのKVMで仮想マシンのCPU、メモリ、NICの増設とディスクの拡張をしてみた。
 http://labunix.hateblo.jp/entry/20180502/1525262971

■

$ virsh list | awk '/Id|^-|owasp/'
 Id    Name                           State
----------------------------------------------------
 8     owasp-bwa                      running

$ virsh dumpxml owasp-bwa | awk '/vcpu/'
  <vcpu placement='static' current='2'>4</vcpu>

$ virsh dominfo owasp-bwa | awk '/mem/';virsh dommemstat owasp-bwa | awk '/actual/'
Max memory:     4194304 KiB
Used memory:    2097152 KiB
actual 2097152

$ virsh dumpxml owasp-bwa |     awk 'BEGIN{f=0}{if($1=="<interface"||$1=="</interface>") \
                   {f+=1;print $0}else{if(f==1){gsub(":[0-9a-f][0-9a-f]",":XX",$0);print $0}}}'
    <interface type='bridge'>
      <mac address='52:XX:XX:XX:XX:XX'/>
      <source bridge='br1'/>
      <target dev='vnet1'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

■ネットワークはDHCPで取得しない。
 というかどの物理NICにも接続されていないし、デフォルトGWも無い。

$ sudo brctl show br1
bridge name	bridge id		STP enabled	interfaces
br1		8000.fe5400d4fd20	no		vnet1

$ grep -A 10 "^# The priv" /etc/network/interfaces
# The private bridge
auto br1
iface br1 inet static
	address 192.168.0.5
	netmask 255.255.255.0
	network 192.168.0.0
	broadcast 192.168.0.255
	bridge_ports none
	bridge_stp off
	bridge_fd 0
	bridge_maxwait 0

■仮想マシン側で仮にIPアドレスを設定して、
 ssh接続の上、interfaceファイルを編集する。
 何のサービスが動いているのか知らないので、システムの再起動を行う

# ip a show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 52:54:00:d4:fd:20 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 scope global eth0
    inet6 fe80::5054:ff:fed4:fd20/64 scope link 
       valid_lft forever preferred_lft forever
# ip a add 192.168.0.10/24 dev eth0 

# cp /etc/network/interfaces{,org}
# diff /etc/network/interfaces{,org}
10,13c10
< iface eth0 inet static
<   address 192.168.0.10
<   network 192.168.0.0
<   netmask 255.255.255.0
---
> iface eth0 inet dhcp

# ifdown eth0;ifup eth0
ssh stop/waiting
ssh start/running, process 2469

# shutdown -r now && exit
logout
Connection to 192.168.0.10 closed.

■ホスト側ではIPアドレスではなく名前でアクセスしたいので、以下を設定

$ grep -A 2 owasp .ssh/config 
Host owasp-bwa
  User root
  Hostname 192.168.0.10

■32bit版「Ubuntu 10.04.1 LTS」ベース

# lsb_release -d
Description:	Ubuntu 10.04.1 LTS

# uname -a
Linux owaspbwa 2.6.32-25-generic-pae #44-Ubuntu SMP Fri Sep 17 21:57:48 UTC 2010 i686 GNU/Linux

■KVMホストに対して[http://ip-address:8000]でアクセスがあったら、
 [http://owasp-bwa:80]にアクセスするようにsocatを使う。
 あくまで一時的で以下を考慮して。
  ・FWのポート転送はうちの環境では開放する箇所が多すぎる
  ・sshのポートフォワーディングでは暗号化されてしまいパケットキャプチャ出来なくなる。
  ・他のポートにアクセスする必要が出た場合にも応用が効く。

$ socat tcp-listen:8000,fork tcp-connect:192.168.0.10:80

■稼働中の仮想マシンにCPUを増設するには。

$ virsh setvcpus owasp-bwa 4
$ virsh dumpxml owasp-bwa | awk '/vcpu/'

■稼働中にCPUを増設した際には、仮想マシン内から以下を実行することを忘れないように。

$ su root -c 'echo 1 >  /sys/devices/system/cpu/cpu{2,3}/online'

■稼働中の仮想マシンにメモリを増設するには。
 32bit版なので、3GBで十分だけど。。。

$ virsh setmem owasp-bwa 4G
$ virsh dominfo owasp-bwa | awk '/mem/';virsh dommemstat owasp-bwa | awk '/actual/'

■firefoxでプロキシ除外して確認出来し、
 ホストオンリーのだし、デフォルトGW無いL2環境だし、
 ブロードキャスト等もFW配下で隔離されているのでポートスキャンしてみる。
 「うわぁ。。。」と思ったけど、ヤラれサーバなので気にしないことにする。

$ sudo ./myscripts/penetration.sh 
Usage: ./myscripts/penetration.sh [target_ip_address]

$ sudo ./myscripts/penetration.sh 192.168.0.10

Starting Nmap 7.40 ( https://nmap.org ) at 2018-07-19 16:17 JST
...
Completed NSE at 16:39, 0.01s elapsed
Nmap scan report for 192.168.0.10
Host is up (0.00029s latency).
Not shown: 65526 closed ports
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 5.3p1 Debian 3ubuntu4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 ea:83:1e:45:5a:a6:8c:43:1c:3c:e3:18:dd:fc:88:a5 (DSA)
|_  2048 3a:94:d8:3f:e0:a2:7a:b8:c3:94:d7:5e:00:55:0c:a7 (RSA)
80/tcp   open  http        Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL...)
|_http-favicon: Unknown favicon MD5: 1F8C0B08FB6B556A6587517A8D5F290B
| http-methods: 
|   Supported Methods: GET HEAD POST OPTIONS TRACE
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1
|_http-title: owaspbwa OWASP Broken Web Applications
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp  open  imap        Courier Imapd (released 2008)
|_imap-capabilities: completed ACL UIDPLUS CAPABILITY ACL2=UNIONA0001 THREAD=ORDEREDSUBJECT IMAP4rev1 CHILDREN IDLE QUOTA OK SORT THREAD=REFERENCES NAMESPACE
443/tcp  open  ssl/http    Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL...)
|_http-favicon: Unknown favicon MD5: 1F8C0B08FB6B556A6587517A8D5F290B
| http-methods: 
|   Supported Methods: GET HEAD POST OPTIONS TRACE
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1
|_http-title: owaspbwa OWASP Broken Web Applications
| ssl-cert: Subject: commonName=owaspbwa
| Issuer: commonName=owaspbwa
| Public Key type: rsa
| Public Key bits: 1024
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2013-01-02T21:12:38
| Not valid after:  2022-12-31T21:12:38
| MD5:   0fb9 ca0b e9b7 b26f de6c 3555 6186 2399
|_SHA-1: e469 e1f2 9877 40c3 3aec ee7c f630 ca19 31be 05ae
|_ssl-date: 2018-07-19T07:39:01+00:00; -1s from scanner time.
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
5001/tcp open  java-rmi    Java RMI
8080/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
|_http-server-header: Apache-Coyote/1.1
|_http-title: Site doesn't have a title.
8081/tcp open  http        Jetty 6.1.25
| http-methods: 
|   Supported Methods: GET HEAD POST TRACE OPTIONS
|_  Potentially risky methods: TRACE
|_http-server-header: Jetty(6.1.25)
|_http-title: Choose Your Path
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port5001-TCP:V=7.40%I=7%D=7/19%Time=5B50400E%P=x86_64-pc-linux-gnu%r(NU
SF:LL,4,"\xac\xed\0\x05");
MAC Address: 52:54:00:D4:FD:20 (QEMU virtual NIC)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.17 - 2.6.36
Uptime guess: 0.016 days (since Thu Jul 19 16:16:02 2018)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=192 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
| nbstat: NetBIOS name: OWASPBWA, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
|   OWASPBWA<00>         Flags: <unique><active>
|   OWASPBWA<03>         Flags: <unique><active>
|   OWASPBWA<20>         Flags: <unique><active>
|   \x01\x02__MSBROWSE__\x02<01>  Flags: <group><active>
|   WORKGROUP<1d>        Flags: <unique><active>
|   WORKGROUP<1e>        Flags: <group><active>
|_  WORKGROUP<00>        Flags: <group><active>
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_smbv2-enabled: Server doesn't support SMBv2 protocol

TRACEROUTE
HOP RTT     ADDRESS
1   0.29 ms 192.168.0.10

NSE: Script Post-scanning.
Initiating NSE at 16:39
Completed NSE at 16:39, 0.00s elapsed
Initiating NSE at 16:39
Completed NSE at 16:39, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
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 1299.40 seconds
           Raw packets sent: 128025 (5.636MB) | Rcvd: 128020 (5.123MB)