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); 
  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/sqyysec/p/6813987.html
Copyright © 2011-2022 走看看