注入—全方位利用 之 宽字节注入

humbie   ·   发表于 2022-09-17 10:12:13   ·   学习杂记

对于SQL注入,一定要跳出引号才行。所以PHP有防御函数:
magic_quotes_gpc(魔术引号开关)。
开启的时候,他会把引号都转义了。
低版本修改配置文件强行执行。
高版本删掉了配置,通过使用特殊函数addslashes()执行。
绕过:(前两点其实常见)
1.不需要闭合的点那么就没事了
2.仔细查看作用域,找不受影响的地方。比如另一个地方就没被转义。
3.宽字节注入
多字符编码:多个字符在一起成为一个字。
GBK是双字节编码。(UTF-8是三字节编码。)
编码不同会有歧义。
反斜杠是单字节(ascii全是单字节),两个单字节组成一个双字节。
所以数据库使用GBK可能存在宽字节注入,传一个字符将反斜杠吃掉,成为汉字。
尝试=>判断是否有宽字节。
%df\可以凑成汉字,\是%5c,所以这俩就是%df%5c
(%9c%5c也可以,只要两个成汉字就可以,%df容易被拦截)
当传入%9c’是,单引号转义字符与%9c由GBK编码成汉字。这样就闭合了。
在写代码如果遇到其他字符串
1:则利用子查询(套娃)(select xxx=>’flag’)或函数(database()=>库名)代替字符串。
2:利用十六进制替代字符串:0x75736572=>’user’这样就不用引号了。
SQLmap跑宽字节,用?id=1%9c’帮助他闭合。(特殊闭合都需要帮助SQLmap闭合或者加高等级(不行就闭合同时加高))
对于POST宽字节,他不会编码URL的%9c所以需要抓包,这样就在需要改的地方(引号前面)前面几个字符
最好用一直编码的比如a是61,可以方便定位。然后把前面离最近的字符改为%9c这样就可以相当于添加了%9c了。
或者直接传一个汉字
因为网页是UTF-8三字节,所以对于GBK正好多一个与单引号的转义反斜杠一起变成四个字符的两个汉字。(有些汉字不一定行,需要多试几个,比如’聂’就可以)
(当(数据库)不是UTF-8的时候,不是英文编码,一般都有可能存在宽字节注入比如日文韩文)
一般前端页面是GBK的后端有可能也是GBK。

打赏我,让我更有动力~

0 条回复   |  直到 2022-9-17 | 485 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.