昨晚折腾了一晚上,把大致的一些东西整理了下,为团队纳新选了几首音乐素材..然后团队的一个表弟来问我宽字节注入的事情了...然后就就才抽空写了一点作为上一篇mysql注入的补充。
本来昨天参加t00ls的线下沙龙,有几个新姿势要分享的,结果忙活了一晚上..不知道在干嘛。没写完,明天分享吧。如果来得及...
排除看不懂代码和传送门,阅读这篇文章需要:4分钟
这里$username 是可控的,有输入的地方就是有危险的。因为有输入的地方用户是可控的。一定要过滤,一定要过滤,一定要过滤!
所谓的登陆框注入,以及万能密码,就是这个原理。用注释符注释掉后面验证password的语句。
加完addslushes函数就是这样,登录失败
使用addslashes来防御(addslashes函数会把' " %00 \ 这些字符前面加上一个\来转义他们)
设置数据库字符为gbk导致宽字节注入
这样是失败的
因为post方法是不会对url编码进行还原的。但是由于我们接收参数的是用$_request方法。
所以,我们可以这样~~
用get请求提交~
这样url编码就会被解码,然后%df和%5c被还原成宽字节,運。
宽字节的问题我就不多说了,这边再提了一下是因为团队的一个表弟问的…
传送门:
要补充的是,錦”这个字,它的utf-8编码是0xe98ca6,它的gbk编码是0xe55c。当我们的錦被iconv从utf-8转换成gbk后,变成了%e5%5c,而后面的’被addslashes变成了%5c%27,这样组合起来就是%e5%5c%5c%27,两个%5c就是\\,正好把反斜杠转义了,导致’逃逸出单引号,产生注入。
关于绕过:
一:字符编码问题导致绕过
· 2.1、设置数据库字符为gbk导致宽字节注入
· 2.2、使用icon,mb_convert_encoding转换字符编码函数导致宽字节注入
二:编码解码导致的绕过
· 3.1、url解码导致绕过addslashes
· 3.2、base64解码导致绕过addslashes
· 3.3、json编码导致绕过addslashes
三:一些特殊情况导致的绕过
· 4.1、没有使用引号保护字符串,直接无视addslashes
· 4.2、使用了stripslashes
· 4.3、字符替换导致的绕过addslashes
不一一列出来了,后面安全和开发是一个样子的….