您当前位置: 首页 » 敏感函数 » preg_match()

preg_match()

2017年4月23日 | 发表评论(0) 查看评论

这个是一个应用比较多的函数,很多应用程序忘记对preg_match(_all)的变量进行初始化,导致安全漏洞.

一、函数原型及使用说明

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

搜索subject与pattern给定的正则表达式的一个匹配.

二、函数风险及原理

如果传入preg_match的第一个或者第二个参数是一个数组或者资源类型的话,将会报错并返回false,这将导致如果使用第三个参数的话,该变量将不会被赋值,导致第三个参数的变量覆盖。

看下代码如下:

当传入http://www.am0s.com/test/config.php?ipmatches=13434343&a=1时

$ipmatches未被初始化导致覆盖。

三、审计实例

80vul曾经发布的Discuz!<5.50 preg_match()的变量$onlineipmatches未初始化漏洞

因为时间比较长了,没找到复现的程序,就拿5.50测试一下,这个版本已经修复了,简单改一下代码,添加@extract($_GET);

关键代码:

先使用getenv、$_SERVER获取IP地址,然后赋值给$onlineip

这里的getenv不支持IIS的isapi方式运行的PHP,所以须在IIS下测试,才能进入$onlineip = $_SERVER[‘REMOTE_ADDR’];

当我们提交http://www.am0s.com/dZ5.5/index.php?_SERVER[REMOTE_ADDR][]=1565&onlineipmatches[]=am0s时,

成功覆盖$onlineipmatches

 

分类:

敏感函数

| 标签:

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">