php 00截断,挖洞姿势 | 深度聊聊PHP下的“截断”问题

本文深入探讨了PHP中的00截断问题,包括起因、内核执行过程分析、漏洞触发点以及两种利用状况。通过示例代码解释了在PHP版本低于5.3.4时,如何利用%00截断进行文件包含攻击。此外,还介绍了iconv函数在转换编码时可能导致的截断问题,并提供了一个实际案例。文章总结了截断问题可能适用的情景,如include、file_get_contents等。
摘要由CSDN通过智能技术生成

*本文原创作者:Sukaralin,本文属FreeBuf原创奖励计划,未经许可禁止转载

0x01 起因

学弟有天在群里说起上传的%00截断的一些问题,就想起之前自己在这个问题踩过坑,想起了自己曾经的flag说要写文章,一直没写,现在来填坑了。

0x02 经过

源码理解://test.php<?php    include"1.txt\000.jpg";?>

//1.txt<?phpecho 'helloworld';?>

上面的示例代码在 php版本小于5.3.4 的情况下回输出 helloworld 。从php的内核执行过程来看,PHP通过 php_execute_script 来执行PHP的脚本,这里选取部分有关代码,具体可以看这里:

fe80a030b91c60f0207098705d015691.png

在 第10行我们看到,他调用zend_execute_scripts来针对脚本进行解析,而这个函数是在Zend/zend.c里面,截取部分相关代码如下:

b84adc6ac98c2c4942f107d98daadd52.png

从PHP内核开来实际上是分为两块部分,一个是compile编译过程 ,另一个是execute执行过程。

第一部分:compile编译过程

我们可以看到这里的代码逻辑通过zend_compile_file获取文件的内容,zend_compile_file是一个函数指针,其声明在/Zend/zend_compile.c中ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);

在引擎初始化的时候,会将compile_file函数的地址赋值给zend_compile_file 。

9775b99bb94cd9c87ffb5fbd285cc094.png

简单总结一下上面部分代码的逻辑:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值