文件下载接口的URL构造分析与讨论

某学院的文件下载接口

http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname=filedown.rar

参数分析:

  • id 资源的id
  • Ext 资源的文件下载格式
  • fname 文件下载后的名字

逻辑原理:

发送参数给filedown.asp,asp文件接收参数id的值并从数据库查询对于ID资源的URL地址,并且下载;按照ext格式进行下载返回,按照fname对下载返回的文件命名。


某协会文件下载接口

http://www.****.org.cn/content/download.do?filename=test.doc&url=group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc

参数分析:

  • filename 文件下载后的名字
  • url 文件的下载路径

通过页面的标签分析,我们寻找到downloadfile()函数,我们调用该函数,我们则成功的下载了该函数,我们综合分析该URL地址:

http://www.****.org.cn/content/download.do?filename=test.doc&url=group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc

filename 文件下载后的名字

url 文件的下载路径

分析得知group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc是该文件的一个“相对”路径,但我们不知道这个路径的全部,于是我们测试一下:

http://www.****.org.cn/group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc

结果是不尽人意的。

根据开发的习惯,通常这类的文件资源都会放到同一个路径位置,于是我们去寻找该站点的文件资源(比如:声音、图片、视频);果然,找到了这样的一个地址:

http://118.***.**.***:80/group1/M00/07/15/Cj0BE18NZcyAAI-uAAEGa1djidw254.jpg

仔细一看和我们之前DOC文件的路径大致相同,于是我们“动手”吧:

http://118.***.**.***:80/group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc

成功,我们现在确定了该文件的位置,在接下来就是一步一步的构造POC:

http://118.***.**.***:80/../../../../../../../../../../etc/passwd

Payload:

url=../../../../../../../etc/passwd

在不继续追究讨论如果突破的前提下,我分析就到此了;不过细心的人已经发现,文件资源存放的服务器和网站并不在同一台机器中,也就是说,我们的"任意文件下载"并无法直接危害到网站,这也是一种有效的预防措施。(突破失败)


某基金会文件下载处接口URL和数据包

http://www.****.org.cn//downlog/insert

ninfor.js

POST //downlog/insert HTTP/1.1
Host: www.****.org.cn
Content-Length: 187
Cache-Control: max-age=0
Origin: http://www.****.org.cn
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://www.****.org.cn/front/download/list/1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: JSESSIONID=70C46A039204087FEA92625A1FBBBA22; tq_current_visit_time=1610441247471; tracqinfo={r$"241470177168012"#ct$1#tt$0#lv$"2021-1-12^2C16^3A47^3A28"#lt$""#pu$""#cn$""#ib$0#bt$0#lb$1610441248270#ci$""#cr$""#pt$""}
Connection: close url=http://www.****.org.cn/front/download/list/1&id=60&type=7&typename=1&contype=2&title=5-******

分析post的数据,可以发现,id参数是索引文件的关键参数。


某律师事务所网站的文件下载处URL

这是多数网站采用的文件下载的方式方法,该方法就是通过<a href="****"/>来下载某个目录下的文件,该方法时最低技术水平的有效方法,当然了,在信安测试,为了放置目录资料被有效的遍历,都会要求将所有上传的文件重命名保存。

此类的文件下载URL构造,数不胜数。


还有一些喜欢“捉迷藏”的文件下载URL:


结束语

上述的文件下载URL构造,就是我在近期挖掘“任意文件下载”一类漏洞常见的构造方式;通常来说,此类的URL构造类似于“<a/>”标签,都具有一种比较难有方法的;而对于使用id参数值进行文件下载,往往是采用“SQL注入”的方式来进行突破,但这就并不是“任意文件下载”了,以为以id作为唯一文件下载索引方式的URL,是无法构造出下载约定计划以外的文件;当然了最有可能存在“任意文件下载”漏洞的URL就是“某协会文件下载接口”中的那类URL,它是通过我们给脚本文件传递一个path来下载该path指向的文件,本文中的对象,它采用了不同的服务器,无法通过任意文件下载来突破网站,除此之外,还有的则是采用“第三方”存放资源,只可惜我在撰写本文时,浏览众多网站并没有找到相关的。

