手眼通天和大人。
--真锅和
引言:今天继续ctf之旅!!解决53关到64关
ps:今天是8.22,重新回归开始填坑,先发个废品
一、实验准备
1、ctf网址:ctf.show
2、工具:firefox浏览器、hackbar插件
二、实验过程
(一)、第53关 代码审计和空格绕过
简单代码审计后,发现过滤内容:
; cat flag 空格 0-9数字 * more wget less head sort tail sed cut tac awk strings od curl `(反引号)% x09 x26 < >
同时捋一捋代码逻辑:
1、首先,参数c接收$_GET()传递的值
2、其次,通过preg_match()函数进行过滤
3、最后,先输出参数c接收的值,并且通过system()函数执行接收的值,随后使用echo输出
看到这,很多方法都已经不能再用了,所以我们开始进行总结一下前24关的过滤技巧,看是否存在漏网之鱼。参考文章如下
CTFshow之RCE代码命令远程执行绕过思路阶段性总结-CSDN博客
简单思考后,tac、cat、nl等查看文件命令依旧存在,并且未过滤$,可以使用环境变量三剑客进行绕过:$IFS$9,${IFS},$IFS
payload:
?c=nl${IFS}fla?.php
(二)、第54关 代码审计
简单代码审计后,发现过滤内容为在上一关的基础上对文件操作命令和关键字flag全部加上了通配符*
有些一筹莫展,不过linux中还有一个命令grep。
格式:grep [options] pattern [input_file_names]
样式:grep "example" file.txt
表示在file.txt文件中搜索example关键词的值。同时我们的目的就是读取flag.php文件中含ctfshow的值,而flag.php被全部过滤,所以可以使用八个占位符?进行替代,空格则使用${IFS}替代
所以我们如此构造payload:
?c=grep${IFS}ctfshow${IFS}????????