文件下载接口的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. Vue 的响应式原理中 Object.defineProperty 有什么缺陷?为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty?

    Object.defineProperty无法监控到数组下标的变化,导致通过数组下标添加元素,不能实时响应: Object.defineProperty只能劫持对象的属性,从而需要对每个对象,每个属性 ...

  2. AtCoder Grand Contest 017 (VP)

    contest link Official Editorial 比赛体验--之前做题的时候感觉 AtCoder 挺快的,现在打了VP之后发现还是会挂的--而且不是加载缓慢或者载不出来,直接给你一个无法 ...

  3. 转载-没有IE就没有伤害!浏览器兼容性问题解决方案汇总

    普及:浏览器的兼容性问题,往往是个别浏览器(没错,就是那个与众不同的浏览器)对于一些标准的定义不一致导致的.俗话说:没有IE就没有伤害. 贴士:内容都是自己总结的,不免会出现错误或者bug,欢迎更正和 ...

  4. 微信小程序云开发如何上手

    简要介绍 微信小程序云开发,是基于 Serverless 的一站式后端云服务,涵盖函数.数据库.存储.CDN等服务,免后端运维.基于云开发可以免鉴权调用微信所有开放能力. 前提准备 微信开发者工具 创 ...

  5. Jmeter(7)参数化csv data set config

    接口测试同一变量或同一组变量不同值时,可通过csv data set config配置数据 1.创建文本文件,写入参数值,一个或一组值为一行,保存为.csv文件 2.创建测试计划,配置元件添加csv ...

  6. Linux杂谈: gcc对结构体大小的默认处理方式

    1. 发现问题 最近在编写代码过程中发现,对一个结构体进行 sizeof 操作时,有时候大小是填充过的,有时候又没有填充. 那么,如果在代码中没有显示的指定要求编译器进行对齐时,gcc的默认处理是怎样 ...

  7. Hive数据倾斜优化

    在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平 ...

  8. Nessus<强大的漏扫工具>

    刷漏洞,抓鸡必备,,,,,,, 参考文章: https://blog.csdn.net/wwl012345/article/details/96998187 肝,,,,太全了,,, ps : 我不是脚 ...

  9. vue API 知识点(3) --- 实例 总结

    一.实例 property 1.vm.$data Vue 实例观察的数据对象,Vue 实例代理了对其 data 对象 property 的的访问 2.vm.$props 当前组件接收到的 props ...

  10. PHP可回调类型

    一些函数如usort和call_user_func()可以作为用户自对应函数做为回调参数,回调函数不止是简单的函数,还可以是对象的方法(类方法),包括静态方法. 用户自定义函数作为回调函数的参数,PH ...