ctfshow40-55 命令执行

命令执行小专题,里面有一些思考和知识点,学习并记录

web40

开幕雷击,过滤了好多东西,从40题开始就感觉变难了很多

但是总有漏洞在,发现没有过滤掉(),但是  ’   “ 啥的都被过滤了

所以其实涉及到无参数rce的知识点。下面是学习结果

学习结果

打印目录

print_r(scandir())  查看当前目录下的所有文件名

current()  数返回数组中的当前元素(单元),默认取第一个值可以代替pos();

localeconv()  函数返回一包含本地数字及货币格式信息的数组(其实结果就是  .  是为了上面查看当前目录的)

?c=print_r(scandir(current(localeconv())));

也可以用getcwd()  返回当前工作目录(代替pos(localeconv());)

?c=print_r(scandir(getcwd()));

输出结果

先给出构造的pyload,再来解释

?c=show_source(next(array_reverse(scandir(getcwd()))));

scandir(getcwd())解释过了

array_reverse()顾名思义,数组倒置。

next()  将数组中的内部指针向前移动一位(这里倒置之后移动就正好是flag.php的位置)

show_source() 展示源码

当然,本着学习的态度,这道题会给出不同的解法。

还是先给出pyload

?c=eval(array_pop(next(get_defined_vars())));

get_defined_vars() 返回一个包含所有已定义变量的多维数组,变量包括一些GET,POST,FLIE等

next()跳过

array_pop() 函数删除数组中的最后一个元素并返回其值。可以用end()代替,作用就是指针转到最后一位并输出

看到这里,其实还不是很清楚,为什么是最后一位?

因为get_defined_vars() 会让get,post获取的值放在最后(自己测试的时候post成功了,get没成功)

那么既然是自己传自己构造,为什么不用上eval函数呢,然后再构造post。

web41

题目把数字和字母都ban了,这还能绕过?!

看了看别的师傅的wp,发现没有绕过 | 也就是或运算,那么只需要再256个acsii码中找到没有被过滤的字符,然后进行或运算,从而得到我们想要的字符。这就需要我们自己去写脚本编写了。

网上找了别人写的脚本,运行一下就行。

不过我的环境有点问题一直没成功。这里就先下一题。

web42

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值