RCE漏洞简单总结

发布于:2024-05-08 ⋅ 阅读:(33) ⋅ 点赞:(0)

原因

用户端可以直接输入系统命令或者代码到服务器,进而控制服务器

条件

用户端参数可控

没有对用户输入过滤或者过滤不严

第三方组件存在RCE漏洞

干货 | 命令执行漏洞和代码执行漏洞详解 - 网络安全自修室 - 博客园 (cnblogs.com)

命令执行漏洞

调用操作系统命令进行执行

常见命令执行函数

  • PHP:exec、shell_exec、system、passthru、popen、proc_open等
  • ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
  • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

| #只执行|后面的语句
  || #如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
  & #&前面和后面命令都要执行,无论前面真假
  && #如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
  ; #前后都执行,无论前面真假,类似&

代码执行漏洞

代码执行漏洞是由于服务器对危险函数过滤不严导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞

  • 用户能够控制函数输入
  • 存在可执行代码的危险函数常见代码执行函数
    • PHP: eval、assert、preg_replace()、${}
    • Javascript: eval
    • Vbscript:Execute、Eval
    • Python: exec

绕过

1、常见分隔符

  • 换行符 %0a
  • 回车符 %0d
  • 连续指令 
  • 后台进程 &
  • 管道符 |
  • 逻辑 ||&&

2、空格

可以用以下字符代替空格

<
${<!-- -->IFS}
$IFS$9
%09
  • $IFS在linux下表示分隔符
  • 加一个{}固定了变量名- 同理在后面加个$可以起到截断的作用
  • $9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串

3、敏感字符绕过

(1)变量绕过
a=l,b=s;$a$b
(2)base64编码绕过
echo 'cat' | base64
`echo 'Y2F0Cg==' | base64 -d` test.txt
(3)未定义的初始化变量
cat$b /etc/passwd
(4)连接符
cat /etc/pass'w'd
(5)通配符

Bash标准通配符(也称为通配符模式)被各种命令行程序用于处理多个文件
可以通过man 7 glob 查看通配符帮助或者直接访问linux官网查询文档
ls命令我们可以通过以下语法代替执行

/???/?s --help