zoukankan      html  css  js  c++  java
  • 【渗透测试】Squirrelmail远程代码执行漏洞+修复方案

    最近网上有点不太平,爆出各种漏洞,等下会把近期的漏洞复现一下,发出来。安全圈的前辈总是默默的奉献,在这里晚辈们只能站在巨人的肩膀上,跟紧前辈们的步伐,走下去。

    ---------------------------------------------------------------------------------------------------------

    一、实验环境

      操作机:kali2.0

      目标机:Centos 6.0

      Squirrelmail版本:1.4.22-4el6

    二、漏洞原理

      1、有一个可以登录的邮箱账号和密码

      2、Squirrelmai的MAT(因特网邮件传送代理)需要配置Sendmail

      3、Squirrelmail的edit_identity配置为true(默认配置)

     该漏洞的触发点位于Squirrelmail源码中的Deliver_SendMail.class.php文件中,在initStream函数中,使用了escapeshellcmd()来过滤用户的信息,然后将处理后的字符串传入popen函数(打开一个指向进程的管道)。

    $this->sendmail_command = "$sendmail_path $this->sendmail_args -f$envelopefrom";     
    $stream = popen(escapeshellcmd($this->sendmail_command), "w");

    但是由于escapeshellcmd()函数只对以下字符进行转义(在字符前面添加):

      &#;`|*?~<>^()[]{}$\, x0A 和 xFF 

    可以看到被转义的字符不多,且没有对空格进行转义。而且$envelopefrom的内容是可以被攻击者所控制的,所以就触发任意指令参数的注入。

    三、复现过程

    1、1、解压文件使用poc.sh验证漏洞是否存在

    2、根据脚本提示,输入用户名和密码 选择payload种类,设置IP和监听端口

    3、等待10秒左右,可以看到,目标服务已经成功的反弹了cmdshell

    4、接下来我们进入到Squirrelmail的源码目录下,留下一句话木马

    四、漏洞修复

      触发漏洞文件以及函数位置

    /usr/share/squirrelmail/class/deliver/

    initStream函数

    将此代码 用以下代码替换
     $this->sendmail_command = escapeshellcmd("$sendmail_path $this->sendmail_args -f").escapeshellarg($envelopefrom); 
  • 相关阅读:
    React 父调子 子调父 observer.js 非父子传值
    echarts 折线图
    跳转新页面解决用户重新登录的方法
    微信小程序规范 引入框架 引入外部js css
    js 400
    Angular2 表单校验
    Angular2 登录页进门户页 用户接口正常 从服务平台退出到门户页 登录接口报302
    CSP-S 2020 SC 迷惑行为大赏
    【题解】[CSP-S 2020] 函数调用【拓扑图DP】
    【题解】[CSP-S 2020] 动物园
  • 原文地址:https://www.cnblogs.com/sqyysec/p/6813987.html
Copyright © 2011-2022 走看看