
一开始就看到了源码,萌新表示大致看得懂什么意思,大致分析下:
第四行@$ c.=$ _POST[‘c’]; //@为屏蔽错误不显示在浏览器界面,$ _POST[‘c’]是以post的方式获取字符串类型的变量c,".="表示变量c会与之前变量中的<?php exit;?>进行字符串连接。很显然题目需要我们以post的方式提交变量c使<?php exit;?>失效。
@$filename = $_POST[‘file’];同理我们以post方式提交一个字符串的变量file,赋值给filename。
后面if判断,如果我们没有以post提交filename,就会运行空的tmp.php,否则就会把c的内容写入filename文件中并运行。
后来百度了一下,好像涉及php的filter协议,看了一下大佬的博客(https://www.leavesongs.com/PENETRATION/php-filter-magic.html),似懂非懂,

原理:
通过上传字符串变量c,通过<?php exit;?>与变量c连接破坏掉语句结构;同时变量c也需要写入到变量filename这个文件中通过执行获得flag。
在包含HTML、PHP语言的的网页中,通常会在进行解析XML将PHP的<??>语法当作为XML,而导致解析错误。为了防止这样的错误产生,php引入了php://filter协议流,通过该协议流可以将php的代码经过base64再编码一遍来避免此类冲突的产生。
可以巧妙运用base64解码的过程,将需要执行的php代码使用base64上传,再利用php:filter协议流进行base64解码执行。
base64解码过程会将

最低0.47元/天 解锁文章
1050

被折叠的 条评论
为什么被折叠?



