国际购物网站排名,郑州网站建设网页设计,微信抽奖小程序,济宁市建设银行网站现在位置#xff1a; 首页 文章 Web安全 正文 我的WafBypass之道#xff08;upload篇#xff09; 2016 /11/30 15:204,901沙发0x00 前言 玩waf当然也要讲究循序渐进#xff0c;姊妹篇就写文件上传好了#xff0c;感觉也就SQLi和Xss的WafBypass最体现发散性…现在位置 首页 文章 Web安全 正文 我的WafBypass之道upload篇 2016 /11/30 15:20 4,901 沙发 0x00 前言 玩waf当然也要讲究循序渐进姊妹篇就写文件上传好了感觉也就SQLi和Xss的WafBypass最体现发散性思维的而文件上传、免杀、权限提升这几点的Bypass更需要的是实战的经验。本文内容为沉淀下来的总结以及一些经典案例。想到哪写到哪所以可能不是很全。创造姿势不易且行且珍惜。案例图不好上毕竟是upload的Bypass就直接上姿势 阅读此文你会发现新老姿势都有因为我是想系统的写一写文件上无非就是结合各种特性或waf缺陷。辍写时想过一个问题如何归拢哪些属于文件上传Bypass的范畴打个比方 上传正常.jpg的图片 #成功上传正常.php #拦截绕过.php文件的filename后进行上传 #成功使用绕过了filename的姿势上传恶意.php #拦截 以上这么个逻辑通常来讲是waf检测到了正文的恶意内容。再继续写的话就属于免杀的范畴了过于模糊并且跑题了并不是真正意义上的文件上传Bypass那是写不完的。 0x01 搞起 上传文件歪脖骚时waf会检查哪里 请求的urlBoundary边界MIME类型文件扩展名文件内容 常见扩展名黑名单 asp|asa|cer|cdx|aspx|ashx|ascx|asaxphp|php2|php3|php4|php5|asis|htaccesshtm|html|shtml|pwml|phtml|phtm|js|jspvbs|asis|sh|reg|cgi|exe|dll|com|bat|pl|cfc|cfm|ini 个人写的“稍微”全一点实际上waf的黑名单就不一定这么全了。测试时的准备工作 什么语言什么容器什么系统都什么版本上传文件都可以上传什么格式的文件还是允许上传任意类型上传的文件会不会被重命名或者二次渲染 0x02 容器特性 有些很老的特性其实也是最开始绕waf的基础这里就一笔带过了。 Apache1.X 2.X解析漏洞Apache在以上版本中解析文件名的方式是从后向前识别扩展名直到遇见Apache可识别的扩展名为止。Win2k3 APACHE2.0.59 PHP IIS6.0两个解析缺陷 目录名包含.asp、.asa、.cer的话则该目录下的所有文件都将按照asp解析。例如 文件名中如果包含.asp;、.asa;、.cer;则优先使用asp解析。例如 有一点需要注意如果程序会将上传的图片进行重命名的话就gg了。Nginx解析漏洞 Nginx 0.5.*Nginx 0.6.*Nginx 0.7 0.7.65Nginx 0.8 0.8.37以上Nginx容器的版本下上传一个在waf白名单之内扩展名的文件shell.jpg然后以shell.jpg.php进行请求。 Nginx 0.8.41 – 1.5.6以上Nginx容器的版本下上传一个在waf白名单之内扩展名的文件shell.jpg然后以shell.jpg%20.php进行请求。 PHP CGI解析漏洞 IIS 7.0/7.5Nginx 0.8.3 以上的容器版本中默认php配置文件cgi.fix_pathinfo1时上传一个存在于白名单的扩展名文件shell.jpg在请求时以shell.jpg/shell.php请求会将shell.jpg以php来解析。多个Content-Disposition 在IIS的环境下上传文件时如果存在多个Content-Disposition的话IIS会取第一个Content-Disposition中的值作为接收参数而如果waf只是取最后一个的话便会被绕过。Win2k8 IIS7.0 PHP 请求正文格式问题 Content-Disposition: form-data; namefile1; filenameshell.aspContent-Type: application/octet-stream 正常的upload请求都是以上这样然而这个格式也并非强制性的在IIS6.0下如果我们换一种书写方式把filename放在其他地方Win2k3 IIS6.0 ASP 结合.htaccess指定某些文件使用php来解析 这个方法通常用于绕过waf黑名单的配置该目录下所有文件都将其使用php来解析 0x03 系统特性 Windows特殊字符当我们上传一个文件的filename为shell.php{%80-%99}时 waf可能识别为.php{%80-%99}就会导致被绕过。Win2k8 IIS7.0 PHP exee扩展名上传.exe文件通常会被waf拦截如果使用各种特性无用的话那么可以把扩展名改为.exee再进行上传。 NTFS ADS特性ADS是NTFS磁盘格式的一个特性用于NTFS交换数据流。在上传文件时如果waf对请求正文的filename匹配不当的话可能会导致绕过。 Windows在创建文件时在文件名末尾不管加多少点都会自动去除那么上传时filename可以这么写shell.php......也可以这么写shell.php::$DATA.......。Win2k8 IIS7.0 PHP 0x04 waf缺陷 匹配过于严谨 一个空格导致安全狗被绕过 Content-Type: multipart/form-data; boundary---------------------------4714631421141173021852555099 尝试在boundary后面加个空格或者其他可被正常处理的字符 boundary ---------------------------4714631421141173021852555099 Win2k3 IIS6.0 ASP 以上也能说明一个问题安全狗在上传文件时匹配各个参数都十分严谨不过IIS6.0以上也变的严谨了再看看其他的地方 每次文件上传时的Boundary边界都是一致的 Content-Type: multipart/form-data; boundary---------------------------4714631421141173021852555099Content-Length: 253 -----------------------------4714631421141173021852555099Content-Disposition: form-data; namefile1; filenameshell.aspContent-Type: application/octet-stream %eval request(a)%-----------------------------4714631421141173021852555099-- 但如果容器在处理的过程中并没有严格要求一致的话可能会导致一个问题两段Boundary不一致使得waf认为这段数据是无意义的可是容器并没有那么严谨Win2k3 IIS6.0 ASP 修改Content-Type的MIME类型Win2k3 IIS6.0 ASP ASCII 127的字符 数据过长导致的绕过 waf如果对Content-Disposition长度处理的不够好的话可能会导致绕过例如 Win2k3 IIS6.0 ASP 基于文件名基于构造长文件名 如果web程序会将filename除了扩展名的那段重命名的话那么还可以构造更多的点、符号等等。 特殊的长文件名文件名使用非字母数字比如中文等最大程度的拉长不行的话再结合一下其他的特性进行测试 shell.asp;王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王.jpg 0x05 End 文件上传Bypass可写的点不多现有的姿势也不能拿出来讲笑重点在于上传文件时遇到waf能够准确判断所拦截的点目光不能只盯在waf更多的时注意后端的情况。往往是需要结合哪些语言/容器/系统*版本“可以怎样”、“不可以怎样”。 转载于:https://www.cnblogs.com/deen-/p/7277159.html