当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0176982

漏洞标题:jact大汉网上互动管理平台 前台getshell

相关厂商:南京大汉网络有限公司

漏洞作者: 铁爪小飞龙

提交时间:2016-02-19 14:45

修复时间:2016-02-19 15:28

公开时间:2016-02-19 15:28

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-02-19: 细节已通知厂商并且等待厂商处理中
2016-02-19: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

jact系统为南京大汉网络有限公司开发的一套面向政府机关的网上互动管理平台。该平台在政府部门得到广泛的应用

详细说明:

jact系统为南京大汉网络有限公司开发的一套面向政府机关的网上互动管理平台。该平台在政府部门得到广泛的应用
jact前台写信功能,任意文件上传导致getshell
漏洞URL:
http://www.anxiang.gov.cn/jact/front/front_mailwrite.action
在上传附件部分,存在任意文件上传
该功能,仅在前端做了文件名校验

function isattach(file,ImageFileExtend,isAlert){
//if(ImageFileExtend==null || ImageFileExtend.length<2)//未设置类型,验证常见类型
//ImageFileExtend = ".doc,.txt,.rar,.jpg,.gif,.bmp,.xls";
var alertMsg = ImageFileExtend;
ImageFileExtend = (","+ImageFileExtend+",").replace(/,/g, "|");
if(file.value.length>0){
var fileExtend=file.value.substring(file.value.lastIndexOf('.')).toLowerCase();
if(ImageFileExtend.indexOf("|"+fileExtend+"|") != -1){
return true;
}else{
if(isAlert){
alert("附件格式错误,请上传" + alertMsg + "格式的附件");
}
return false;
}
}
return true;
}


前端校验可以轻松绕过
下面来看服务端代码

public String processFiles()
{
try
{
try
{
if ((this.filesCheck != null) &&
(this.filesCheck.length() > 1))
{
for (File file : this.files) {
if (file != null)
{
if (file.length() > Config.getSysConfig()
.getAttachsize().intValue() * 1024 * 1024) {
throw new ComplatException("请上传" +
Config.getSysConfig().getAttachsize() +
" M以内的附件");
}
}
}
this.filesCheck += ",";
}
} catch (ComplatException e) {
showHtml(
"<script language=\"javascript\">alert('" +
e.getMessage() + "');history.back();" +
"</script>");
。。。。。

for (String fileName : this.fileNames) {
if (arrtmark.equals(fileName)) {
String filePath = null;
String name = null;
if ((this.filesCheck != null) &&
(this.filesCheck.indexOf("," + m + ",") != -1)) {
Random random = new Random();
name = this.filesFileName[n];
filePath = "/main/jact/commonuser/transact/temp/" +
DateFormat.getStrCurrentDate("yyyyMMddHHmmss") + (
999 - random.nextInt(899)) + (
(name != null) && (name.lastIndexOf(".") != -1) ?
name.substring(name.lastIndexOf(".")) : "");
File f = new File(BaseInfo.getAppPath() + filePath);
FileUtil.copyFile(this.files[n], f, false);
n++;
。。。。。
return "success";
}


由以上代码可以得到
1、未校验后缀名
2、重命名规则为yyyyMMddHHmmss+(100-999之间的随机数)
所以导致一下两个问题:
1.任意文件上传
2.重命名后的文件名可以猜解
由此可知,此处可getshell

漏洞证明:

发信页面

1.png


数据包:

2.png


发送完成后,会切换到提示页面,而页面中的保存在本地功能,可以为我们提供较为接近的时间信息

3.png


然后我们看看上传到服务器后的文件名:

4.png


然后根据以上信息,遍历已猜解文件名

5.png


访问shell:

6.png

修复方案:

服务端校验文件后缀名
重命名规则应该更随机化

版权声明:转载请注明来源 铁爪小飞龙@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2016-02-19 15:28

厂商回复:

此问题800年前就解决了
另,安乡不是我们的客户

最新状态:

暂无


漏洞评价:

评价