企业信息收集
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
企业自研扫描器之路:信息收集模块 wadcl2016-08-02现金奖励共573763人围观 ,发现 36 个不明物体 WEB安全观点
*本文原创作者:wadcl,本文属FreeBuf原创奖励计划,未经许可禁止转载
前言
随着甲方的安全工作进入了轨道,要提高工作效率以及减少重复工作的次数,迸发出了弄个工具的想法,主要是想弄个扫描器,而现有的wvs、appscan等这类工具,由于种种原因和环境,并不能满足我们的需求,所以只能走入自研之路。
然后对于一个没有做过开发的人来说,体验开发的过程无疑是痛苦的,而对于自己本身又是需求者和设计者,无疑更痛苦。但经过与朋友的沟通和参考一些巨头公司同行流出的思路,于是拆分成下面的几个大的部分:
Clipboard Image.png
如今我们一直在信息收集模块奋斗中,不过我们也终于是见到了曙光,于是就先分享一下信息收集模块的思路和实现的步骤。
信息收集模块的总体设计
对于信息收集模块的设计,如下:
Clipboard Image.png
其实刚开始只考虑到爬虫,但是后期的交流才发现自己的落伍,原来流量镜像才是王道,使用流量镜像进行收集的话,好处很多,除了收集信息之外,其实还有许多好处,例如可以负责监控有没有新的产品和应用的上线等等。
不过流量镜像的收集有些被动,所以也就继续加入了爬虫模块,之后有朋友说他们公司的测试用了webdriver,于是又研究了一些webdriver,发现webdriver的一个特点实现模拟点击,也就解决了我对爬虫如何取ajax的请求值的问题了(其实爬虫也可以实现ajax的取值,例如开源的Heritrix中就有)。
爬虫的实现
爬虫的初步实现,比较容易,思路就是不断遍历新的地址,只不过在这个过程中需要考虑边界的问题,和防止重复爬去的问题,于是在设计的时候就加入了白名单和黑名单的设计:
Clipboard Image.png
首先是请求包的实现,这个直接采用了httpclient.jar来实现,可以直接实现http和https的请求,只需要考虑是get还是post方式,获取其实请求方式,可以加入method字段进行判断:
Clipboard Image.png
之后是数据的提取,很多地址字段中的可能是相对路径,因此需要在处理的时候就加入域名和请求协议,在这个过程中,也可以进行黑白名单的检测,例如后缀的检测,以从href和src中提取为例:
仅供参考
// 提取href/src等属性
public ArrayList dealHtml(String result){
ArrayList urls_list = new ArrayList();
String regex="<\\w.*?>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(result);
StringBuffer content=new StringBuffer();
while(matcher.find()){
String temp=matcher.group();
// System.out.println(temp);
String regex_attr="((\\w+)=([\"](\\S*)?[\"]|['](\\S*)?[']))>?";
// String regex_attr = "((\\w+)=[\"?](\\S*)[\"?])";
Pattern pattern_attr = Pattern.compile(regex_attr);
Matcher matcher_attr = pattern_attr.matcher(temp);
while(matcher_attr.find()){
// System.out.println(matcher_attr.group());
if(check_attr(matcher_attr.group(2).toLowerCase())){
String temp1=matcher_attr.group(4);
if(temp1==null){
temp1=matcher_attr.group(5);
}
temp1=temp1.replaceAll("&", "&");
if(check_type(temp1)&&check_exclude(temp1)){
// System.out.println(matcher_attr.group(3));
if(check_domain(temp1))
urls_list.add(temp1);
if(!check_url(temp1)){
if(temp1.startsWith("/"))
urls_list.add("http://"+DefaultConf.url_domain+temp1);
else
urls_list.add("http://"+DefaultConf.url_domain+"/"+temp1);
}
}
}
}
}
return urls_list;
}
public boolean check_attr(String attr){
String[] array_attrs = DefaultConf.array_attr;
for(int i=0;i
这正则写的真丑,难道你不知道引用么?
亮了(3)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ 我叫扛把子 还真不知道,我们只是单纯的渗透人员,然后懂点代码而已,所以目前主要是先把我能想到的目的实现了再说!也行有些东西对于大牛来说,一句话就实现了,而对于我们可能需要一长串代码,不过我想我们应该会不断的改进和进步的!像现在我又知道了正则引用了,等会我就去学习一下,又补充了一个知识盲点,好开心
亮了(6)
rake1 (1级) 2016-08-02回复 9楼
携程?
亮了(4)
anonymous 2016-08-02回复 10楼
请问楼主,流量和爬虫抓下来的数据存在哪?
亮了(3)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ anonymous 存数据库中
亮了(3)
anonymous 2016-08-02回复
@ wadcl 楼主用的什么数据库,大规模访问时应该有非常频繁的数据库读写操作吧
亮了(3)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ anonymous 可以先过消息队列,然后进行存储,目前只是测试环境用的mysql,流量还不大,如果流量大,估计脚本自己就先蹦了,就不用说数据库了,现在只是功能的实现,性能后面看如何解决,要不就是分布式。
亮了(1)
放开那个大婶 (2级) 2016-08-02回复 11楼
爬虫难点最大在于伪静态去重,按照你这样去重,遇到伪静态网站咋办。
亮了(3)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ 放开那个大婶 这个也是我比较头疼的地方,针对公司的主要网站还是可以找规律的,但是不通用,比如按目录分割,最后的文件名或者倒数几个目录可以去掉,不放入到md5取值中去
亮了(2)
放开那个大婶 (2级) 2016-08-02回复
@ wadcl 这样的效果其实一般,wvs10.5的爬虫很强,但是没有去重,很慢,不知道你的爬虫和它对比过没有
亮了(1)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ 放开那个大婶 我的爬虫就是一个水货,有流量镜像了,爬虫的作用不大了,wvs的爬虫很强的话,就直接用他的也行,到时候就可以把流量转到镜像上,然后单独解析去重一下,其实考虑到wvs这类工具的问题,其实就是去重的问题,还有不好保存,每次扫描一次,存了一下,下次出了新的功能,又要重新扫描一下,太麻烦,效率太低,像这样我直接扫描一次后,大部分的请求就获取到了,还能保存起来,顺便没事就扫一下,把不需要的给去掉,自由度高一些,而且不用每次等链接了。
亮了(1)
放开那个大婶 (2级) 2016-08-02回复
@ wadcl 我也在写扫描器,加个好友吧,多交流下
亮了(1)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ 放开那个大婶 好的,1993199347
亮了(2)
wowo (1级) 2016-08-02回复 12楼
我好奇你端口镜像的数据是怎么保存的,求指教。 你这种网络入口的镜像端口一般连核心交换的口至少都是10G口吧, 底层数据包是怎么抓取保存的? 难道是tcpdump? wireshark? 单机or 分布式, 如果是分布式, 又是怎么部署的,求指教。
亮了(4)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-02回复
@ wowo 有个工具是httpcap,github上有,他可以直接解析tcpdump的数据包,也可以直接对端口进行监听然后直接解析,目前我这个是一个脚本,可以放到单机上也可以分布式,分布式的话,目前只需要把存储IP地址改一下,就可以直接将处理后的数据数据库中存储了,有朋友建议用消息队列的方式比较好,不过具体的实现和调试,还需要再看情况。
亮了(1)
wowo (1级) 2016-08-02回复
@ wadcl 哦。好的。谢了。 相当于原始的数据包还是tcpdump抓取的。。
亮了(1)
test 2016-08-03回复
@ wadcl httpcap性能怎么样?对于百兆以上的流量解析是否会出现丢失问题?我们之前测试过类似软件justniffer,最后就是发现大流量情况下丢包严重。。。
亮了(1)
wadcl (3级) http://lcdaw.blog.163.com/ 2016-08-03回复
@ test httpcap也有问题,解包格式也有的时候有问题,有朋友建议用gor来引流,好像gor就直接解包了,准备试试,而且是分布的,因为这里解包的工具不是自己的,所以替换起来还是比较容易的。
亮了(2)
Fiend520 (7级) 2016-08-02回复 13楼
谢谢
亮了(4)
Sven_ll (1级) 2016-08-02回复 14楼
mark!
亮了(1)
softbug 认证作者专栏作者(7级) i am here! 2016-08-03回复 15楼
没有任何价值
亮了(2)
KissMyAss 2016-08-03回复 16楼
什么玩意,简直没有任何价值
亮了(3)
webscan 2016-08-04回复 17楼
对写扫描器的人还是有一定帮助的,收集CRUD的操作请求,是写扫描器的很重要的的一个环节。
亮了(1)
AUOK 2016-08-04回复 18楼
赞。信息收集决定了后期渗透的维度。
亮了(1)
clutchfactor (1级) 2016-08-04回复 19楼
:oops: :oops: :oops:
亮了(1)
blrk (1级) 2016-09-05回复 20楼
对于需要登录(也就是需要会话,一般是cookie字段)才能访问的接口,楼主有木有考虑怎么处理?
亮了(1)
1154896589 2016-10-02回复 21楼
私人定制的, 才是最好的
亮了(1)
shadow (1级) https://github.com/shadow-hors... 2017-01-17回复 22楼
16年8月份的文章,很有帮助,最近也在搞 Web安全自动化扫描平台,零起步啊,分析的头疼,哈哈!! 加你好友了 :)
亮了(0)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
wadcl
http://lcdaw.blog.163.com/
3
文章数
13
评论数
最近文章
一次测试引发的探索:关于分号在java web中的一个特性
2017.06.22
那些年我们“投(shua)”过的票
2017.01.22
企业自研扫描器之路:信息收集模块
2016.08.02
浏览更多
相关阅读
WAScan:一款功能强大的Web应用程序扫描工具刷SRC经验之批量化扫描实践IBM Security AppScan V8.7下载Nmap备忘单:从探索到漏洞利用(Part 2)独家: iOS是如何收集用户的地理信息的
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank
文章评论