查看: 3018|回复: 25

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

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

前段时间乌云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-2-4 13:56:48 | 显示全部楼层
经过你的指点 我还是没找到在哪 ~~~  
发表于 2013-2-7 19:06:46 | 显示全部楼层
一楼的位置好啊..  
发表于 2014-10-17 04:32:58 | 显示全部楼层
帮你项项吧  
发表于 2014-11-5 10:52:00 | 显示全部楼层
在线等在线等  
发表于 2014-11-18 05:07:58 | 显示全部楼层
努力,努力,再努力!!!!!!!!!!!  
发表于 2014-12-5 15:58:36 | 显示全部楼层
支持你就顶你  
发表于 2014-12-29 01:07:38 | 显示全部楼层
世界上那些最容易的事情中,拖延时间最不费力。  
发表于 2015-1-28 19:51:01 | 显示全部楼层
初来乍到,请多多关照。。。嘿嘿,回个贴表明我来过。  
发表于 2015-3-2 20:04:27 | 显示全部楼层
不错,看看。  
高级模式
B Color Image Link Quote Code Smilies

本版积分规则