前言
Author: 0x584A
知识:
- Nmap
- Laravel RCE CVE-2018-15133
- hydra
- LinEnum and LinPeas
- audit log file
- SUID
信息收集
从端口扫描详情来看,已知开放了 22、80、33060 端口,其中 80 端口访问后会重定向至 http://academy.htb/ ,所以我们需要将这个域名加入到 hosts 中去。
10.10.10.215 academy.htb
whatweb 扫了一下,没有什么有用的信息,Apache/2.4.41 (Ubuntu)
。
访问后右上角存在一个登陆和注册按钮,查看页面源代码也依然只有这两个路径。从访问的URL路径上判断这个是一个PHP站。
<a href="http://academy.htb/login.php">Login</a>
<a href="http://academy.htb/register.php">Register</a>
在登录页面试试输入弱口令: admin/admin
,酷~ 直接登录进去了…
然后将页面所有功能都点击了一遍,无效,所有带有POST的请求均是404,这就是让你瞅瞅的前台页面…
gobuster 扫了一下目录,识别出一个 admin.php 页面。访问后和前台登录页面长得一样,依然输入 admin/admin
成功进入。
这里给出了新的域名 dev-staging-01.academy.htb
,将其加入 hosts 后访问。
user.txt
显示了一个 Laravel 框架的 debug 详情页,从信息中可以获取到 Web 服务部署的绝对路径,数据库连接的账号密码,连接了Redis。
一开始没台看懂,直到 google 了关键字:Laravel rce
CVE-2018-15133:可以在 APP_KEY 泄露的情况下进行远程命令执行,通过控制 Cookie 触发 RCE。
在 msf 中也能搜到 exploit
APP_KEY:"base64:dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0="
我用的是: https://github.com/aljavier/exploit_laravel_cve-2018-15133
,因为想避免使用 msf 来稳固基础知识。
从脚本中了解到,输入 --interactive
可以直接拿到一个具有交互模式的shell。
这个shell每次执行命名都很慢,所以再反弹一个shell到NC上。
额… ps 查看了一下进程,发现有个沙雕反弹了很多shell到他的IP
laravel 的环境配置信息一般都放在项目目录下的 .env
文件中,所以能直接找它。
使用该密码连接mysql失败,随后尝试通过已知的用户名和密码进行ssh登录爆破:
root.txt
接下来运行 LinEnum.sh
收集很多信息
发现 bash 命令有 SUDI 权限,那我们直接用它就可以获得root权限:
通常来说,Linux运行一个程序,是使用当前运行这个程序的用户权限,这当然是合理的。但是有一些程序比较特殊,比如我们常用的ping命令。
ping需要发送ICMP报文,而这个操作需要发送Raw Socket。在Linux 2.2引入CAPABILITIES前,使用Raw Socket是需要root权限的(当然不是说引入CAPABILITIES就不需要权限了,而是可以通过其他方法解决,这个后说),所以你如果在一些老的系统里ls -al $(which ping),可以发现其权限是-rwsr-xr-x,其中有个s位,这就是suid:
root@linux:~# ls -al /bin/ping
-rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限。
引用自 - https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
正确的解题获取 root.txt
第二天,当我通过账号ssh上靶机时,想补充些suid贴图时发现问题… 之前bash -p
提权是错误的,应该是有人改动过bash,或通过本地提权漏洞改过权限。
真的是…崽种
当登陆后,实际上是一个不完整的 tty
,-p
重载后可以看到已经没有 root 权限了。 所以得重新找思路。
这次用的是 linpeas.sh 进行信息收集,发现 egre55 具有 sudo ,难道是找它的密码?
从登陆记录上看,有四个账号可能登录。全盘搜一下先:$ grep -rin 'egre55' / > /tmp/out.txt
在审计日志中发现有该用户登录信息
默认情况下,在 /var/log/audit/audit.log 文件中的存储的是审核系统日志项。可以通过 aureport 命令对日志进行读取。
在 https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/ 获得有效的帮助
也可以通过搜索定位:
它在日历里的原始记录是这样的:
参考
- https://jlkl.github.io/2020/01/27/Web_15/
- https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
- https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/
- https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-understanding_audit_log_files