命令执行小专题,里面有一些思考和知识点,学习并记录
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码中找到没有被过滤的字符,然后进行或运算,从而得到我们想要的字符。这就需要我们自己去写脚本编写了。
网上找了别人写的脚本,运行一下就行。
不过我的环境有点问题一直没成功。这里就先下一题。