SQL注入

目录

字符型、数字型sql注入

名称

方法

例子:sqli-Less3

1、判断注入类型及闭合方式

2、判断回显位

3、联合注入

查库:

​编辑查表:

查列:

查列内容:

报错注入

常用函数

例子:sqli-Less6

盲注

常用函数

布尔盲注

例子

时间盲注

例子

U-A、cookie注入

例子

宽字节注入

例子:

堆叠注入

例子

sqlmap


字符型、数字型sql注入

名称

schema_name   库名

table_name   表名

column_name   列名

information_schema.schemata  该表存有所有库名

information_schema.tables

information_schema.columns

table_schema=''  库

方法

1、判断注入类型及闭合方式

?id =1 and 1=2 

?id=1/

2、判断回显位

3、联合注入

例子:sqli-Less3

1、判断注入类型及闭合方式

http://localhost/sqli/Less-3/?id=1        正常

http://localhost/sqli/Less-3/?id=1''        正常

http://localhost/sqli/Less-3/?id=1''--=        正常

判断为字符型:

闭合方式:')

2、判断回显位

3、联合注入
查库
?id=1') and 1=2 union select 1,2,group_concat(schema_name) from information_schema.schemata--+
查表
?id=1') and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test'--+
查列
?id=1') and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

查列内容

报错注入

利用报错信息,结合函数规则进行数据读取的一种注入攻击

场景:没有回显点,但有报错信息时则可以使用报错注入

常用函数

updatexml() -- 更新xml文档函数

语法:updatexml(目标xml内容,xml文件路径,更新的内容)

extractvalue() -- XML文档进行查询的函数

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml路径是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

原理:

SQL报错注入的应用:当使用updatexml(xml_target, xpath_expr, new_xml)函数时,若xpath_expr参数不符合xpath格式,就会报错。

而~符号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在xpath_expr参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

例子:sqli-Less6

1、闭合方式:"

2、无回显位

3、注入

3.1

3.2

库、表、列、内容

?id=1" and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))--+

http://localhost/sqli/Less-6/?id=1%22%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27users%27),0x7e))--+

内容

盲注

所谓盲注就是在服务器没有错误回显的时候完成的注入攻击。

服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”

常用函数

length() 函数 返回字符串的长度

substr() 截取字符串

substr(str,m,n)   m 从第m个字符开始截取       n 截取后字符串长度为n

concat() 字符串拼接函数

ascii() 返回字符的ascii码   [将字符变为数字]

sleep() 将程序挂起一段时间nn

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句,如果错误执行第三个语句

布尔盲注

        页面有回显,但是不会显示具体的内容

        只会根据传参信息返回true和false

例子

Less-8

时间盲注

        传参任何东西返回结果都一样 

        页面返回值只有一种,true,无论输入任何值,返回情况都会按照正常的进行处理

        加入特定的时间函数,通过查看web页面返回的时间差来判断注入语句是否正确

例子

Less-9

U-A、cookie注入

例子

Less-18

我们先试一下User-Agent,在它的最后加一个单引号看看。

分析报错信息

关键信息:'127.0.0.1','admin')'

分析它的闭合方式是**('User-Agent','IP','Username')'

宽字节注入

原理:

常见的宽字节:GB2312,GBK,GB18030,BIG5等这些都是常见的宽字节,实际为2字节。

如果使用了类似于 set names gbk 这样的语句,既MySQL 在使用 GBK 编码的时候,mysql 数据库就会将 Ascii 大于等于128(%df)的字符当作是汉字字符的一部分(当作汉字处理),同时会认为两个字节为一个汉字,例如 %aa%5c 就是一个 汉字。

这种情况下如果我们想去掉sql语句中的一个字节,那么我们在想去的字节前加上一个Ascii 大于等于128(%df)的字节就行了。自己加的字节和想去掉的那个字节会被合起来解析成为汉字。

应用:

因为过滤方法主要就是在敏感字符前面添加 反斜杠 \,所以这里想办法干掉反斜杠即可。具体利用的话我们可以用%df 吃掉 \(%5c)

因为urlencode(\') = %5c%27,如果我们在 %5c%27前面添加 %df,形 成%df%5c%27,MySQL 在 GBK 编码方式的时候会将两个字节当做一个汉字,这个时候就把 %df%5c当做是一个汉字,%27(单引号)则作为一个单独的符号在外面,同时也就达到了我们的目的。

例子:

sqli-Less32

堆叠注入

SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

原理:使用前提:堆叠注入使用的条件很苛刻,会受到API以及数据库引擎,或者是权限的限制。只有当调用数据库的函数支持执行多条SQL语句的时候才可以使用。例如 mysqli_multi_query() 函数就支持多条SQL语句同时执行,而 mysqli_query() 函数就不支持。在实际应用中,大多数都使用的是 mysqli_query() 函数,所以能使用堆叠注入的说明该网站做的很不成功,因为堆叠注入的爆破效果太好了。一般PHP搭建的网站为了防止SQL注入都会使用 mysqli_query() 函数。

例子

sqli-Less 38

emails 表中插入 id=1001;email_id=haha 的数据

?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security';insert into emails(id,email_id) values(‘1001',‘hello') --+

sqlmap

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值