您好,欢迎访问三七文档
文件上传漏洞密级:商业机密绿盟科技罗伟luowei@nsfocus.com1漏洞概述3常见类型2成因分析目录4攻击方式概念•上传漏洞由于对上传文件未作过滤或过滤机制不严,导致恶意用户可以上传脚本文件,通过上传文件可达到控制网站权限的目的•危害攻击者可获得网站控制权限查看、修改、删除网站数据通过提权漏洞可获得主机权限•webshell一种网页后门,以asp、php、jsp等网页文件形式存在的一种命令执行环境一句话木马•概念通过向服务端提交一句简短代码,配合本地客户端实现webshell功能•示例%evalrequest(cmd)%eval函数用于执行客户端命令request()接收客户端提交的数据cmd为客户端提交命令的参数值•特性变形多,易隐藏、难发现1漏洞概述3常见类型2成因分析目录4攻击方式动网漏洞•漏洞文件\ads\upfile.asp•关键漏洞代码dimupload,file,formName,formPath,iCount,filename,fileExt//定义上传变量formPath=upload.form(filepath)ifright(formPath,1)“/”thenformPath=formPath&“/“//获取文件路径fileExt=lcase(right(file.filename,4))//最后四位转为小写iffileEXT“.gif”andfileEXT“.jpg”andfileEXT“.zip”andfileEXT“.rar”andfileEXT“.swf”then//扩展名判断filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt‘//文件名生成方式漏洞形成•变量formPath从上传表单中获取变量filepathformPath加时间随机数生成上传后文件名•16进制00经典的\00(□)截断服务端读取到00时,认为变量语句已结束动易漏洞•漏洞文件•\admin\Article\Upfile_Article.asp•关键漏洞代码dimupload,oFile,formName,SavePath,filename,fileExt//定义上传变量FoundErr=falseEnableUpload=false//初始化变量SavePath=SaveUpFilesPathifright(SavePath,1)“/”thenSavePath=SavePath&“/”//文件保存路径arrUpFileType=split(UpFileType,“|”)//读取定义扩展名fori=0toubound(arrUpFileType)iffileEXT=trim(arrUpFileType(i))thenEnableUpload=true//①判断扩展名并赋值(包含)关键漏洞代码•iffileEXT=asporfileEXT=asaorfileEXT=aspxthen•EnableUpload=false//②判断扩展名并赋值(特殊)•endif•ifEnableUpload=falsethen•msg=这种文件类型不允许上传!\n\n只允许上传这几种文件类型:&UpFileType•FoundErr=true//③设置FoundErr值•endif•ifFoundErrtruethen//④判断FoundErr值•randomize•ranNum=int(900*rnd)+100//定义随机数•filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&“.”&fileExt//文件名格式漏洞形成•上传方法使用无惧无组件上传类允许同时上传多个文件•变量传递上传第一个合法文件后EnableUpload=true,FoundErr=false扩展名不包含在合法范围内,保持EnableUpload不变上传的第二个文件扩展名可绕过”黑名单”限制(cer/cdx)•windows命名规则去除文件名最后的(空格)和.(小数点)1漏洞概述3常见类型2成因分析目录4攻击方式上传过程•常见文件上传检测无任何校验•可直接上传相应的脚本文件•定义了文件扩展名变量•未定义允许上传文件常量•文件命名包含扩展名变量Filename=year(date())&month(date())&day(date())&hour(time())&minute(time())&second(time())&.&fileext客户端javascript•通常为检测文件扩展名•未开始上传变弹出告警信息•源文件中可查看相关javascript检测代码•最容易被突破只对“普通”用户管用一切在客户端的校验都是伪校验控制上传参数•客户端抓取上传过程数据包•部分敏感上传参数在客户端可见•尝试修改部分参数值并提交修改参数是否影响上传结果•服务端变量的赋值为客户端传入文件未重命名•按本地文件名进行保存•文件保存路径固定•文件保存方式存在BUG•结合web应用解析漏洞mime类型获取•通过浏览器获取上传文件类型•非法文件上传过程与报错•篡改文件Content-Type属性黑名单检测•上传前的扩展名检测•扩展名定义•结合web应用解析漏洞%00路径截断•fckeditorphp=2.6.4任意文件上传漏洞•获取传入参数(connector.php)•GetCurrentFolder函数判断提交参数(io.php)•FileUpload函数处理文件上传(commands.php)•ServerMapFolder函数判断上传目录(io.php)文件内容检测•上传提示文件类型错误•文件上传函数:upload_file(includes\lib_main.php)•提示信息变量:$_LANG(languages\zh_cn\user.php)•正常图片中插入脚本代码copy1.gif/b+2.php/aphp.gif16进制编辑工具(UltraEdit、C32ASM)•结合本地包含漏洞解析漏洞—Apache•文件名解析顺序从后往前,直到识别出能解析的扩展名test.php.xx1.xx2.xx3——xx3xx2xx1php•mime.types定义了所有能解释的文件后缀•特殊扩展名(.rar)攻击•IIS6.0(win2003)文件名解析顺序从前往后多个脚本后缀(asp、asa、cer、cdx|aspx、ashx)解析过程中遇到;则出现截断test.asp;任意文件名(test.asp;1.jpg、test.asp;xxx)test.asp/任意文件名(test.asp/1.txt、test.asp/xxx)•IIS7.0/7.5(win2008、win2008R2)php以CGI模式运行(php-cgi漏洞)IIS7+PHP+FastCGI上传一张包含PHP代码的图片,就可以执行图片中的PHP代码任意文件名/任意文件名.php(test.jpg/x.php、xxx/test.php)解析漏洞—IIS解析漏洞—Nginx•合法扩展名文件中的php代码可被执行任意文件名/任意文件名.php(test.jpg/xx.php)任意文件名%00.php(test.jpg%00.php)•影响版本nginx0.5.*、nginx0.6.*nginx0.7=0.7.65、nginx0.8=0.8.37•攻击案例demo1漏洞概述3常见类型2成因分析目录4攻击方式chrome•审查元素(Inspector)功能获取各种元素加载时间、Javascript函数、Object等•上传中常见用法查看隐藏表单查看文件上传路径突破输入限制本地构造表单•绕过部分在客户端做的限制(如js)•常见步骤抓取文件上传页面URL(WSExplorer)查看源文件并保存到本地(html)修改文件中的js判断及action地址本地提交后通过查看源文件获取路径关于fiddler•http协议调试代理工具(C#)•中文乱码问题HKCU\Software\Microsoft\Fiddler2\HeaderEncodingGB18030/UTF-8•工作原理代理web服务器形式工作自动设置IE代理(8888端口)可解密https流量数据fiddler上传•常用功能:CaptureTraffic(F12)Inspectors(F8)Composer(F9)BreakpointsBeforeRequests(F11)AfterResponses(ALT+F11)ReplayCommentMark关于burpsuite•用于测试Web应用程序安全性的整合平台(Java)•套件主要包含Proxy:代理服务器,查看和修改浏览器和应用程序之间的通信Spider:蜘蛛爬虫,抓取web页面内容和功能Scanner:扫描程序,自动化检测多种类型的web漏洞Intruder:入侵者工具,web应用程序模糊测试,进行暴力猜解等Repeater:中继器,用于处理和重新发送单个请求burpsuite上传•常用功能InterceptHistoryRepeaterAddcommentHighlightClearhistoryCopyascurlcomandQ&A谢谢!
本文标题:文件上传漏洞
链接地址:https://www.777doc.com/doc-6324968 .html