记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2013-02-08 00:34

#lockhart [BHST]

前段时间乌云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

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

根据这个,做了点优化
为了可以手动选择字典。。写个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,如果返回相同代码,表示不存在该url

String 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-499
if(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();
}

原创文章,转载请注明: 转载自Black-Hat Security Team

本文链接地址: java实现多线程、结合返回码+文件存在的扫描工具

知识来源: www.bhst.org/?p=110

阅读:86485 | 评论:0 | 标签:安全编程

想收藏或者和大家分享这篇好文章→复制链接地址

“java实现多线程、结合返回码+文件存在的扫描工具”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云