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

访客5年前黑客资讯891

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

相关文章

如何逃逸Sysmon工具对DNS的监控-黑客接单平台

Sysmon是微软的一款轻量级的体系监控东西,最开端是由Sysinternals开发的,后来Sysinternals被微软收买,现在归于Sysinternals系列东西。它通过体系服务和驱动程序完成记...

LimeRAT在野外传达

几天前,Cybaze-Yoroi ZLab安全团队遇到了一类风趣的感染链,它运用多种杂乱技能,能够绕过传统安全防御机制并躲藏其payload,对方针用户形成严重威胁。 整个感染链始于一个LNK文件,运...

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

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

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

安全防备:nginx下git引发的隐私走漏问题

1   安全事情 最近阿里云服务器后台办理体系中收到一条安全提示音讯,体系装备信息走漏: http://my.domain.com/.git/config 能够被公网无认证即可拜访,请修正。...

短网址安全浅谈

何谓短网址(Short URL)?望文生义,便是形式上比较短的网址,当时首要是凭借短网址来替代原先冗长的网址,便利传输和共享。短网址服务也便是将长网址转化为短网址的服务,这种服务在便利了广阔网民的一起...

RFI绕过URL包含限制Getshell-黑客接单平台

为什么有今日这篇文章?原因是我在阅读Twitter时,发现关于长途文件包括RFI的一个奇淫技巧!值得记载一下,思路也很别致!由于它打破我之前认为RFI已死的观念:) 正文 RFI引出 咱们知道php最...