靶场地址:天狩CTF竞赛平台
来吧,开搞,进入靶场
题目提示:目录是怎么获取的?你知道Linux查看文件的命令有哪些吗?
ok,题目主要通过命令读取flag,而且页面提示使用了安全的过滤机制,先看看过滤了哪些
爆破一下
加一些字典,题目提示文件查看的命令,那么添加,cat,tac,less,more,head,tail,nl,<,>,{,},',$,空格,`,\,",先试试这些
嗯,都被过滤了,不要看长度不一样,不一样是因为测试的字符长度不同,上面的都是被过滤了
其中一个没有过滤,也就是双引号没有,那么我们可以用双引号绕过,比如ca""t等同于cat
那么试一下
忘记试一下flag,flag也过滤了,但是问题不大,可以用fl""ag绕过
但是忘记其中最重要的问题,空格被过滤,因为payload
payload:ca""t /fl""ag
是需要空格的,但是已知空格绕过的几种办法:
1、<>,进行绕过,但是<>被过滤了
2、${IFS},但是$和{,}被过滤了,也不行
3、{cat,flag},但是{}被过滤,不行
既然无法用空格,那就可以用其他的,比如tab,所以我们可以构造payload
payload:& strings /fla[g]
首先我要解释一下这个payload,
1、为什么要用&字符?
我们知道当我们输入/var/../fl""ag,会直接显示出flag这个文件夹,
这在Linux中不就是表示ls命令,所以我们需要绕过ls命令,所以使用管道符&即可,两边都会执行。
2、不是说空格过滤了吗,为什么还有空格?
payload中并不是空格,而是tab,在文本中,Tab通常显示为一个较宽的空白(类似多个空格),但它是一个单一字符。
所以可以使用多种payload:
payload:& ca""t /fl""ag
payload: & ta""c /fl""ag
那么最重要的问题来了,怎么打出这个tab呢,因为这是在浏览器中,不能直接使用tab键,那么我们可以在记事本或者编译器中使用,然后复制粘贴即可,如下所示
ok,flag出来了
总结一下:
这题主要的难点在于绕过:
1、首先需要绕过ls命令;
2、然后需要绕过空格,这里tab的使用很关键;
还有tab键用编码是绕不过的,比如使用%09是不行,需要使用tab键在文本输出然后复制即可。