您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 深信服应用层安全培训-Web渗透测试系列-X-文件上传
Web渗透测试系列_X_WebShell上传1.整体框架2.WebShell上传探测阶段3.WebShell上传利用阶段4.执行WebShell5.WebShell提权6.防御与逃逸7.常用工具8.总结培训提纲整体框架概述•WebShell上传主要包括探测和利用阶段,具体如下:–探测阶段:该阶段主要是搜集可测试点,以方便下一步的利用。–利用阶段:该阶段主要是利用探测的漏洞上传并执行WebShell。WebShell上传渗透测试框架WebShell上传探测阶段WebShell上传探测阶段•原理说明•收集过程原理说明•上传探测阶段没有什么原理,主要是搜集可探测点,常见的可测试点包括应用程序上传功能(诸如上传头像、附件上传等)、用户可控的输入点或者参数(页面POST表单部分、url参数、sql注入点等)、HTTP开启的方法(诸如WebDAV)等,收集可测试点的过程中,应尽量确保覆盖范围,不遗漏每一个可测试点,搜集过程推荐使用WVS工具spider功能。收集过程•利用WVS的spider工具收集可测试点,如下图:•spider发现了危险的上传目录(红框1处)、开启了WebDAV方法等漏洞,根据扫描结果方便接下来依据不同结果进行利用。另外有些可测试点WVS的spider是爬不出来,包括内敛sql注入点、不允许爬虫扫描的上传目录等,这些只能靠手工探测。WebShell上传利用阶段简介•直接上传WebShell•绕过客户端检测上传WebShell•绕过服务端文件扩展名检测上传WebShell•绕过服务端MIME类型检测上传WebShell•绕过文件内容检测上传WebShell•绕过服务端目录路径检测上传WebShell•利用服务器漏洞上传WebShell•利用sql注入上传WebShell•利用WebDAV上传WebShell•利用.htaccess文件上传WebShell直接上传WebShell•探测到上传点后,接下来进入上传WebShell步骤,假如服务器端对用户提交参数或者文件没有进行过滤或者过滤不当,则能够直接上传WebShell,那么接下来进入执行WebShell步骤即可。绕过客户端检测上传WebShell•客户端检测即通过用户请求返回页面部分的js脚本验证用户的输入,该检测在客户端检测,具有该检测方法的明显表现是在用户上传文件到服务器之前客户端js会进行检测,假如不符合检测要求会提示相应错误,接下来举例说明,并列举出相应的绕过方法。绕过客户端检测上传WebShell•服务器端含有检测js脚本的文件UPLOAD_CS_1.aspx代码如下图•上图红框1处是服务器端返回用户请求页面中用于检测客户端上传文件类型的js脚本,该客户端验证要求只能上传.txt和.docx两种类型,红框2处是使用onmouseover事件触发check_file函数。绕过客户端检测上传WebShell•输入:http://[IP]/UPLOAD_CS_1.aspx,同时上传1.jpg文件,页面返回如下图:绕过客户端检测上传WebShell•上图中鼠标刚放到“上传文件”按钮便弹出了一个警告对话框,由此易知这种情况是客户端js检验,查看返回页面的的源代码:•如上图可以确定此种情况是客户端js验证。绕过客户端检测上传WebShell•接下来使用代理工具绕过客户端验证,例如上传1.asp文件,先将文件名改为1.txt,代开burpsuite代理工具,点击“上传文件”按钮,burpsuite截获如下图:绕过客户端检测上传WebShell•把上图红框处1.txt改为1.asp,然后点击“forward”按钮,查看服务器端Files文件夹,如下图。•从上图可以得出结论利用代理工具成功绕过客户端验证绕过服务端文件扩展名检测上传WebShell•服务器端文件扩展名检测是指服务器端应用程序通过检测用户上传文件的后缀名从而做出允许或者阻止的一种方法,该方法包含黑名单和白名单两种形式,具体如下:–黑名单检测:一般是建立一个专门的blacklist文件,里面枚举常见的危险文件后缀。–白名单检测:一般是定义一个允许或者阻止用户上传文件类型的后缀的文件,里面枚举相应的文件后缀。绕过黑名单检测方法•文件名大小写绕过–用向AsP、Aspx之类的文件名绕过黑名单检测;•名单列表绕过–用黑名单里没有的名单进行攻击,iis默认执行.asp、.asa、.cer,有时候黑名单过滤不全没有过滤掉像后缀为asa、cer之类的,但这些文件可以像asp文件一样执行,此时可以使用这些后缀绕过黑名单。绕过黑名单检测方法•特殊文件名绕过–比如发送的HTTP包里把文件名改成test.asp.或test.asp_(下划线为空格),这两种命名方式在windows系统里是不被允许的,所以需要在代理工具burpsuite进行修改,然后绕过验证后,会被windows系统自动去掉后面的点和空格,但注意Unix/Linux系统没有此特性。•0x00截断–在许多语言的常用字符串处理函数中,0x00被认为是终止符,比如应用只允许上传jpg图片,那么可以构造文件名为2.asp%00.jpg,.jpg绕过了应用的上传文件类型判断,但对于服务器来说,此文件因为%00字符截断的关系,最终会以2.asp存入路径里。绕过白名单检测方法•0x00截断–基于白名单检查主要使用0x00截断绕过,同黑名单0x00截断绕过,接下来举例说明。•服务器端白名单检测文件为UPLOAD_CS.aspx.cs,部分代码如下图绕过白名单检测方法•上图红框处枚举了允许上传gif、GIF、swf、SWF后缀文件,该部分为该代码的白名单检测部分,同时该文件用白名单规定了不允许上传后缀文件,如下图•如上图可以看出使用了白名单规定了不允许上传后缀为asp、aspx以及dll的文件,接下来实验使用%00绕过验证,具体如下绕过白名单检测方法•输入:http://[IP]/UPLOAD_CS_2.aspx,如果直接上传2.asp文件,页面返回如下图•上图显示上传后缀为asp的文件失败,把上传文件名改为2.asp.%00.jpg,继续上传,页面返回如图绕过白名单检测方法•上图显示上传后缀为asp的文件失败,把上传文件名改为2.asp.%00.jpg,继续上传,页面返回如图•从上图可以得出结论成功上传2.asp%00.jpg文件,.jpg绕过了应用的白名单检测,但对于服务器来说,由于后台某些函数作用(诸如CreateTextFile()),此文件会被%00字符截断,最终会以2.asp存入路径里。绕过服务端MIME类型检测上传WebShell•有时候仅仅对文件名后缀进行判断并不能有效阻止恶意文件的上传(比如某服务器只允许上传jpg文件格式,不允许上传后缀为php等文件,但是把后缀为php改为后缀为jpg上传到服务器,某些情况下也能执行上传文件),因此对文件格式进行检测十分必要,也就是服务器端MIME类型检测。•服务器端MIME类型检测asp、aspx利用response对象的ContentType属性,php利用$_FILES[‘userfile’][‘type’]、jsp也使用response对象的ContentType属性(与asp类似)。绕过服务端MIME类型检测上传WebShell•接下来以aspx为例通过检测http包的content-type字段的值来判断上传文件是否合法,实验使用的服务器端文件为mime.aspx,部分代码如下图。•上图红框处使用POSTFile对象的ContentType属性,限定只允许上传application/zip类型。绕过服务端MIME类型检测上传WebShell•输入:http://[IP]/mime.aspx,上传文件2.asp文件,页面返回如下图。•上图返回错误页面,提示“不支持的mime文件”,接下来使用burpsuite拦截请求,如下图。绕过服务端MIME类型检测上传WebShell•修改图上图中红框处为application/zip,再次上传2.asp文件,查看files文件夹(该文件夹为上传文件默认目录),页面返回下图。•上图页面返回显示2.asp文件上传成功。绕过文件内容检测上传WebShell•文件内容检测即通过检测特定文件某些特殊标志位来判断是否是允许上传的文件,比如以后缀为jpg图片文件为例,该文件头有一组特殊二进制数标识FFD8FFE000104A464946(这些二进制数也叫文件幻数),那么就可以通过判断上传文件的文件头来验证文件的类型。•其实检测文件幻数只是检测的一项内容,还可以对文件相关信息、文件渲染加载后检测,面对这些检测,可以把一句话木马注入图片文件最后面,这样既实现了代码注入也不会破坏图片结构,具体步骤如下:–代码注入图片–引用创建的文件–使用客户端连接一句话木马代码注入图片•首先准备图片picture.jpg,然后把asp一句话木马(诸如%execute(request(“value”))%)插入图片最后,如下图所示•上图红框1出为标识jpg文件的幻数,红框2处为植入的一句话木马,把该图片上传到服务器端。引用创建的文件•同时创建一个引用包含一句话木马的图片的文件picture.asp,代码如下:–!--#includefile=picture.jpg--•把该文件上传到服务器端(这里之所以先上传jpg文件,再上传一个引用上传jpg的asp文件,主要目的是为了隐藏一句话木马的目的)。使用客户端连接一句话木马•客户端代码c1.html代码如下图:•其中Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作。使用客户端连接一句话木马•该代码主要是服务器端一句话木马s1.asp接收c1.html第一个textarea里的值生成一个newmm.asp大马文件,同时利用lP.writetextrequest(CMD)接收第二个textarea大马内容写入newmm.asp文件里,这样直接访问newmm.asp文件,即获得了WebShell。•使用浏览器打开客户端c1.html,如图下图所示使用客户端连接一句话木马•上图红框处为海洋2005木马,点击提交后,访问上传木马,如下图。•如上图可知上传WebShell成功。绕过服务端目录路径检测上传WebShell•服务器端目录路径检测即对用户提交目录路径参数进行检测,有时候检测不够严谨而导致可以用%00截断进行攻击,该漏洞的本质同黑名单检测%00截断本质一样,但该漏洞要求服务器端应用程序具有处理用户提交的目录路径参数函数,不具有通用性,这里仅介绍下原理。•以fckeditorphp=2.6.4任意文件上传漏洞为例,存在漏洞代码如下图绕过服务端目录路径检测上传WebShell•输入:/fckeditor264/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&CurrentFolder=fuck.php%00.gifHPPT/1.0•CurrentFolder这个变量的值会传到上图有漏洞代码ServerMapFolder($resourceType,$folderPath,$sCommand)中的形参$folderPath里,而$folderPath在这个函数中并没做任何检测,就传入CombinePaths()函数,同时变量CurrentFolder中%00后面的会被截断,实际上传的是fuck.php。利用过滤不完全上传WebShell•利用过滤不完全把一句木马写入服务器端是目前得到WebShell的最为主要的方法之一,该方法分为两步,具体如下:–上传一句话木马:常见的一句话木马分为asp一句话、aspx一句话、php一句话以及jsp一句话,它们工作原理大致类似,这里以asp一句话木马为例,代码为:%executerequest(value)%–使用客户端连接上传大马:客户端代码使用绕过文件内容检测上传
本文标题:深信服应用层安全培训-Web渗透测试系列-X-文件上传
链接地址:https://www.777doc.com/doc-6916345 .html