科讯内容管理系统系 (KESIONCMS) 是一套ASP的开源系统。KESIONCMS X2.0版本存在后台上传文件漏洞,可利用网站后台低权限账号上传任意文件,直接获得WEBSHELL。

漏洞位于/admin/include/SaveBeyondfile.asp。

/admin/include/SaveBeyondfile.asp,第35行 ,取后缀名可被绕过。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if request("action")="save" then
call KS.CreateListFolder(wjj)
http=trim(request.Form("http"))
if http="" then
Response.Write"<script>alert('请输入远程" & ItemName &"地址!');</script>"
Response.End()
end if
ext=right(http,4)
fname=wjj&year(now)&month(now)&day(now)&hour(now)&second(now)&KS.MakeRandom(5)&ext
dim fname1:fname1=fname
if instr(fname1,".")=0 then
KS.AlertHintScript "对不起,远程文件不合法!"
end if
ext=lcase(split(fname1,".")(1))
if (ext<>"jpg" and ext<>"jpeg" and ext<>"gif" and ext<>"bmp" and ext<>"png") or instr(fname1,";")>0 then
%>
<script type="text/javascript">
alert('对不起,只能保存图片jpg|jpeg|gif|png的文件!');
top.box.close();
</script>
<%
response.end
end if
1
2
ext=right(http,4)
fname=wjj&year(now)&month(now)&day(now)&hour(now)&second(now)&KS.MakeRandom(5)&ext

远程URL后四位为重新构造文件后缀名,wjj为用户可控的输入。

1
ext=lcase(split(fname1,".")(1))

使用split重新获得生成路径的文件后缀名,可用以下输入绕过:wjj/UploadFiles/a.jpg.a/../../获得此时后缀名为jpg,绕过验证。

上传文件:

上传文件POC

文件写入成功:

文件写入成功

此漏洞比较好的利用方法为在站群的时候,如果获得权限不太高的后台账号,可GETSHELL。