安全红绿灯-SQL注入攻击

滴滴滴滴,发车了,系好安全带,带好安全帽

src=http___p1.itc.cn_q_70_images03_20210111_3dc1caa17bca40feb61ed1188b473988.jpeg&refer=http___p1.itc.jpeg

一:SQL前提知识点

 1)SQL语句,比如mysql中的`select name from t_user where id = $id`
 2)web程序一般具有3层结构;展示层,业务逻辑层,数据层(如下图)
复制代码

截屏2021-10-27 下午4.37.48.png

二:SQL注入攻击主要方式

 1)猜解后台数据库,提高权限
 2)绕过认证
复制代码

三:SQL注入攻击核心

(展示层)用户动态输入 + (逻辑层)传入参数没有审查 => SQL攻击
复制代码

四:绕过认证举例

一般我们查询用户个人信息的时候,我们会使用id进行查询,如下面的语句

select * from user where id = $id

select * from user where username = 'user' and password =' 111 '

这时我们如果将输入的id变成:id=1or1=1 或者使用字符串注解的方式,那么整个后端查询语句多久变成

select * from user where id= $id or 1=1

select * from user where username = $username -- and password = '111'

这个时候就算你没有正确的用户id,没有用户密码,你还是获取到了用户的个人信息,并且登陆用户账号

五:猜解后台数据库举例

比如我们有一段查询信息表个如下

select * from user where student_id = '4'

我们通过union拼接查询语句,获取数据库各种信息,比如数据库版本,数据库名称,查询所有库名称等等操作

select * from user where student_id = '4' union select 1,1,version(),1

select * from user where student_id = '4' union select 1,1,database(),1

通过这样不断的猜解,分析数据库信息,获取更多的用户数据和敏感内容

这个只是SQL最简单的攻击方式,并且真实的SQL注入攻击是比较复杂的,但是3种SQL注入式攻击的核心点,就是注入。比如我们猜解后台数据库中,就是通过不断的注入,获取各种信息(请求方式,编码语言,数据库名称,数据库编码方式等等),综合各种信息和不断的猜测,就获取了各种个人信息。

六:如何预防

代码层防止SQL注入攻击的最佳方案就是SQL预编译。使用预编译,而其后注入的参数将不会再进行SQL编译。也就是说其后注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数,参数中的or或者and 等就不是SQL语法保留字了。

严格检查传入参数类型,长度

严格控制数据库权限,处理SQL异常响应

おすすめ

転載: juejin.im/post/7032197280820264967
おすすめ