热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP漏洞全解(五)-SQL注入攻击

本文主要介绍针对PHP网站的SQL注入攻击。所谓的SQL注入攻击,即一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。

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

SQL注入攻击的一般步骤:

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

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

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

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

实例

数据库


  1. CREATE TABLE `postmessage` (  
  2. `id` int(11) NOT NULL auto_increment,  
  3. `subject` varchar(60) NOT NULL default ”,  
  4. `namevarchar(40) NOT NULL default ”,  
  5. `email` varchar(25) NOT NULL default ”,  
  6. `question` mediumtext NOT NULL,  
  7. `postdate` datetime NOT NULL default ’0000-00-00 00:00:00′,  
  8. PRIMARY KEY (`id`)  
  9. ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT=’运用者的留言’ AUTO_INCREMENT=69 ;  
  10. grant all privileges on ch3.* to ‘sectop’@localhost identified by ’123456′;  
  11. //add.php 插入留言  
  12. //list.php 留言列表  
  13. //show.php 显示留言  

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

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

返回页面


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

//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转义特殊字符


														
  1. if(get_magic_quotes_gpc())  
  2. {  
  3.     $var = $_GET["var"];  
  4. }  
  5.  else  
  6.  {  
  7.   $var = addslashes($_GET["var"]);  


再次测试,漏洞已经修补


推荐阅读
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • Pikachu平台SQL注入漏洞详解
    本文详细介绍了SQL注入漏洞的基本原理、攻击流程、不同类型注入点的识别与利用方法,以及基于union联合查询、报错信息、布尔盲注、时间盲注等多种技术手段的信息获取方式。同时,探讨了如何通过SQL注入获取操作系统权限,以及HTTP Header注入和宽字节注入等高级技巧。最后,提供了使用SQLMap自动化工具进行漏洞测试的方法和常见的SQL注入防御措施。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • Web安全入门:MySQL基础操作与SQL注入防范
    本文详细介绍了MySQL数据库的基础操作命令,包括数据库和表的基本管理,以及数据的增删查改等常用操作。同时,针对Web安全领域常见的SQL注入问题,提供了初步的理解和防范措施。 ... [详细]
  • PHPFORMYSQL代码生成助手(根据Mysql里的字段自动生成类文件的)_PHP教程:根据Mysql里的字段自动生成类文件:但需要导入:require_once.dbez_sq ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 解决PHP与MySQL之间的编码不匹配问题
    探讨如何有效解决PHP与MySQL之间常见的编码问题,确保数据的正确传输与显示。 ... [详细]
  • MySQL 5.7 绿色版安装及 my.ini 配置详解
    本文主要针对最近因系统重装导致的MySQL配置问题,详细介绍了MySQL 5.7.24绿色解压版的安装步骤及my.ini配置文件的关键设置,帮助用户顺利完成数据库的安装与配置。 ... [详细]
  • 本文探讨了SQL查询执行缓慢的多种可能因素,并提供了详细的解释和解决方案。 ... [详细]
  • Python与MySQL交互指南:从基础到进阶
    本文深入探讨了Python与MySQL数据库的集成方法,包括数据库连接、数据表创建、索引管理、数据操作以及如何防止SQL注入等关键内容。适合初学者及希望提升数据库操作技能的开发者。 ... [详细]
  • mybatis相关面试题 ... [详细]
  • 本文详细探讨了在不同服务器上运行的PHP程序如何成功连接MySQL数据库的方法,包括常见的连接失败原因及解决方案。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • MySQL 索引优化策略与实践
    本文深入探讨了MySQL数据库中的索引优化技术,包括单表索引、多表连接查询索引以及索引失效的常见情况,旨在帮助开发者提高查询效率和数据库性能。 ... [详细]
  • 前端监控系列2 | 深入探讨JS错误监控的重要性与实践
    作者:彭莉,火山引擎APM研发工程师,专注于前端监控技术的研发。本文将深入讨论JS错误监控的必要性及其实现方法,帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
钟寓宛筠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有