SQL手记

本文详细介绍了SQL注入攻击的定义、原因和常见测试方法,如1=1和1=2测试。当存在注入点时,页面可能出现内容缺失或错误。针对MySQL,提到了information_schema库中的关键表。防护措施包括防止SQLmap注入、使用PDO、参数过滤和预编译处理。建议对输入长度进行限制并过滤危险参数,如通过黑名单和白名单策略。同时,还讨论了绕过过滤的方法,如大小写转换和使用SQL注释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:攻击者通过把恶意sql命令插入到web表单的输入域或页面请求的查询字符串中,并且插入的恶意sql命令会导致原有sql语句作用发生改变,从而达到欺骗服务器执行恶意sql命令的攻击。

原因:
用户能够提交非法内容

sqlmap get型注入流程

寻找注入点:
基于方法是参数后面加单引号,观察其返回页面的内容。由于添加单引号会导致sql语句执行错误,因此,若存在SQL注入漏洞,当前页面会报错,或者出现查询内容不显示的情况

1=1 1=2测试
现有三个连接 1 为正常连接 2 为 1=1  3 为1=2
页面没有变化:说明后台针对此查询点的过滤比较严格,是否存在注入点还需要后续测试
页面中少了部分内容:如访问前两个链接正常,访问第三个有明显的内容缺失,则基本上可以确认存在漏洞

回显错误:如果访问第三个链接后出现数据库报错,可以判断当前查询点存在注入

跳转到默认界面:如果访问第一个链接正常,第二第三直接跳转到首页或者默认页面,那么可能是后台有验证逻辑,或者是有在线防护系统或软件提供保护,可以尝试防护工具绕过的思路

直接关闭链接:如果在访问上述第二第三个连接时出现访问失败,通常为防火工具直接开启在线阻断,后续可利用编码、换行等方式尝试绕过(比较难成功)

mysql5.0后内置information_schema库
schemata表:存储MySQL中各种数据库的相关信息,schemata_name极为数据库的名字
tables表:存储所有表的名字,其中table_name表示的表的名称;table_schema字段显示该表所属的数据库名称

cloumns表:存储字段名,其中table_schema表示表所属的数据库名称;table_name百四所属的表的名称;column_name表示字段名

若前端页面设置了下拉选择表单,可以使用burpsuite进行抓包

防护:
若查询提交页面和查询结果显示页面不是同一个,也没有执行302跳转,这要可以防止一般的sqlmap注入,因为sqlmap在注入过程中,无法咋i查询提交页面上获取查询的结果,没有了反馈也就没办法需进一步注入。

采用pdo技术,划清代码和数据的界限,能有效防御SQL注入,同时只有返回的查询结果数量为1才会输出成功,防止脱裤。

参数过滤:数据类型限制和危险字符处理。尽可能限制用户可提交的参数类型和长度

预编译处理:参数化查询,是指数据库服务器在数据库完成sql指令的编译后,才套用参数运行,因此就算参数中含有特殊的参数,也不会被数据库运行。

参数长度检测及绕过:

检测思路:
sql注入语句一般比较长,因此对提交的内容长度进行限制,大部分注入便无法执行

在php中,strlen函数检查输入长度

特定环境下,利用sql语句注释实现对查询语句语义变更,增加的字符长度很少,却会造成严重危害如万能密码

危险参数过滤及绕过:
防护思路:常见的危险参数过滤方法包括关键字、内置函数、敏感字符过滤
过滤方法:
黑名单过滤:将一些可能用于注入的敏感字符写入黑名单中,如单引号union select等,也可以使用正则表达式做过滤

		白名单过滤:用数据库中的已知值校对,通常对参数结果进行合法性检验,符合白名单的数据方可显示
		
		参数转义:对变量默认进行addsalashes或myslq_real_escape_string(在预定字符前添加反斜杠),试得注入语句构造失败
		
		由于白名单方式要求输出参数有者非常明显的特点,因此使用的业务场景非常有限 总体来说,防护手段以黑名单+参数转义为主

绕过方式:
黑名单:绕过黑名单的思路:将关键字或特定的符号进行不同形式的转换,从而实现绕过过滤器的目的。
大小写绕过

	使用sql注释:使用注释代替空格/**/ %0b
	
	双写
	
	使用+号实现危险函数拆分
	
	替换可能的危险字符 like替换=  in替换=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值