sqlzj

sqlzj

十一月 23, 2021

堆叠注入

在两个select注入语句之间用可用;隔开,

如果在php中用来mysqli_mulit_qurry()函数来执行sql注入语句的时候,可以使用堆叠注入,堆叠注入可以做到对数据库的改增删操作,

过滤绕过

在php中对单词的过滤,一般可以用双写,大写来绕过

![picture](D:\p\picture\屏幕截图 2021-10-29 204544.png)

在sql的25关对or和and进行了过滤,所以我们输入了or但显示我们的输入为空,

用双写

![picture](D:\p\picture\屏幕截图 2021-10-29 205014.png)

id=oorr

因为正则表达式匹配了or并把or过滤了oorr中or被过滤了就剩下了or说以可以用双写绕过

大写绕过

![picture](D:\p\picture\屏幕截图 2021-10-29 205601.png)

27题过滤了union所以我们输了union被过滤了

前提mysql语句是对大写不敏感的所以我们在写语句的时候就可以随意大写

因为正则表达式并没有完全匹配所以的大写组合,那我们一个一个试

尝试uniON

![picture](D:\p\picture\屏幕截图 2021-10-29 210052.png)

成功了

我认为短单词适合用双写,因为短字母的大写组合少比较好过滤,而且双写也比较好认,长单词相反,不过怎么绕过还是要看后端是怎么过滤的

如果后端的正则用了/m修饰符(换行匹配)那么双写绕过就会失效,换行匹配会把双写被匹配完的带空格的字符串也匹配,所以只能用双写,

![picture](D:\p\picture\屏幕截图 2021-10-29 211346.png)

在27关中–+也被过滤掉了sql语句就会剩下一个‘,这时就要用and ’1‘=’1来闭合

因为‘1’=‘1’是恒为真

![picture](D:\p\picture\屏幕截图 2021-10-29 212058.png)

在27题中空格也被过滤了,用%0a来绕过过滤

![picture](D:\p\picture\屏幕截图 2021-10-29 212437.png)

注释绕过

![picture](D:\p\picture\屏幕截图 2021-10-29 212834.png)

在32关中‘被/注释掉了,这时候就要加%df,或其他大与128的16进制数,在gbk编码中两个16进制数来表示一个中文字符,该方法叫宽字符注入

![picture](D:\p\picture\屏幕截图 2021-10-29 213336.png)

%df与%5c被认为是一个中文字符,而%27被剩下来被解释成了’

orderby注入

和联合注入没什么区别,就是写语句的方式变了

盲注可以用rand()在为真和为假时排列的顺序会不一样