小工具知识网

当前位置: 首页 > 行业知识 > CTF(Web)中关于执行读取文件命令的相关知识与绕过技巧

行业知识

CTF(Web)中关于执行读取文件命令的相关知识与绕过技巧

2026-11-04 13:06:09 来源:互联网转载

 在我遇到的题目中,想要读取文件必然是要执行cat /flag这个命令,但是题目当然不会这么轻松。让你直接cat出来,必然会有各种各样的滤过条件,你要做的就是尝试各种方法在cat /flag的基础上进行各种操作构建出最终的payload。

下面我就总结一下一些比较常见的过滤的条件和绕过方式。

(其实过滤条件主要都是对字符的限制,再有就是对长度的限制。)

一.文件名被过滤

我按自己的想法分为两大类

关键词过滤

当过滤不是逐个字母比对时(也就是关键词过滤),我们依然可以使用cat这个命令来操作,因此我们主要是操作“flag”这个字符串,使其不用不用这四个字符也能表示flag这个文件。

因此我们就逐个尝试这几种绕过方法。

1.* 通配文件,在linux里f*可以指代任何以f开头的文件 f*就可以表示flag文件因此我们构建出的payload是 cat /f*,

2.?匹配文件名:可以用?代替滤过字符 f???,就代表任意一个f开头四个字符的文件,自然也可以代表flag,因此

payload是 cat /f???

3.正则匹配: 其实与上述类似,用一个范围代表字符 [9-q]可以匹配早ascll码在9到q之间的字符。

payload是 cat /[9-q][9-q][9-q][9-q]

4.分割文件名,在linux里在字母中间插上‘ “ \这样的字符不会影响,因此可以在其中插入构建payload

其实如果只是关键词过滤的话还挺好绕过的。当然关键词绕过方法,和下面逐个字母比对的绕过有一些方法是重合的,但明显如果只是简单的关键词绕过没有必要搞一些编码什么的。

字符过滤

这个就比较苛刻了,因为题目限制的任何字符都不能出现,比如一般将flag字符进行过滤的也直接把cat给ban了因为cat同样也含有a字符

小ban

ban的字符比较少,凑吧凑吧能构建出payload

1.  / 被过滤:在linux中echo ${PATH}可以输出文件路径在而${PATH:0:1}便取到了/字符,

因此echo ${PATH:0:1}便是代表 /,当然还有很多写法代表/,比如${PATH:4:1}.${PWD:0:1}.${SHELL:0:1}等可以酌情选择

2.空格被过滤同样也可以找代表字符的变量 比如$IFS ${IFS} 或者这样表示{cat,/flag}也可以,我还遇到过一个方法就是使用

上一篇:操作系统怎么关闭服务器?

下一篇:C++:Vector的模拟实现