什么?你发现了一个宝藏版主?爆肝近5000字关于SQL注入绕过的几种姿势

您所在的位置:网站首页 sql注入特殊字符过滤空格 什么?你发现了一个宝藏版主?爆肝近5000字关于SQL注入绕过的几种姿势

什么?你发现了一个宝藏版主?爆肝近5000字关于SQL注入绕过的几种姿势

2024-07-15 06:19| 来源: 网络整理| 查看: 265

免责声明:本文所介绍的内容仅做学习交流经验分享使用,严禁利用文中技术进行非法行为,未授权攻击属于违法行为!传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!

引子:SQL注入作为常年霸占OWASP TOP10的漏洞之一,其中的一个重要原因就是因为它的绕过技术,绕过WAF这项技术不仅在渗透测试中需要,在一般的CTF中,出题人也会变相增加一道如对空格进行过滤的一道CTF,这就需要我们的CTFer具备绕过能力,总而言之,利用开阔的思维进行绕过是必不可少的一种技术,在熟练掌握这项技术后我们可以编写自己的脚本,以求更加快速效率的测试。本文将由浅到深进行这项技术的讲解。本文的攻击思路可以混合使用,配合起来使用或许或许会有更好的效果 壹:对关键词进行过滤

在一些防护系统中会有针对性的进行对一些如“select 、from、or、schema、union”等一些增(insert)删(delete)改(update)这种看起来“不怀好意”的语句进行过滤。

1.1大小写绕过

大小写绕过顾名思义就是在语句中穿插大小写,以达到绕过的目的如:select——SeLeCT    or——Or  union——Union  from——FRoM 这种漏洞发生的大多数原因是数据库使用不区分大小写的方式来处理SQL关键字,所以可以使用大小写变种来绕过。

1.2穿插关键词进行绕过

如果我们换一种思维来想呢?如果union变成uniuinonon这种形式来让计算机进行识别,那么他们还能认出来吗?随着SQL策略的升级,少数情况下答案是否定的,但还是有些陈旧的防火墙存在这种绕过的方式,由于在一些SQL策略中没有进行递归过滤且刚好将关键词替换为了空,所以就只会过滤一层select,剩下的一层select命令则会被执行,听起来可能很离谱,但这的确是发生过的。

如:select——seselectlect

    Or——oorr

    Union——uunnionion

我们便可以通过上述的关键词进行绕过

1.3双重URL编码进行绕过

在一些失误的防护策略中,在对关键词进行双重编码后,即可绕过,因为在浏览器策略中会对双重URL编码的编码进行一次解码,随后在服务端进行第二次解码,从而进行语句的执行获取需要的数据。

如: select——se%25%36%63ect

补充:在这里我们不妨发散一下思维,如对URL进行双重编码……

1.4十六进制过滤

十六进制过滤在一些防护策略中,通过十六进制过滤我们便可以进行关键词的替换来绕过如select——selec\x74这里就把t给编码成了\x74、or——o\x72这里r则被替换成了\x72、or1=1%6f%72%20%31%3d%31这里则对整个语句进行了编码除了对上述的十六进制与url编码进行讲解外还存在ASCII,HEX,UNICODE等众多编码绕过读者可自行对关键词进行替换与测试这里不做过多演示。

1.5生僻函数绕过

在一些常见的报错注入中我们语句中的常见函数可能会被识别从而造成绕过失败,这里我们便可以通过一些生僻函数替换的方法进行绕过,如使用生僻的polygon函数还替代常用的updatexml()函数,从而达到绕过目的。下面是一些等价函数

  hex()、bin()==>ascii()

  sleep()==>benchmark()

  concat_ws()==>group_concat()

1.6绕过相等过滤

设想一下,我们在譬如MySQL,MsSQL,SQLite等一些数据库中进行一种“换而不全换”“变形而不变意”的绕过方式岂不是轻松多了?举个栗子( ̄▽ ̄)/,让我们重新定义一下,如果我们让计算机想对待英文单词一样,我们最终的目的是让它返回这个单词的发音,如果一致则证明程序可行,那我们是不是就可以从单词本身入手(⊙_⊙)?,从音标入手?如我们要发hug这个音,但是hug这个单词被过滤了,那怎么办呢?让我们试试输入他的音标/Hʌg/是不是一样能得到这个发音?当然可以!其中的ʌ被计算机识别后并自动发出了其所对的音,也就是说ʌ这个音标没有被过滤换而言之ʌ=u,我们边成功的发出了hug这个音,达到了我们的目的,虽然这是我们自己定义的,但返回结果达到了预期这种用相等字符替换过滤的方法,就叫做绕过相等过滤。接下来让我们看一下绕过相等过滤的实例,某猪头曾在blog上发过一篇大意为MySQL中存在一种名为utf8_unicode_ci的编码形式,其中A=Ä O=Ö U=Ü β=5 这样的形式都是成立的所以我们可以用上述方法进行等效替代。

 贰:对空格进行过滤  2.1注释符绕过

在SQL注入攻击中,注释符号可以用来绕过一些安全措施。具体用法如下:

我们在输入中插入注释符号,如“--”、“#”、“/* */”等,以屏蔽部分SQL代码,从而使得剩下的代码能够被执行。举个例子,如果在一个SQL语句中,过滤器只过滤了“SELECT”关键字,那么我们可以在输入中插入“-- SELECT”,这样注释掉“SELECT”关键字后,剩下的代码将被执行。另外,一些数据库系统还支持内联注释,即注释符号中的SQL代码会被执行。例如,在MySQL中,“/!/”中的代码会被执行。我们可以利用这个特性来执行一些特定的SQL代码,如使用“/!/ UNION SELECT ...”来绕过UNION、SELECT、WHERE等过滤器的限制。

 2.2空白字符绕过 使用制表符:某些数据库系统会将制表符(Tab)视为有效的SQL代码的一部分。我们可以利用这一点,通过在输入中使用制表符来绕过一些过滤器的限制。例如,在某些情况下,可以使用制表符来替换SQL语句中的空格,从而绕过过滤器对关键字的过滤。利用换行符:在一些数据库系统中,换行符被用来表示SQL语句的结束。我们可以利用这一点,通过在输入中插入换行符来将多条SQL语句注入到目标数据库中。例如,我们可以在输入中插入 “1; DROP TABLE students; SELECT * FROM students WHERE name='admin'”

这样的语句,其中表示一个换行符。执行这条语句后,将会删除名为students的表,然后查询名为admin的学生信息。

2.3特殊字符绕过 我们在进行绕过的时候是否可以进行特殊字符的绕过呢?答案是肯定的,我们可以使用一些类似于反引号、加号、百分号、减号亦或是emoji符号来进行绕过我们在输入中插入emojy符号,可能会使目标数据库或应用程序出现解析错误,从而绕过一些过滤器的限制。例1:类型转换修饰符N绕过:某些数据库支持在执行SQL语句时使用特定的类型转换修饰符,如MySQL中的“N”。攻击者可以利用这个修饰符来绕过一些限制,这里这个类型转换修饰符N用于将字符串转换为Unicode字符集。在SQL注入攻击中,攻击者可以利用这个修饰符来将一些特殊字符转换为Unicode字符,从而绕过输入验证和过滤再举个例子,假设应用程序对输入进行了过滤,以防止SQL注入攻击。攻击者可以尝试使用"%", "like", "chr", "mid"等关键字来构造SQL注入语句,但是这些关键字通常会被过滤掉。然而,如果使用类型转换修饰符N,可以将这些关键字转换为Unicode字符,从而绕过过滤。例如,"like"可以转换为"\u004C\u0069\u0065\u0063","chr"可以转换为"\u0043\u0068\u0072","mid"可以转换为"\u004D\u0069\u0064"例2:在使用MySQL数据库时,可以尝试使用“😊”等特殊字符作为注释符来绕过过滤器,从而执行一些未被过滤的恶意SQL代码。(注释符 emoji 换行具体可参考https://blog.csdn.net/weixin_57567655/article/details/124630632这位师傅的blog) 2.4比较符号绕过

在SQL中,比较符号用于比较两个值之间的关系。例如,比较两个数字的大小或检查两个字符串是否相等。常见的比较符号包括“=”、“”、“”、“=”例如,假设应用程序对用户输入进行了转义,但在比较符号中使用了一些转义字符。这时,我们可以尝试使用“”来构建一个条件语句。在某些情况下,这个符号可能被解析为有效的SQL代码,导致注入攻击成功。举个例子,我们可以构造如下的逻辑:

(user=‘admin’ AND password > ‘') OR (1=1 AND password


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3