首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
PHP漏洞全解(五)-SQL注入攻击
来源:http://www.sectop.com 作者:DoDo 发布时间:2009-11-30  

SQL注入攻击(SQL Injection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。

SQL注入攻击的一般步骤:

1、攻击者访问有SQL注入漏洞的网站,寻找注入点

2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句

3、新的sql语句被提交到数据库中进行处理

4、数据库执行了新的SQL语句,引发SQL注入攻击

实例

数据库

CREATE TABLE `postmessage` (
  `id` int(11) NOT NULL auto_increment,
  `subject` varchar(60) NOT NULL default '',
  `name` varchar(40) NOT NULL default '',
  `email` varchar(25) NOT NULL default '',
  `question` mediumtext NOT NULL,
  `postdate` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 COMMENT='使用者的留言' AUTO_INCREMENT=69 ;

grant all privileges on ch3.* to 'sectop'@localhost identified by '123456';

//add.php 插入留言

//list.php 留言列表

//show.php 显示留言

程序和数据库打包下载地址

点我下载

页面 http://www.netsos.com.cn/show.php?id=71 可能存在注入点,我们来测试

http://www.netsos.com.cn/show.php?id=71 and 1=1         

返回页面

提交 http://www.netsos.com.cn/show.php?id=71 and 1=2       

返回页面

 

一次查询到记录,一次没有,我们来看看源码

//show.php 12-15行

// 执行mysql查询语句
$query = "select * from postmessage where id = ".$_GET["id"];
$result = mysql_query($query)
 or die("执行ySQL查询语句失败:" . mysql_error());

参数id传递进来后,和前面的字符串结合的sql语句放入数据库进行查询

提交 and 1=1,语句变成select * from postmessage where id = 71 and 1=1 这语句前值后值都为真,and以后也为真,返回查询到的数据

提交 and 1=2,语句变成select * from postmessage where id = 71 and 1=2 这语句前值为真,后值为假,and以后为假,查询不到任何数据

正常的SQL查询,经过我们构造的语句之后,形成了SQL注入攻击。通过这个注入点,我们还可以进一步拿到权限,比如说利用union读取管理密码,读取数据库信息,或者用mysql的load_file,into outfile等函数进一步渗透。

防范方法

整型参数:

使用intval函数将数据转换成整数

函数原型

int intval(mixed var, int base)

  • var是要转换成整形的变量
  • base,可选,是基础数,默认是10

浮点型参数:

使用floatval或doubleval函数分别转换单精度和双精度浮点型参数

函数原型

int floatval(mixed var)

  • var是要转换的变量

int doubleval(mixed var)

  • var是要转换的变量

字符型参数:

使用addslashes函数来将单引号“'”转换成“\'”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”,NULL字符加上反斜杠“\”

函数原型

string addslashes (string str)

  • str是要检查的字符串

那么刚才出现的代码漏洞,我们可以这样修补

// 执行mysql查询语句
$query = "select * from postmessage where id = ".intval($_GET["id"]);
$result = mysql_query($query)
 or die("执行ySQL查询语句失败:" . mysql_error());

如果是字符型,先判断magic_quotes_gpc是否为On,当不为On的时候使用addslashes转义特殊字符

if(get_magic_quotes_gpc())

{

        $var = $_GET["var"];

}

else

{

        $var = addslashes($_GET["var"]);

}

再次测试,漏洞已经修补


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·PHP漏洞全解(六)-跨网站请求伪造
·PHP漏洞全解(四)-xss跨站脚本攻
·PHP漏洞全解(三)-客户端脚本植入
·PHP漏洞全解(二)-命令注入攻击
·PHP漏洞全解(一)-PHP网页的安全
·Discuz!的最新拿Webshell法,测
·Google Wave XSS(Unpatched)
·php168 v6.0拿shell漏洞
·discuz!NT 3.0 特殊环境下利用漏
·8603音乐网管理系统0day
·对Fckeditor的一些漏洞总结
·MvMmall漏洞分析
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved