第九天 看书笔记之原理剖析--SQL注入

一、sql注入

1、sql注入:就是对用户输入的数据没有判断其合法性,参数就带入到数据库中进行查询,这样攻击者就可以构造不同的sql语句来对数据库任意操作。

2、SQL注入的原理,SQL漏洞的产生要满足两个条件↓:
——传给后端的参数内容是用户可以控制的
——传入的参数拼接到SQL语句,带入数据库查询

比如传入的参数是1’
数据库执行的代码是:select * from users where id=1’
这不符合数据库语法,会报错!

当传入and 1=1,就执行select * 、from where id=1 and 1=1
两者都为真,就会返回id=1相同的结果

当传入and 1=2,就执行select * from where id=1 and 1=2
由于1=2不成立,返回假,就会返回和id=1不同的结果

这样就可以初步判断id参数存在SQL注入漏洞!!这样就可以进一步拼接其他SQL语句进行攻击了!

3、了解一下mysql中的相关知识↓
从mysql 5.0之后就存在着一个information_schema的数据库

这里需要记住三个表名:schemata(库名–对应的字段名是schema_name)、tables(库名、表名–对应的字段名是table_schema、table_name)、columns(列名–对应的字段名是column_name)

要知道select查询语句的用法和limit m,n的用法(m是开始的位置,从0开始,表示第一条记录,n是n条记录

还要知道一些函数,如:database(),user(),version()等

mysql的注释符

4、union注入攻击数据可以输出到页面上

—首先先在url末尾加单引号看看,如果返回错误结果,再试试id=1 and 1=1,id=1 and 1=2,根据上面说的现象来判定有没有sql漏洞。

—接着,要确定字段数,即用order by 1-99语句来查询字段数,当查到某个数有着不同的结果时,那字段数就是这个数的上一位。

—在上面那条假设字段数确认时3,则union语句写成:union select 1,2,3
而且可以把id值写成:id=-1 union select 1,2,3(这是为了让服务端返回union语句的结果,得让前面一个语句报错)

—然后可以在1,2,3的位置上输入sql语句,这在之前都讲过了。

5、Boolean注入攻击

—首先根据分别在url末尾加单引号和and 1=1、and 1=2,会发现结果返回的只是yes和no(大概是这样,反正就是正确与否),而没有返回数据库中的数据,则判断此处不能用union注入,可以尝试用boolean注入,根据返回的结果来推测哪些SQL判断条件是成立的。

—然后开始判断数据库名的长度↓
’ and length(database())=1 --+(1处是自己决定的任意数字),这里可用burp来爆

—当长度知道后,就开始逐字符判断来获取数据库名↓
’ and substr(database(),1,1)=‘s’ --+

substr是截取,截取database()的值,从第一个字符开始,每次返回一个

当然也可以用ASCII码来查询↓
’ and ord(substr(database(),1,1)) = 115 --+

在这里插入图片描述

6、报错注入

当错误信息直接输出到页面上,可用利用报错注入来获取数据。这里用updatexml()
’ and updatexml(1,concat(0x7e,(select user()),0x7e),1) --+

0x7e是~

’ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1) --+

。。。获取表名列名数据和之前的都是一样的,插进去就行

7、时间注入攻击

时间盲注多与if(expr1,expr2,expr3)结合使用↓
’ and if(length(database())=2,sleep(5),1) --+
如果数据库名长度等于2,就休眠5秒,否则查询1

然后根据页面响应时间的长短来判断条件是否成立

8、宽字节注入

就是 %df’ 之前的sql注入讲过了,这里就不赘述

9、cookie注入

通过burp抓包修改cookie值,插入SQL语句来获取数据

10、base64注入

就是id参数要经过base64编码,其获取的步骤和union注入一样

11、XFF注入攻击

通过抓包修改X-Forwarded-for的值,这是可以伪造客户端IP,先设置成127.0.0.1,然后老套路,试试127.0.0.1’ 、127.0.0.1’ and 1=1# 、127.0.0.1’ and 1=2# 看这三个的返回结果来判断是否存在SQL漏洞。

接着使用order by 确定字段数,再尝试使用union注入–> X-Forwarded-for: 127.0.0.1’ union select 1,2,3,4 #

12、SQL注入绕过技术

—大小写绕过
—双写绕过
—编码绕过
—内联注释绕过 -->
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值