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

访客5年前黑客资讯853

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]  黑客接单网

相关文章

SQL 注入有病,安全专家有何良方?

SQL 注入进犯现状 SQL 注入进犯是一个十分老的进犯办法,因为许多运用程序都存在 SQL 注入缝隙而且 SQL 注入办法与手法变化无常,虽然大型企业一般都花巨资购买多种安全维护体系,可是 SQL...

Web版勒索软件CTB-Locker PHP源码现身GitHub

勒索软件CTB-Locker呈现其Web演化版别,可感染网页站点。据剖析,其编码为选用PHP编写,现在源码已被保管至GitHub上。 Web版勒索软件CTB-Locker的初次呈现 就在本年西方情人节...

怎么打造“钢筋混凝土”型的网络环境

简化、优化你的补丁办理 许多进犯机制,都是针对未修补的体系。所以,不论你的网络是否对外开放,都应该定时更新操作体系和应用程序。尽管这个主张归于陈词滥调,但从另一个旁边面也说明晰该主张的重要性。 关于W...

你的网站是怎样被黑的

前语 这个标题的来历是@evilcos(余弦大大)在Github上共享的一个PPT,感兴趣的能够去他的repo下载。写这篇博客主要是想给自己最近业余时间学到的安全相关的常识做个总结,主要是关于网站常见...

根据机器学习的web反常检测

Web防火墙是信息安全的第一道防地。跟着网络技能的快速更新,新的黑客技能也层出不穷,为传统规矩防火墙带来了应战。传统web侵略检测技能经过保护规矩集对侵略拜访进行阻拦。一方面,硬规矩在灵敏的黑客面前,...

专业黑客接单一般多少钱 专业接单黑客联系方式

专业黑客接单一般多少钱 专业接单黑客联系方式

中国黑客联盟的安全工程师上周透露,中国黑客联盟产品的持续安全改进终于开始见效。 中国黑客联盟的安全工程师Matt Miller在以色列举行的BlueHat安全会议上的一次演讲中说,现在广泛和...