SQL注入(三)#sql注入 bugku
宽字节注入
原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个 汉字(前一个 ascii码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思 路是将 ‘ 转换为 \’ (转换的函数或者思路会在每一关遇到的时候介绍)。 因此我们在此想办法将 ‘ 前面添加的 \ 除掉,一般有两种思路: 1、%df 吃掉 \ 具体的原因是 urlencode(‘) =%5c%27,我们在%5c%27 前面添加%df,形 成%df%5c%27,而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,此 事%df%5c 就是一个汉字,%27 则作为一个单独的符号在外面,同时也就达到了我们的目的。 2、将 \’ 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 的情况,后面的%5c 会被前面的%5c 给注释掉。这也是 bypass的一种方法。
sql注入 bugku
- 打开网页
- 查看源代码,考虑是宽字节注入
- Id=1和id=1’结果一致,猜测可能是宽字节注入,’号被转义所致。
- 测试id=1%df’报错确认为宽字节注入。
- 构造语句,爆出数据库
1%df' union select 1,database()%23
- 构造语句得出flag
1%df' union select 1,string from sql5.key%23