讨论

2021/01/13

个人认为,目前我所遇到的所有文件下载的URL构造,无非通过三类:

  • 直接使用a标签指向资源路径位置,此类URL极难形成任意文件下载。

  • 后端采用数据库的ID索引方式,每一个ID指向一个资源path,在后端执行path获取和下载,最大程度的减少意料之外的资源paht和恶意URL的出现,不过与此同时写需要加强SQL防注入。

  • 向文件下载的download接口传递一个"URL/Path",接口向该地址的文件资源发起下载并返回给当前位置;这类方式是最容易出现“任意文件下载”危害的,所以不建议采用此类。

任意文件下载漏洞的接口URL构造分析与讨论的更多相关文章

  1. 【代码审计】XYHCMS V3.5任意文件下载漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  2. 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析

      0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4  更新时间:2017-09-13 程序源码下载:http://www ...

  3. 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析

      0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...

  4. 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  5. 代码审计-(Ear Music).任意文件下载漏洞

    0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...

  6. PHP代码审计笔记--任意文件下载漏洞

    在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件.  0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...

  7. dzzoffice 任意文件下载漏洞分析

    dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始:    elseif($_GET['do']=='move'){    $obz=trim($_ ...

  8. 代码审计-phpcms9.6.2任意文件下载漏洞

    漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...

  9. 代码审计之Finecms任意文件下载漏洞

    PS:该漏洞已被公布,只是学习.故自己跟着大佬的步伐审计. 文件地址:\controllers\ApiController.php Line 57 public function downAction ...

随机推荐

  1. go中位运算

    左移右移 const ( // 将 1 左移 100 位来创建一个非常大的数字 // 即这个数的二进制是 1 后面跟着 100 个 0 Big = 1 << 100 // 再往右移 99 ...

  2. [亲测可用]BCompare文件比较对比工具4.3.4绿色版

    程序员必备良品 Beyond Compare 灰常好用,一直使用的文本 文件比较工具,用来对比两个文件文本的差异,可以用于各种代码,文本对比 使用方法: 解开压缩后:添加右键的 !添加右键.bat,运 ...

  3. 团队作业part3--需求改进&系统设计

    一.需求&原型改进 1. 需求的修改 借鉴其他开发游戏的组的经验以及老师的建议,针对之前的需求分析,作出如下修改: 问题1:这款游戏对玩家的吸引力与驱动性有所不足. 修改1:增加成就系统与排行 ...

  4. UOJ61. 【UR #5】怎样更有力气

    题目链接 Statement 给定一棵 \(n\) 点树 \(T\) 和 \(m\) 个操作 v u w : 在 \(T\) 中 \(u,v\) 的最短路上所有点里面选出若干对(可以不选,可以重复), ...

  5. 从隔壁兄弟那爬点网页数据,整理成word文档

    package com.parse_report; import com.report.utils.ParseUrl; /** * Create by JIUN 2018/7/14 */ public ...

  6. 购物车 python作业

    功能要求:要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功.附加:可充值.某商品移除购物车goods = ...

  7. JavaScript:常用的一些数组遍历的方法

    常用的一些遍历数组的方法: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. python 通过pip freeze、dowload打离线包及自动安装【适用于保密的离线环境】

    python的pip是其包管理工具,相当方便好用.本文只介绍pip 如何通过其freeze命令打离线包,及其离线包的安装脚本.这个知识点,特别适用于不适合连通互联网,设备需要物理隔绝,保密要求严格的客 ...

  9. 开源抓包工具PowerSniff(支持lua,c语言作为脚本实时分析)

    做这个程序的意图是wireshark插件编写复杂(虽然也支持lua),而轻量级的工具如smartsniff,minisniff不支持插件化数据分析,各种工具用下来或多或少不顺手.以前写的外挂也都是手工 ...

  10. js下 Day17、综合案例

    一.面向对象轮播 效果图: