zoukankan      html  css  js  c++  java
  • Java代码审计连载之—任意文件下载

    本文原创作者:黑客小平哥,本文属i春秋原创奖励计划,未经许可禁止转载!

    前言
    本次分享的是web安全漏洞中的任意文件下载,前段时间比较忙,今天抽空写了个简单的下载功能,代码运行的时候有点问题,但是不影响下载程序运行,我也就懒得改了,多多包含哈。
    任意文件下载漏洞描述
    一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等,就会造成任意文件下载漏洞。
    任意文件下载漏洞的表现形式
    任意文件下载总结来说,有以下三种表现形式:
    1、存在文件下载功能
    网站文件下载功能形式多种多样,页面功能大致如下:
    Url表现形式如下:

    如果单从参数命看,表现形式多种多样,当渗透时遇到以下类型可以稍加注意:
    &filepath=
    &relpath=
    &path=
    &url=
    &name=
    &filename=
    &src=
    &dir=
    &data=
    ......
    2、文件名参数可控,并且系统未对参数作过滤或者过滤不全
    文件名参数就是要下载的文件名,可以用brupsuite抓包看见,表现形式多种多样,大概如下:

    在代码中的表现形式如下,此处文件路径和文件名都是从前端获取,然后执行下载操作:
    3.文件内容输出或者保存在本地
    当文件内容可被下载任意看见,就会造成任意文件读取漏洞,不在此处讨论,当文件保存后,能被攻击者看见内容,就会造成任意文件下载漏洞,表现形式如下:

    下载功能代码如下:

    任意文件下载漏洞验证
    此处代码存在任意文件下载漏洞,表现形式如下:
    当文件正常下载时,brupsuite截图如下:


    此处替换文件名为WEB-INF/web.xml”,下载系统配置文件:

    可以看到此时下载文件失败,返回不一样的结果。
    但是可以添加../”跳转目录:
    可以看出上面返回web.xml问内容,表示下载成功(若返回下载失败,可以继续添加“../”,直到下载成功,若依旧不成功,可能文件不存在或者无漏洞,自己多试试)

    也可以输入很多../”,直接回溯到根目录,下载可能存在的系统文件:
    部分敏感文件如下:
    Linux
        /root/.ssh/authorized_keys
        /root/.ssh/id_rsa
        /root/.ssh/id_ras.keystore
        /root/.ssh/known_hosts
        /etc/httpd/conf/httpd.conf
        /root/.bash_history
        /root/.mysql_history
        /proc/self/fd/fd[0-9]*(文件标识符)
        /proc/mounts
        /porc/config.gz
        /etc/passwd
        /etc/shadow
        /etc/my.cnf

    Windows
        C:Program Filesmysqlmy.ini  //Mysql配置
        C:Program Filesmysqldatamysqluser.MYD  //Mysql root
        C:Windowsphp.ini  //php配置信息
        C:Windowsmy.ini  //Mysql配置信息
        C:oot.ini  //查看系统版本
        C:WindowsSystem32inetsrvMetaBase.xml  //IIS配置文件
        C:Windows epairsam  //存储系统初次安装的密码
        ...
    任意文件下载漏洞的修复
    漏洞修复可以根据自身业务需要修改,大致修复方法如下:
    1、对文件下载进行过滤,过滤掉“./”、“../”、“%”等,代码如下:

    当输入../”时:
    但是可以构造完整路径,下载任意文件:

    2、对下载的文件路径进行严格控制,只允许下载某部分目录下的文件:
    2、对下载文件后缀名做严格控制
    结语:
    今天就写这么多吧,希望对大家有帮助,有什么错误欢迎指出!有什么问题欢迎加本人微博,共同讨论,共同学习!
     
  • 相关阅读:
    Overloaded的方法是否可以改变返回值的类型
    parseXXX的用法
    java的类型转换问题。int a = 123456;short b = (short)a;System.out.println(b);为什么结果是-7616?
    UVA 10405 Longest Common Subsequence(简单DP)
    POJ 1001 Exponentiation(大数处理)
    POJ 2318 TOYS(计算几何)(二分)
    POJ 1265 Area (计算几何)(Pick定理)
    POJ 3371 Flesch Reading Ease (模拟题)
    POJ 3687 Labeling Balls(拓扑序列)
    POJ 1094 Sorting It All Out(拓扑序列)
  • 原文地址:https://www.cnblogs.com/hackerping/p/7552413.html
Copyright © 2011-2022 走看看