深度聊聊PHP下的“切断”问题

访客5年前黑客资讯851

0×01 原因
学弟有天在群里说起上传的%00切断的一些问题,就想起之前自己在这个问题踩过坑,想起了自己从前的flag说要写文章,一向没写,现在来填坑了。
0×02 通过
源码了解:
//test.php    include"1.txt00.jpg";?>//1.txt
    echo'helloworld';
?>
上面的示例代码在 php版别小于5.3.4 的情况下回输出 helloworld 。从php的内核履行进程来看,PHP通过 php_execute_script 来履行PHP的脚本,这儿选取部分有关代码,详细能够看这儿:

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

从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 。

compile_file函数界说在/Zend/zend_language_scanner.l,截取部分相关代码。
简略总结一下上面部分代码的逻辑:
zend_compile_file函数首要调用open_file_for_scanning去读取文件,然后通过第17行的zendparse去进行语法和词法解析。而zendparse是通过lex_scan去扫描出token并进行语法分析。
第二部分:execute履行进程
zend_execute也是一个函数指针,其声明在/Zend/zend_execute.h中。
ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
在引擎初始化的时分,会将execute函数的地址赋值给zend_execute 。

而execute的界说在/Zend/zend_vm_execute.h

依据咱们的了解,zend_execute通过ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER函数来进行include的实践处理,即包括要包括的文件。

比照修正代码找到缝隙触发点:

摘出部分修正代码:

我看下存在缝隙的调试运转成果:

修正代码的Z_STRVAL_P(inc_filename) 即上图中的val,即”1.txt”,strlen获得长度为5,而Z_STRLEN_P(inc_filename) 即上图中的len即10。这儿实践上解析到的文件名是1.txt。
不存在缝隙的调试运转成果:
一旦呈现%00切断,include的文件名通过url转码由”1.txt%00.jpg”变为”1.txt00.jpg”,进入php语法词法分析器解析后会将这个字符串解析成一个字符串,并运用zend_scan_escape_string进行字符串转码,如图,进入zend_scan_escape_string的内容为:

只需比较发现文件名的strlen长度和语法分析出来的长度不一样,就阐明内部存在切断的字符,因而输出了翻开文件失利的信息。
使用 ***
划要点PHP版别低于5.3.4
%00切断有这么2种使用情况
1.在url中参加%00,如https://www.hack56.com/images/xsa5ifixf20.jpg
2.在burpsuite的16进制修改东西将”shell.php .jpg”(带空格的)中心的空格由20改成00
在1中,url中的%00(形如%xx),web server会把它当作十六进制处理,然后将该十六进制数据hex(00)“翻译”成一致的ascii码值“NUL(null)”,完成了切断。
在2中,burpsuite用burp自带的十六进制修改东西将”shell.php .jpg”(中心有空格)中的空格由20改成00,假如burp中有二进制修改东西。
延伸一下
其实关于切断相关问题,还有个很风趣的函数,iconv()函数:
在了解iconv()函数缝隙之前,或许需求一点前置常识,

[1] [2]  黑客接单网

相关文章

文件包括&奇技淫巧

前语 最近遇到一些文件包括的标题,在本篇文章记载两个trick。 环境布景 复现环境仍是很简略建立的: 例题1(php7) index.php dir.php 例题2(php5) index.php...

我的日志剖析之道:简略的Web日志剖析脚本

长话短说,作业的原因是这样的,因为作业原因需求剖析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,竟然没找到,看来只要自己着手锦衣玉食。 那么剖析办法我大致可分为三种:...

xHunt:针对科威特航运组织的攻击行动-黑客接单平台

2019年5月至6月,unit42安全团队在一起针对科威特航运业的进犯事情中,检测到了一个新后门东西——Hisoka,它的作用是下载几个的定制东西进行后缝隙运用,一切东西好像都由同一个开发人员创立,最...

flare-emu的分析功能被进一步拓展-黑客接单平台

IDAPython 库 flare-emu团队新开发的一个库,这个库是依赖于 IDA Pro 和 Unicorn 模仿结构,并为让逆向工程师可以经过脚本对代码的功用进行模仿,Unicorn 支撑 x8...

TrickBot新动态解析:近万行代码的Dropper和滥用ADS机制-黑客接单平台

TrickBot是自2019年以来影响规模最大的银行木马之一,经过几年的开展,现在的trickBot或许现已脱离了简略的“银行木马”的领域,它的模块化特点将歹意软件提高到了更高的水平。事实上,它能够被...

如何用虚拟钱银匿名注册域名

以比特币为首的P2P虚拟钱银推翻了人们对钱银的认知,也为网上生意供给了新的途径。近几年来,虚拟钱银付出以其去中心化、匿名性等特色深受欢迎,活泼在各个领域,涵盖了电商、慈悲安排、企业院校等合法组织,当然...