Academy Writeup

前言

Author: 0x584A

73899944.png

知识:

  • Nmap
  • Laravel RCE CVE-2018-15133
  • hydra
  • LinEnum and LinPeas
  • audit log file
  • SUID

信息收集

74038793.png

从端口扫描详情来看,已知开放了 22、80、33060 端口,其中 80 端口访问后会重定向至 http://academy.htb/ ,所以我们需要将这个域名加入到 hosts 中去。

10.10.10.215 academy.htb

whatweb 扫了一下,没有什么有用的信息,Apache/2.4.41 (Ubuntu)

74260620.png

访问后右上角存在一个登陆和注册按钮,查看页面源代码也依然只有这两个路径。从访问的URL路径上判断这个是一个PHP站。

<a href="http://academy.htb/login.php">Login</a>
<a href="http://academy.htb/register.php">Register</a>

在登录页面试试输入弱口令: admin/admin,酷~ 直接登录进去了…

74467449.png

然后将页面所有功能都点击了一遍,无效,所有带有POST的请求均是404,这就是让你瞅瞅的前台页面…

75018246.png

gobuster 扫了一下目录,识别出一个 admin.php 页面。访问后和前台登录页面长得一样,依然输入 admin/admin 成功进入。

76332945.png

这里给出了新的域名 dev-staging-01.academy.htb,将其加入 hosts 后访问。

user.txt

76590930.png

显示了一个 Laravel 框架的 debug 详情页,从信息中可以获取到 Web 服务部署的绝对路径,数据库连接的账号密码,连接了Redis。

一开始没台看懂,直到 google 了关键字:Laravel rce

76793096.png

CVE-2018-15133:可以在 APP_KEY 泄露的情况下进行远程命令执行,通过控制 Cookie 触发 RCE。

在 msf 中也能搜到 exploit

77700909.png

APP_KEY:"base64:dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0="

我用的是: https://github.com/aljavier/exploit_laravel_cve-2018-15133 ,因为想避免使用 msf 来稳固基础知识。

80944225.png

从脚本中了解到,输入 --interactive 可以直接拿到一个具有交互模式的shell。

81165772.png

这个shell每次执行命名都很慢,所以再反弹一个shell到NC上。

83040835.png

53172271.png

额… ps 查看了一下进程,发现有个沙雕反弹了很多shell到他的IP

82204675.png

laravel 的环境配置信息一般都放在项目目录下的 .env 文件中,所以能直接找它。

83106509.png

使用该密码连接mysql失败,随后尝试通过已知的用户名和密码进行ssh登录爆破:

84482478.png

root.txt

接下来运行 LinEnum.sh 收集很多信息

85691034.png

发现 bash 命令有 SUDI 权限,那我们直接用它就可以获得root权限:

86200500.png

通常来说,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

86138078.png

正确的解题获取 root.txt

第二天,当我通过账号ssh上靶机时,想补充些suid贴图时发现问题… 之前bash -p提权是错误的,应该是有人改动过bash,或通过本地提权漏洞改过权限。

真的是…崽种

39535113.png

当登陆后,实际上是一个不完整的 tty-p重载后可以看到已经没有 root 权限了。 所以得重新找思路。

这次用的是 linpeas.sh 进行信息收集,发现 egre55 具有 sudo ,难道是找它的密码?

40575934.png

40699570.png

从登陆记录上看,有四个账号可能登录。全盘搜一下先:$ grep -rin 'egre55' / > /tmp/out.txt

在审计日志中发现有该用户登录信息

43922922.png

默认情况下,在 /var/log/audit/audit.log 文件中的存储的是审核系统日志项。可以通过 aureport 命令对日志进行读取。

在 https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/ 获得有效的帮助

44299762.png

44671773.png

也可以通过搜索定位:

44727959.png

它在日历里的原始记录是这样的:

44980631.png

45172062.png

参考

  • 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


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。