百科生活 投稿
关于【htaccess文件上传解析漏洞】:htaccess文件上传解析漏洞,htaccess nginx,今天涌涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
- 内容导航:
- 1、二十九,文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
- 2、htaccess文件上传解析漏洞,htaccess nginx
- 3、如何写.htaccess文件?
- 4、如何建立和修改.htaccess文件?
- 5、如何让APACHE支持.htaccess
- 6、.htaccess是干什么用的?
1、二十九,文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
一.文件上传漏洞之扩展名限制
前一篇文章详细讲解了文件上传漏洞的原理、一句话木马和Caidao的基本用法,涉及JS绕过文件上传、MIME绕过文件上传、大小写绕过文件上传、点和空格绕过文件上传、htaccess文件绕过上传,这篇文章将继续分享文件上传漏洞。下面参考了Fox老师的upload-labs思维导图,供大家学习。
1.PHP345文件绕过上传
PHP3代表PHP版本3,这里用于文件绕过检测。一般的软件都是向下兼容,PHP3代码,PHP5同样兼容能够执行。如下图所示,fox.php5文件同样能够正常上传。
2.Windows ::$DATA绕过
Windows ::$DATA绕过只能用于Windows,Windows下NTFS文件系统有一个特性,即NTFS文件系统在存储数据流的一个属性DATA时,是请求a.php本身的数据。如果a.php还包含了其他的数据流,比如a.php:lake2.php,请求a.php:lake2.php::$DATA,则是请求a.php中的流数据lake2.php的流数据内容。简单来说,就是在数据后面加上::$DATA实现绕过,fox.php::$DATA返回fox.php数据。
上传成功如下图所示,然后可以直接访问upload/fox.php文件。
3.Apache解析漏洞上传
Apache是从右到左判断解析,如果为不可识别解析,就再往左判断。比如1.php.xxx对Apache来说xxx是不可解析的,所以就会解析成1.php,这就是该漏洞的实现原理。
如上图所示,将本地“fox.php”修改为“fox.php.xxx”,然后点击上传。
接着尝试用菜刀去连接。
URL为靶场的网址:http://192.168.1.8/file_upload/upload/fox.php.xxx,密码为PHP一句话木马中的“fox”,代码如下:
下图是Caidao连接的示意图。
连接之后,成功获取文件目录,可以看到“fox.php.xxx”被成功上传。
二.内容验证文件上传
内容检查是网站安全的重要手段之一。假设我们将包含一句话木马的“fox.php”修改为“1.jpg”并上传,有的网址会提示上传错误,因为JPG格式不能执行PHP文件脚本的。
如下图所示,它会判断图片的文件头,包括gif、png、jpg等格式。
文件头是用来判断数据格式的,这里尝试修改文件头进行上传,以gif文件为例,添加文件头“GIF89a”后即可上传成功。
同样可以尝试BurpSuite抓包修改文件后缀.php进行上传。
三.%00截断上传
0x00是十六进制表示方法,是ASCII码为0的字符,在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上。需要注意,00截断get是可以自动转换的,post需要特殊转换,下面举一个例子。
首先,选择上传一张包含一句话木马的“php.jpg”图片。
然后,利用BurpSuite抓包并修改后缀名为“php.php%001.jpg”。如果直接修改为“php.php”可能会被过滤。
这种方法仍然不可行,因为它采用post提交数据,需要特殊转换。这里选中“%00”右键转换为URL格式,如下图所示,然后再点击“Forward”提交数据即可。
文件成功上传,%00自动截断后面的内容。
四.IIS6.0 解析漏洞
ISS6.0解析漏洞分两种:
1.目录解析
以“*.asp”命名的文件夹里的文件都将会被当成ASP文件执行,比如“1.asp/1.jpg”,这里1.jpg会被当做asp文件执行。
利用IIS6.0解析漏洞,我们可以在网站下建立名字为“*.asp” 、“*.asa”的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析。例如创建目录“vidun.asp”,则“/vidun.asp/1.jpg”将被当作asp文件来执行。
2.文件解析
“*.asp;.jpg”像这种畸形文件名在 “;” 后面的直接被忽略,也就是说当成 “*.asp”文件执行。比如“1.asp;1.jpg”命名的文件,同样是以asp脚本进行执行。IIS6.0 默认的可执行文件除了asp还包含这三种:.asa、.cer、*.cdx。
网站上传图片的时候,将网页木马文件的名字改成“*.asp;.jpg”,分号后面的不被解析也同样会被IIS当作asp文件来解析并执行。例如上传一个图片文件,名字叫“vidun.asp;.jpg”的木马文件,该文件可以被当作asp文件解析并执行。
假设某网站是用IIS6.0搭建。
该ASP靶场存在一个图片上传的后台页面,如下图所示:
第一步,我们制作一个名为“asp1.jpg”的一句话木马,核心代码如下:
<%execute(request("fox"))%>
第二步,尝试上传“asp1.jpg”图片,它会提示上传类型不正确。
第三步,因为该网站检查了文件头类型,这里需要进行简单的修改,比如增加GIF文件头。
第四步,选择上传,此时能够成功上传。
第五步,接着尝试BurpSuite进行抓包,这里截取到数据包,点击“Send to Repeater”按钮。
第六步,尝试在左边“upfile/”文件路径名后面增加文件名称“1.asp;”,然后点击请求发送。右边会显示文件成功上传,其路径详见图中。
上传之后的文件可以成功访问,如下图所示。
第七步,尝试进行Caidao连接,输入地址和密码“fox”。
第八步,成功获取服务器的文件目录,如下图所示。
注意:IIS6.0解析漏洞被发现的时候,微软是不承认这个漏洞的,所以没有进行相应的补丁修补。基本IIS6.0网站都很存在该漏洞。
同样的方法,某些TXT文件也是可以利用该漏洞进行上传。基本流程如下:
先随意上传一个文件,观其url发现是asp脚本构造的页面
在本地制作一个asp的一句话木马保存到文件中,然后打开burpsuite的代理功能去进行抓包修改
发送的POST请求中发现刚发送的asp.txt被保存的第二个upload文件下,为了让其执行,我们在第二个upload后面加入/webshell.asp文件
通过上一个步骤,有效地将asp.txt这个一句话木马放入webshell.asp中,IIS利用解析漏洞将asp.txt当作asp脚本去执行
在burp中转发浏览器显示成功上传,并列出上传的地址。最后通过Caidao远程连接获取目录。
另一种方法,将刚刚的asp木马文件名修改为webshell.asp;.txt,因为该网站不允许上传以asp作为后缀的文件名,所以我们使用.txt后缀,但分号后面的内容将会被IIS过滤不去解析,所以这就是个asp脚本。
通过Caidao成功获取目录如下图所示,建议尽量放置在隐藏位置;同时某些网站有上传大小限制,可以尝试在一句话木马文件中填充内容。
如果您是一名网站管理员,您需要注意:
(1) 进行文件黑名单和白名单过滤是非常必要的。
(2) 文件的完整性校验、文件头校验、文件格式校验、文件大小校验都是必要的。
(3) 避免像IIS6.0解析漏洞,注意相关CVE漏洞提示并及时修复。
(4) 如果可以,尝试对上传文件的内容进行简单的校验。
(5) 网站防火墙、安全狗都需要安装,弱口令、SQL注入、XSS等常见漏洞需要预防。
五.总结
写道这里,这篇基础性文章就此结束,后面会继续分享文件上传漏洞。最后希望基础性文章对您有所帮助,作者也是这个领域的菜鸟一枚,希望与您共同进步,共勉。上周末女神来了一趟,哈哈。这周举办会议,非常忙碌,但也挤些很少的时间分享新知识,且看且珍惜。
2、htaccess文件上传解析漏洞,htaccess nginx
.htaccess是什么东西?.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。 说明:如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。 例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:
3、如何写.htaccess文件?
直接编辑 .htaccess。实质二者都是修改文件 .htaccess,只是前者手工编辑,后者是由 cPanel 完成。这里主要介绍的第二种方法。
注意:在设置 301 重定向之前务必备份相应目录下的.htaccess文件。
1.重定向domain.com到www.domain.com
这种重定向旨在使域名唯一,是网站SEO必须要做的,后面重定向www.domain.com到domain.com也是出于同样的原因,只是形式不同。打开.htaccess文件,加入以下规则。(下面的规则是针对主域名的,子域名要修改,否则子域名也会被重写,下面会专门对这个进行说明)
RewriteEngine>
5、如何让APACHE支持.htaccess
1
打开apache安装目录下的httpd.conf文件,把
AllowOverride None
改为
AllowOverride All
2
去掉下面的注释 #
LoadModule rewrite_module modules/mod_rewrite.so
3
重启apache服务
6、.htaccess是干什么用的?
工作原理和使用方法 参考资料:http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/htaccess.html 本文关键词:htaccess文件上传解析漏洞预防,.htaccess文件上传。这就是关于《htaccess文件上传解析漏洞,htaccess nginx(文件上传漏洞和IIS6.0解析漏洞及防御原理)》的所有内容,希望对您能有所帮助!
.htaccess文件(或者"分布式配置文件")提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
说明:
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
AccessFileName .config
通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。
例如,本手册对AddDefaultCharset指令的阐述表明此指令可以用于.htaccess文件中(见"作用域"项),而覆盖项一行是FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo 。
例子:
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
如果不能确定某个指令是否可以用于.htaccess文件,可以查阅手册中对指令的说明,看在"作用域"行中是否有".htaccess" 。
(不)使用.htaccess文件的场合
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的
避免使用.htaccess文件有两个主要原因。
首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。)
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。
注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中
/www/htdocs/example目录下的.htaccess文件:
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:
AddType text/example .exm
但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
将AllowOverride设置为none可以完全禁止使用.htaccess文件:
AllowOverride None
指令的生效
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
例子:
/www/htdocs/example1目录中的.htaccess文件有如下内容:
Options +ExecCGI
(注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有如下内容:
Options Includes
由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许 Options Includes ,它完全覆盖了之前的设置。
将.htaccess合并到主配置文件中
正如在配置段(容器)中讨论的那样,.htaccess文件能够覆盖
Allowoverride All
Options +IncludesNoExec -ExecCGI
认证举例
如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的
有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。
.htaccess文件的内容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
必须设置 AllowOverride AuthConfig 以允许这些指令生效。
更详细的说明,请参见认证、授权、访问控制。
服务器端包含(SSI)举例
.htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
更详细的有关服务器端包含的说明,请参见SSI指南。
CGI举例
可以通过.htaccess文件允许在特定的目录中执行CGI程序,需要作如下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl
另外,如下配置可以使给定目录下的所有文件被视为CGI程序:
Options +ExecCGI
SetHandler cgi-script
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
更详细的有关CGI编程和配置的说明,请参见CGI指南。
疑难解答
如果在.htaccess文件中的某些指令不起作用,可能有多种原因。
最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。
在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。
- 最近发表