SQL注⼊测试
简介
SQL 注⼊是⼀种专门针对SQL语句的攻击⽅式。通过把SQL命令插⼊到web表单提交、输⼊域名或者页⾯请求的查询字符串中,利⽤现有的程序,来⾮法获取后台的数据库中的信息。在web的测试中涉及到的会⽐较多些。
注⼊原理
存在注⼊的原因是后台在编写程序时,没有对⽤户输⼊的数据做过滤。例:
1、⽤户在某个输⼊框提交的参数是123。
浏览器提交的URL为: /index.php?id=123
服务器后台执⾏SQL语句:select * from table1 where id = 123
此时是没有任何影响的。
2、如果⽤户提交的参数是 123;drop table
服务器后台执⾏SQL语句: select * from table1 where id =123 ; drop table
相当于后台执⾏了两条SQL语句,查表,并且把table删除, 从⽽导致了SQL注⼊
检测注⼊的⽅法
⽬前主要有两种检测⽅式:
⼀、⼿⼯注⼊检测流程:
1. 判断是否存在注⼊点
www.abc/index.php?id=2
www.abc/index.php?id=2 and 1=1
www.abc/index.php?id=2 and 1=2
第2条返回正常,
drop table if exists admin第1,3条返回不正常说明id参数存在注⼊漏洞
2. 判定是否存在admin表
www.abc/index.php?id=2 and exists(select * from admin)
返回正常,存在admin表
3. 猜admin表中的字段名
www.abc/index.php?id=2 and exists(select username from admin)
返回正常表⽰admin表存在username字段
4. 检测其他sql操作
⼆、⼯具检测:
sqlmap: sqlmap是⼀个开源的渗透测试⼯具,可以⽤来进⾏⾃动化检测,利⽤SQL注⼊漏洞,获取数据库服务器的权限。
1. 下载地址
github/sqlmapproject/sqlmap.git 2. 常⽤命令
测试
以⼀个sqlmap检测URL为例:
1. 检测过程:
2. 检测结果:
可知该次注⼊检测没有成功。
防⽌sql注⼊代码:(1)修改php.ini magic_quotes_gpc=Off,打开开关,不常⽤;
(2)获取到参数后,调⽤$username = addslashes($username);
说明:string addslashes ( string $str ) 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL( NULL 字符)。举例:⽤户在name中输⼊' or 1=1#,其中#是sql中的注释,#会过滤sql中的where校验等,⽽or 1=1恒真,就会造成返回所有⽤户列表。
(3)mysql_escape_string();原理和(2)差不多;
总结:
登录防sql注⼊的⽅法: 1、修改php.ini配置⽂件中magic_quotes_gpc=On (⽤单引号引⽤⽤户输⼊的数据)(不实⽤)
2、使⽤函数addSlashes() (在预定义字符之前添加反斜杠)
3、使⽤mysql_escape_string() (在SQL语句特殊字符前添加反斜杠)
拓展:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论