0x1查看源代码

(1)代码关键点

 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 

preg_replace

0x2 宽字符注入

(1)前言

  在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等,还有一种情况是magic_quote_gpc,不过高版本的PHP将去除这个特性,宽字节注入与HTML页面编码是无关的。

(2)概念

  字符、字符集与字符序

   字符(character)是组成字符集(character set)的基本单位。对字符赋予一个数值(encoding)来确定这个字符在该字符集中的位置。

  UTF8

  由于ASCII表示的字符只有128个,因此网络世界的规范是使用UNICODE编码,但是用ASCII表示的字符使用UNICODE并不高效。因此出现了中间格式字符集,被称为通用转换格式。

  宽字节

  GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象。

(3)注意点

通常来说,一个gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。在php中,我们可以通过输出echo strlen("中");页面编码为gbk时输入2,utf-8时输入3;

(4)原理

  mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围)。我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \' 。

0x3 实战思路

(1)思路一:

  由于单引号被过滤了,所以我们使用%df吃掉
\, 具体的原因是urlencode(\') =
%5c%27,我们在%5c%27前面添加%df,形成%df%5c%27,而上面提到的mysql在GBK编码方式的时候会将两个字节当做一个汉字,此事%df%5c就是一个汉字,%27则作为一个单独的符号在外面,同时也就达到了我们的目的。

(2)思路二

  将 \' 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27的情况,后面的%5c会被前面的%5c给注释掉。这也是bypass的一种方法。

0x4 注入实操

0X01构造闭合

’加入 发现被注释掉了 我的天

百度教你绕过

 php会针对URL编码进行decode

decode后,url参数为 ?id= 0xD6 ‘ × AND × = ×

magic_quotes_gpc处理时会自动转义,即在‘前面加一个\

处理后url参数变成: ?id= 0xD6 0x5c ‘ × AND × = ×

可以看到,在‘前面PHP会自动加一个0x5c(注:0x5c为\),也就是会自动转义成\’

由于汉字是双字节的,所以0xD6 0x5c被转为謀这个汉字,’之前的\就这样消失了

最后的%23为#,在sql中#是注释,所以后面的’就没用了

最终sql中projectid = ’10謀’在sql执行的时候,由于projectid为int类型字段,mysql会自动intval()处理一下 详情见这里
?id=-%df%%%20union%20select%,database(),%

第二种思路

思路二没有试验成功

切 记 学习之路 少就是多 慢就是快

最新文章

  1. Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
  2. shell常见语法
  3. ARM机器码分析
  4. SQL注入语句 (很全)
  5. IIS部署FTP服务器步骤
  6. STL 源代码剖析 算法 stl_algo.h -- merge sort
  7. hdu 5092 Seam Carving
  8. Css3视频教程下载
  9. Linux安装MariaDB(Mysql)和简单配置
  10. ES6数组及数组方法
  11. [TJOI 2010]中位数
  12. 行政区划sql数据脚本
  13. 0006-20180422-自动化第七章-python基础学习笔记
  14. 在git服务器上创建项目过程及遇到的问题
  15. AngularJS中自定义有关一个表格的Directive
  16. Backbone hello world
  17. 网络管理命令ping和arping
  18. tensorboard遇到的坑
  19. webpack2.0学习
  20. Linux查看磁盘目录内存空间使用情况

热门文章

  1. qDebug的用法
  2. C++中的自定义内存管理
  3. PHP常见数组排序方法小结
  4. 优雅的用两种方式爬网络 txt 文件【雾
  5. python接口测试中—Requests模块的使用
  6. Listview.Finditem()函数用法
  7. selenium-java爬虫实现
  8. 清北学堂北京大学文宏宇神仙讲课day7
  9. 软件安装:树上分组DP/tarjan缩点/(也许基环树?)
  10. java作业利用递归解决问题