您的位置:网站首页 > php源码 > 正文

【举个栗子】简单聊聊PHP下的“截断”问题从利用方式到适用情况

类别:php源码 日期:2019-1-15 3:27:48 人气: 来源:

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

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

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

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

  只要比较发现文件名的strlen长度和语法分析出来的长度不一样,就说明内部存在截断的字符,因此输出了打开文件失败的信息。

  在1中,url中的%00(形如%xx),web server会把它当作十六进制处理,然后将该十六进制数据hex(00)“翻译”成统一的ascii码值“NUL(null)”,实现了截断。

  在2中,burpsuite用burp自带的十六进制编辑工具将”shell.php .jpg”(中间有空格)中的空格由20改成00,如果burp中有二进制编辑工具。

  在php中,所有的字符都是二进制的串,PHP本身并不认识任何编码,只是根据编码来显示内容。PHP中的chr()函数从指定的ASCII值返回字符。ASCII值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置0,而十六进制值被定义为带前置0x。

  而在php5.4之前,iconv()函数在转换编码的时候,遇到不的字符串的时候会将其截断。

  关于我们刚刚说的iconv()截断的问题,其实sitestar pro就是个典型例子,我们看个例子:

  跟进一下这个PIC_ALLOW_EXT参数,发现其在数据库中写死了,只允许gifjpgpngbmp这类文件。即如果文件名最后不是gifjpgpngbmp,则提示文件类型错误。

  这部分代码应该是进行文件保存的功能,这个有个核心函数_savelinkimg,跟进这个函数。秦勇老婆王芳

  本文由海南柴油发电机组 www.hnjqc.cn整理发布

关键词:php简单代码
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: