当前位置:首页 > Web开发 > 正文

即:....// #6 文件包含写webshell 观察源码

2024-03-31 Web开发

  1、观点:在php代码中,总会有一些代码我们会经常用到,这时引入了文件包罗函数,可以通过文件包罗函数把这些代码文件包罗进来,直接使用文件中的代码,这样提高了我们的事情效率。

  2、文件包罗函数:

    include():如果产生错误,会孕育产生一个警告然后继续执行脚本

    include_once():与include()不异,如果文件之前被包罗过则不再包罗

    require():会遏制执行代码

    require_once():如果文件之前被包罗过则不再包罗

  3、类型:本地文件包罗、长途文件包罗(url的形式进行)

        配置文件参数:allow_url_fopen:为ON时,能读取长途文件,

          Allow_url_include:为ON时,就可以使用include和require等方法包罗长途文件

  4、操作方法——伪协议

    # file://  协议用户访谒本地文件系统,使用要领:?file:// [文件的绝对路径和文件名]

    # php://input  可以访谒请求的原始数据的只读流,将post请求的数据看成php代码执行

    # php://filter  元封装器,读取源代码并以base64编码方法输出

    # zip://, bzip2://, zlib://   属于压缩流,可以访谒压缩文件中的子文件,使用要领:zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

    # data://  类似于php://input,可以让用户来控制输入流

    其他操作要领:(绕过方法)

    #00截断:windows在读文件名的时候遇到00就会遏制

    #长度截断(win:256,linux:4096)

    #包罗日志文件:传入的参数值如果会生存到日志文件中,我们可以把木马传入到日志文件中,知道日志的路径就可以进行下一步操纵

    #包罗session

  5、防御

    #php中使用open_basedir配置限制访谒在指定的区域

    #过滤 . (点) / (反斜杠) \(反斜杠)

    #禁止处事器长途文件包罗

    #尽量不要使用动态包罗,可以在需要包罗的页面固定写上

二、操作LFI环境复现文件包罗缝隙

  这是我在github上边下载的,有很多标题问题要做一些窜改才可以实现,所以懂了道理就可以了,用PHP study本地搭建起来就可以复现,

因为我的路径和原本代码的路径差别,所以每复现一个之前都要把文件包罗函数里面的路径改削一下,例如:

技术图片

  # LFI-1 简单的文件包罗

  不雅察看源代码,这是一个简单的文件包罗

  我此刻网站根目录下传入一个phpinfo的文件,

  

  按照源码,框中传入的参数是page,我们可以结构payload,得到根目录下的文件内容

  

技术图片

  按照尝试,不管文件的后缀名是jpg、txt,城市以php代码执行,所以可知文件包罗时与传入文件的类型无关

  

技术图片

   # LFI-2 00截断绕过

  不雅察看源码,

  这个参数传入之后组成的路径是:includes/文件.php,我们可以用%00把.php截断,然后操作相对路径进行绕过

  这个题可能是有很多限制,我把includes删除然后把php版本调到5.2.17然后把gpc设置为off才华实现。

  如果我们传入一个一句话,这时就可以用菜刀连接

  # LFI-3 点、斜杠绕过

  不雅察看源码,源码傍边取后四位即后缀名与.php对照,如果不异则输出不被允许检察源码的警告,若差别则读取文件内容。

  

技术图片

  我们可以在url的末尾加.(点),因为,在文件定名时,后缀后面加点是会自动去失的

  我们也可以加/.    因为在定名时,/(斜杠)是不允许呈现的

  # 4 去后缀名绕过

  不雅察看源码,

  

  addslashes()函数:是一个过滤函数

  

技术图片

  参数传入之后组成的url是:includes/class_参数.php

  源码自己就是有.php的后悔,我们可以传参数时舍后缀

  #5 双写绕过

  不雅察看源码,

  

技术图片

  这段源码过滤了../,我们可以通过双写绕过,即:....//

  #6 文件包罗写webshell

  不雅察看源码,

  这个和第一个差不久不多,就是参数是以post的方法提交的,我们只要用post的要领提交参数,就可以发明文件包罗

  此时,我们如果传入一个任意文件写入以下代码,执行之后就可以在文件的目录写入一个shell

  <?php fputs ( fopen(‘shell.php‘,‘w‘) , ‘<?php eval($_POST[shell])?>‘) ;?>

  这段代码的意思就是新建一个shell.php的文件,写入后面的一句话

  #7 用post的方法做00截断或舍去后缀  ../../../phpinfo.php%00

  #8 post方法做00截断或加./绕过

  #9 post方法做舍去后缀名绕过

  #10 post方法双写绕过

  #11 简单的post方法包罗,有一个隐藏的输入框,用隐藏的参数

   #12 简单的get方法包罗,有一个隐藏的输入框,用隐藏的参数

  #13 get方法双写绕过

  #14 post方法双写绕过

   注:可能是环境的问题,很多题不能实现,只要懂道理就可以

  #包罗日志文件获取webshell  

  日志默认路径:

  1、apache+Linux日志默认路径:

    /ect/httpd/logs/access_log 或者 /var/log/httpd/wccess_log

  2、apache+Win2003日志默认路径

    D:\xampp\apache\logs\access.log

    D:\xampp\apache\logs\error.log

  3、IIS6.0+Win2003默认日志文件

    C:\WINDOWS\system32\Logfiles

  4、IIs7.0+win2003默认日志文件

    %SystemDrive%\inetpub\logs\LogFiles

  5、nginx日志文件默认路径

    日志文件在用户安置目录logs目录下

      例如安置路径伪/user/nginx,

      拿我的日志文件目录就是在/user/nginx/logs里

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30378.html