查看: 1836|回复: 25

java实现多线程、结合返回码+文件存在的扫描工具

[复制链接]
发表于 2013-1-30 09:55:07 | 显示全部楼层 |阅读模式

前段时间乌云shine上报出一些j2ee分层架构安全的洞(去哪儿任意文件读取(基本可重构该系统原工程)),是由于class、xml等文件的访问控制或推送到前台,导致信息泄露、重构等。于是也把这些xml组合成字典,拿出各种大站2级域名来刷rank

就有这么个需求:
1、可以选择域名字典的扫描器
2、可以选择路径字典的扫描器(都有)
3、多线程

找了很久,结果:
1、没有找到可以选择域名字典的扫描器
2、绝大部分的扫描器是根据head头的返回码来判断文件是否存在,而许多站都设置了跳转及自定义的404页面,结果扫描器都给我返回200,实际上不存在
3、很多vb、c写的程序出错了。。。

只能自己写个了
最大的问题就是根据返回码来识别文件存在的问题,
google找到个py版本的思路:
http://1.lanz.sinaapp.com/?p=146

  • “ 现成的WEB路径扫描工具颇多,但都不尽如人意,主要是它是根据返回的状态码来判断页面是否存在的,比如返回200,就认为找到页面,404则认为页面不存在。但这里有个问题,返回的状态码是服务端可控的,而工具对于状态码的判断规则大都是定死了的,这就使得扫描结果没有多大价值。
  • 所以抽空写了个web扫描工具,它的原理是先探测一个肯定不存在的路径和页面,/mustnotexistspath/和/mustnotexistspath+ext
  • ,将他两的返回码作为页面不存在的标志,如果与之不同,则页面可能存在,原理相当简单,起到了动态判断的效果。”

根据这个,做了点优化
为了可以手动选择字典。。写个java的,这部分实现代码如下:

public void run(){ // System.out.println(threadnumber+"号线程开始扫描"); while(accessed_url_count != MyJFrame.getNeedto_url_count() && !stopscan){ String go_url; synchronized(pool){ while(pool.isEmpty()){ if(accessed_url_count == MyJFrame.getNeedto_url_count()){ System.out.println(threadnumber+"号线程扫描完毕"); return ; } try{ pool.wait(); }catch (InterruptedException e){} } go_url = (String) pool.remove(pool.size()-1); accessed_url_count++; myjframe.setlabel(accessed_url_count); } // System.out.println(threadnumber+"号线程扫描 accessed_url_count = "+accessed_url_count);int abc = go_url.lastIndexOf(".");//访问一个肯定不存在的url,如果返回相同代码,表示不存在该urlString ex_com = go_url.substring(abc+1,abc+4);String ex_cn = go_url.substring(abc+1,abc+3);String go_url_copy;if(ex_com.equals("com") ||ex_cn.equals("cn")){//如果最后一个点"."后面跟着com或者cn则go_url_copy = go_url.substring(0,go_url.length()-9);}else{go_url_copy = go_url.substring(0, abc);}try {hr_first = this.sendGet(go_url);hr_second = this.sendGet(go_url_copy);//判断返回代码if(hr_first.getCode() == 0) continue;if(hr_first.getCode() != hr_second.getCode() &&hr_first.getCode() !=404 &&hr_first.getCode()<500){if(hr_first.getCode()>=400){//400-499if(xx4xx){// System.out.println(go_url+" "+hr_first.getCode());myjframe.show(go_url," "+hr_first.getCode());myjframe.show(go_url_copy," "+hr_second.getCode());}}else if(hr_first.getCode() != hr_second.getCode()&& hr_first.getCode()>=300){//300-399&&不等if(xx3xx){// System.out.println(go_url+" "+hr_first.getCode());myjframe.show(go_url," "+hr_first.getCode());myjframe.show(go_url_copy," "+hr_second.getCode());}}else if(hr_first.getCode() !=hr_second.getCode()){//<300&&不等// System.out.println(go_url+" "+hr_first.getCode());if(hr_second.getCode() == 0)continue;//腾讯域名错误myjframe.show(go_url," "+hr_first.getCode());myjframe.show(go_url_copy," "+hr_second.getCode());}}} catch (IOException e) {e.printStackTrace();}}System.out.println(threadnumber+"号线程扫描完毕");finished_thread_count++;if(finished_thread_count == 20)myjframe.alertfinished();}
发表于 2013-1-31 00:21:43 | 显示全部楼层
观看中  
发表于 2013-1-31 08:16:31 | 显示全部楼层
加油啊!!!!顶哦!!!!!  
发表于 2013-2-10 14:49:14 | 显示全部楼层
一个鸡蛋跑到青藏高原,结果它变成了氢弹;  
发表于 2013-2-12 23:03:29 | 显示全部楼层
爷爷都是从孙子走过来的。  
发表于 2014-9-22 04:35:25 | 显示全部楼层
人生感悟:牵手时,即使你的手有多汗,也别放开。  
发表于 2014-10-4 23:44:56 | 显示全部楼层
文笔流畅,修辞得体,深得魏晋诸朝遗风,更将唐风宋骨发扬得入木三分,能在有生之年看见楼主的这个帖子。实在是我三生之幸啊。  
发表于 2014-12-26 12:37:08 | 显示全部楼层
一楼的位置好啊..  
发表于 2015-1-26 17:22:17 | 显示全部楼层
没有医保和寿险的,天黑后请不要见义勇为……  
发表于 2015-2-28 18:22:40 | 显示全部楼层
不错,支持下  
高级模式
B Color Image Link Quote Code Smilies

本版积分规则