sql注入攻击的原理
恶意用户在提交查询请求的过程中将SQL语句插入到请求内容中,同时程序本身对用户输入内容过分信任而未对恶意用户插入的SQL语句进行过滤,导致SQL语句直接被服务端执行 。
SQL注入攻击分类
(1)注入点的不同分类
数字类型的注入字符串类型的注入
(2)提交方式的不同分类
GET注入POST注入COOKIE注入HTTP注入
(3)获取信息的方式不同分类
基于布尔的盲注基于时间的盲注基于报错的注入
SQL注入攻击案例:
1、查看文章的注入案例:
查看某篇文章的url参数为:?id=1
则通过注入命令:?id=1 or 1=1,则可以列出整个数据表里面的所有文章 。
如果查看用户是通过user_id来访问,如:?uid=1
则通过注入命令:?id=1 or 1=1, 则可以把整个用户表的记录全部显示出来
SQL命令如下:
通过?id=1的SQL命令为:select * from article where id=1,此语句查询到1条结构
通过?id=1 and 1=1的SQL命令为:select * from article where id=1 or 1=1,此语句查询到整个表的记录
2、用户登录的注入案例:
登录表单有user_name字段,查询语句为:select * from users where nickname='{user_name}'
则可以在user_name文本框填入:(' or 1='1),这样可以构造出注入的SQL命令:select * from users where user_name='' or 1='1',这样很容易就进入系统了 。
3、SQL注入猜表:
在登录页面的用户名字段填入:(' or 1=(select count(0) from t_porg_document) or 1='1),可以构造出注入的SQL命令:select * from users where user_name='' or 1=(select count(0) from recharge) or 1='1'
这样就可以猜测是否recharge表存在.存在则语句正常执行,否则就报错了 。
猜中表名后,就可以对数据表进行增删改查的操作,如:
在登录页面的用户名字段填入:('; delete from users),可以构造出危险的SQL命令:select * from users where user_name=''; delete from users;
通过加分号,可以构造出任意增删改查sql语句,整个数据库就被攻击者随意控制了 。
【SQL注入攻击的原理】
推荐阅读
- 使用Web日志还原攻击路径
- DNS域名攻击演示——“劫持”正常网页实现恶意重定向
- MySQL千万级大表优化,看这一篇就忘不掉了
- 安卓被曝安全漏洞:允许攻击者通过蓝牙向用户发送恶意软件
- 何谓 SQL 注入,这个漫画告诉你
- 一次搞定各种数据库SQL执行计划
- 一条MySQL报警的分析思路
- ARP中间人攻击——截获他人上网记录之实战演练
- MySQL 8.0 InnoDB无锁化设计的日志系统
- MySql主从复制,从原理到实践