### 简要描述:
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
### 漏洞证明:
发信页面
[<img src="https://images.seebug.org/upload/201602/19130211acb0abb6ad5fd9e2937c215113a6b435.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/19130211acb0abb6ad5fd9e2937c215113a6b435.png)
数据包:
[<img src="https://images.seebug.org/upload/201602/191306148acd81feae3044af91823bcb468891bb.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/191306148acd81feae3044af91823bcb468891bb.png)
发送完成后,会切换到提示页面,而页面中的保存在本地功能,可以为我们提供较为接近的时间信息
[<img src="https://images.seebug.org/upload/201602/19130816b239fe570e163d83d7321d0209a46d14.png" alt="3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/19130816b239fe570e163d83d7321d0209a46d14.png)
然后我们看看上传到服务器后的文件名:
[<img src="https://images.seebug.org/upload/201602/19131028126ea5a387d9a22c5d8a6bab7d6c0532.png" alt="4.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/19131028126ea5a387d9a22c5d8a6bab7d6c0532.png)
然后根据以上信息,遍历已猜解文件名
[<img src="https://images.seebug.org/upload/201602/191316282647cc803a9a5c9be05dc73c09320c6c.png" alt="5.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/191316282647cc803a9a5c9be05dc73c09320c6c.png)
访问shell:
[<img src="https://images.seebug.org/upload/201602/1913135935f43ceb9eeb6a126630675dbd6f11df.png" alt="6.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201602/1913135935f43ceb9eeb6a126630675dbd6f11df.png)
暂无评论