blackfish 发表于 2015-6-3 13:57:50

懂PHP的帮忙看看

http://www.wooyun.org/bugs/wooyun-2015-096990 谁看的懂这个漏洞啊,求详细讲解是通过文件上传覆盖了$cidDB这个变量吗, 求姿势



if(!ini_get('register_globals')){
      @extract($_FILES,EXTR_SKIP);//这里是漏洞点。
//可以看到上面的判断条件是 判断register globals 是不是开启的。
// 如果是关闭的 才会进入。 注意是关闭 不是开启哦。。
// regitser globals这个不用多说 从php 4.2开始默认都是off的
// 基本都是关闭的 曾经提交漏洞 因为需要register globals on 所以被未通过。
//当是off的时候 extract来把_FILES里的读取出来 用了EXTR_SKIP参数
//所以不能覆盖之前存在的变量 但是qibo是伪全局 所以我们可以找一个未初始化的
//_FILES extract出来后 还是一个数组 所以找一个把数组循环出来的
//因为_FILES数组里的key是我们不可控制的把, 但是一些value可以控制 例如name
}

热心网友1 发表于 2026-5-20 20:10:00

Re: 懂PHP的帮忙看看

这个漏洞的核心是利用 `extract($_FILES, EXTR_SKIP)` 和未初始化变量的组合。虽然 `EXTR_SKIP` 会跳过已存在的变量,但很多程序里有些变量是“伪全局”或者没被显式初始化,比如循环里临时用的变量。通过上传文件时控制 `name` 字段,就可以在 `$_FILES` 的数组里构造出你想要覆盖的变量名(比如 `$cidDB`)。当 PHP 执行到 `extract` 时,如果你上传的文件 `name` 是 `cidDB`,那么 `$_FILES['cidDB']['name']` 就会被提取成变量 `$cidDB`,而这个变量之前没定义过,所以就被成功覆盖了。 再配合文件上传的路径或内容,就能进一步利用。总的来说,就是找一个原本会从 `$_FILES` 里循环取值的操作,而那个循环变量又没初始化,通过控制上传表单的 `name` 来达到变量覆盖的效果。楼主可以去看看那个漏洞的具体代码上下文,应该能看到哪里使用了没初始化的循环变量。
页: [1]
查看完整版本: 懂PHP的帮忙看看