20-文件下载及读取漏洞

本文详细介绍了文件操作中的漏洞,包括文件下载、文件读取漏洞的原理、利用条件、危害以及示例。着重讨论了如何通过漏洞利用获取敏感信息,提供了一些防护措施,并给出了学习网络安全的阶段划分和资源推荐。
摘要由CSDN通过智能技术生成

WEB 漏洞-文件操作之文件下载读取全解

思维导图

![img](https://img-
blog.csdnimg.cn/img_convert/05bd0dd17d46f5e182ef33232a5dd1c3.png)

  • 1.文件被解析,则是文件解析漏洞
  • 2.显示源代码,则是文件读取漏洞
  • 3.提示文件下载,则是文件下载漏洞

文件下载漏洞

利用条件

(1)存在读文件的函数和操作

(2)读取文件的路径用户可控且未校验或校验不严

(3)输出了文件内容

危害

(1)下载服务器任意文件,如脚本代码,服务以及系统配置文件等

(2)可用得到的代码进一步代码审计,挖掘漏洞

文件读取漏洞

就是攻击者通过一些手段可以读取服务器上开发者不允许读到的文件

一 、简介

由于业务需求,很多网站往往需要提供文件(附件)下载的功能块,但是如果对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。

漏洞利用

  • 数据库配置文件下载或者读取后续
  • 接口密钥信息文件下载或者读取后续

二、任意文件下载漏洞地址

对应文件

  • 配置文件(数据库,平台,各种等)

    利用:(信息收集信息>猜路径 >>下载配置文件/代码文件 >> 利用服务器软件漏洞> shell> 提权)

    1.任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。

    2.下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
    下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。
    下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。

    3.平台文件
    Windows:(windows的这些路径不一定都存在)
    C:\boot.ini //查看系统版本
    C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
    C:\Windows\repair\sam //存储系统初次安装的密码
    C:\Program Files\mysql\my.ini //Mysql配置
    C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
    C:\Windows\php.ini //php配置信息
    C:\Windows\my.ini //Mysql配置信息
    C:\Windows\win.ini //Windows系统的一个基本系统配置文件

    Linux:
    /root/.ssh/authorized_keys
    /root/.ssh/id_rsa
    /root/.ssh/id_ras.keystore
    /root/.ssh/known_hosts //记录每个访问计算机用户的公钥
    /etc/passwd
    /etc/shadow
    /usr/local/app/php5/lib/php.ini //PHP配置文件
    /etc/my.cnf //mysql配置文件
    /etc/httpd/conf/httpd.conf //apache配置文件
    /root/.bash_history //用户历史命令记录文件
    /root/.mysql_history //mysql历史命令记录文件
    /proc/mounts //记录系统挂载设备
    /porc/config.gz //内核配置文件
    /var/lib/mlocate/mlocate.db //全文件路径
    /porc/self/cmdline //当前进程的cmdline参数

    参考:https://www.cnblogs.com/zzhoo/p/12613815.html

记住下载和访问是不一样的.

案例1:pikuchu靶场-文件下载测试-参数判断

<1>打开显示如下,点击人名可以下载对应图片。![img](https://img-
blog.csdnimg.cn/img_convert/bd0c70dfeca4dc77d4f31dc6ae1d0a15.png)

<2>抓包得到对应下载地址如下:

http://127.0.0.1:8080/pikachu/vul/unsafedownload/execdownload.php?filename=ai.png

![image-20230330141756717](https://img-
blog.csdnimg.cn/img_convert/bef83d4ffc6fc6c631688a45ff133cde.png)

<3>修改filename参数值如下,尝试下载当中的execdownload.php文件,判断是否存在文件下载漏洞。

http://192.168.31.128/pi/vul/unsafedownload/execdownload.php?filename=../execdownload.php

//判断出在上级目录所以使用一个../

![image-20230330145320500](https://img-
blog.csdnimg.cn/img_convert/1a9ce0cf2e325ca989f08dacf5289caf.png)

如果直接访问

http://192.168.31.128/pi/vul/unsafedownload/execdownload.php?
//也下载了文件但是不是源码

![image-20230330141916845](https://img-
blog.csdnimg.cn/img_convert/cff5a00dd0a929cc93a493b026692a3b.png)

因为PHP代码在页面中就是不可见的,一种属于访问,一种属于下载.

<4>可以使用扫描工具爬行或扫描地址,直接找到配置文件,或者通过下载代码文件分析其中包含的文件路径等,找到配置文件等敏感文件。

1.比如可以通过网站其他页面,将他通过…/的方式下载下来。分析代码。

![image-20230330143833159](https://img-
blog.csdnimg.cn/img_convert/64228faf7de4f84115580d837d2ade94.png)

2.使用御剑工具中的字典扫描目录:

扫描出:(http://192.168.31.128/pi/vul/unsafedownload/download/)

这个是网站的存储的文件地址

![image-20230330142705540](https://img-
blog.csdnimg.cn/img_convert/53c729495b53850f5bfdec98508276d0.png)

扫出敏感文件:

![image-20230330143455058](https://img-
blog.csdnimg.cn/img_convert/e5973b0285cef74187e46549f18b6ac1.png)

打开连接,如果打不开就是没有权限.

![image-20230330144036119](https://img-
blog.csdnimg.cn/img_convert/cc4606e59041e974f4f566147196a416.png)

<5>分析配置文件路径,构造filename参数值,使其指向配置文件地址,下载。

http://127.0.0.1/vul/unsafedownload/execdownload.php?filename=../../../inc/function.php

<6>在配置文件中可以找到数据库用户名密码等敏感信息,方便后期利用。

config.inc.php中存放数据库名和密码![image-20230330144319188](https://img-
blog.csdnimg.cn/img_convert/8e1b68e72a3fea1227186a8ed10c23f3.png)

案例2:Zdns网站文件下载真实测试-功能点

<1>网站打开如下,找到下载功能点,点击下载。![img](https://img-
blog.csdnimg.cn/img_convert/3780ace996f6a8c82a2420d257d2f75c.png)

<2>抓包获取下载请求,分析如下。

真实的下载地址http://down.znds.com/getdownurl/?s=/down/20210806/txsp16158_7.8.0.1005_dangbei.apk

更换下载地址也就存在了文件下载漏洞![img](https://img-
blog.csdnimg.cn/img_convert/d395d0616da067d4cfb2f329eb18e88e.png)

<3>下载请求参数值是一个路径+文件名,猜测含有文件下载漏洞。这里我们不知道网站的代码结构,因此无法构造请求下载敏感文件。

<4>本案例主要是告诉我们下载漏洞在哪里测?下载漏洞怎么判断存在等。

一般去找下载功能点测试,观察下载接口参数值是不是文件名,是不是可以改为其他文件名或文件路径。

案例3:小米路由器-文件读取真实测试-漏洞

地址:https://www.seebug.org/vuldb/ssvid-98122

远程任意文件读取漏洞(CVE-2019-18371)

小米路由器的nginx配置文件错误,导致目录穿越漏洞,实现任意文件读取(无需登录)

nginx配置不当可导致目录穿越漏洞

location /xxx {
alias /abc/;
}

可通过访问http://domain.cn/xxx…/etc/passwd实现目录穿越访问上级目录及其子目录文件。

在小米路由器的文件/etc/sysapihttpd/sysapihttpd.conf中,存在。

location /api-third-party/download/extdisks {
alias /extdisks/;
}

故可以任意文件读取根目录下的所有文件,而且是root权限,

如访问http://192.168.31.1/api-third-party/download/extdisks…/etc/shadow

![img](https://img-
blog.csdnimg.cn/img_convert/57ef7b4077f9b006d475390233b7816e.png)

在fofa上搜索“小米路由器”,找到真实地址访问测试,成功下载文件。

![img](https://img-
blog.csdnimg.cn/img_convert/5da1186faeda0cbd09bf178fbe752b45.png)

![img](https://img-
blog.csdnimg.cn/img_convert/cf3d203c2e6f96e75a91147ccb8f14f7.png)

案例4:RoarCTF2019-文件读取真题复现-比赛

地址:https://buuoj.cn/challenges#%5BRoarCTF%202019%5DEasy%20Java 思路:

  • 爬虫扫描地址-分析参数名参数值-文件操作安全-对应脚本
  • 修改提交方式测试-读取WEB配置文件WEB-INF/web.xnl
  • 访问读取对应地址-访问读取flag对应class文件-(WEB-INF/classes/com/wm/ctf/FlagController.class)

![image-20230330152700835](https://img-
blog.csdnimg.cn/img_convert/95cfa5b2bf1cf146c429137c66367fca.png)

<1>打开首页是一个登录框

![image-20230330152648209](https://img-
blog.csdnimg.cn/img_convert/25aa7a4a600c3745681ade007dae6c8f.png)

<2> 复制help连接,发现会触发一个文件下载请求:

http://90bc3afb-141d-47ba-b455-b2120b39a054.node4.buuoj.cn:81/Download?filename=help.docx

![image-20230330155810221](https://img-
blog.csdnimg.cn/img_convert/2b7a50c1d6e24150babe24a18b1f0f32.png)

<3>直接get该请求,报错,

![image-20230330155905591](https://img-
blog.csdnimg.cn/img_convert/9c5340c3257cb5b926c68327e848b11c.png)原因是java代码设置了post请求方式,

因此我们将filename的传值以post方式提交

![image-20230330160006073](https://img-
blog.csdnimg.cn/img_convert/1b76b10c2abc78a330870e5a293debdc.png)

<5>help文件内容如下,说明flag并不在这里。但是通过分析请求参数,猜测这里有文件下载读取漏洞。

![img](https://img-
blog.csdnimg.cn/img_convert/5773edd239c532c92c0bbe0ee31bf367.png)

<6> 通过分析该为Java程序开发的,在javaweb中有个WEB-INF文件下web.xml配置文件

  • Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。

![image-20230330161040121](https://img-
blog.csdnimg.cn/img_convert/407dfb020656374daa54a852f737446f.png)

将filename值改为java的配置文件,成功读取到配置文件并在配置文件中找到了flag对应地址

![image-20230330161256636](https://img-
blog.csdnimg.cn/img_convert/5a3651ca88b865b34356201cf1818d76.png)

<7>尝试访问flag文件路径,报错,但是报错信息暴露了一个文件地址(该地址在配置文件中也有)![img](https://img-
blog.csdnimg.cn/img_convert/f0a008d65b7e27de60e58ed83048a0d7.png)

<8>下载该文件 ,成功拿到flag。

![image-20230330161509780](https://img-
blog.csdnimg.cn/img_convert/3a635acdbc8dcae87e33be6bf6efd2d8.png)

![image-20230330161625121](https://img-
blog.csdnimg.cn/img_convert/0e013d4667b5892c40529378390b3f78.png)

案例5:百度杯2017二月-Zone真题复现-比赛拓展

地址:https://www.ichunqiu.com/battalion?t=1&r=57475

<1>首页是一个登录页面![img](https://img-
blog.csdnimg.cn/img_convert/10255fa5aefc083926e6dc6654b3f8f3.png)

<2>首页抓包

看到login=0,

![image-20230330162524573](https://img-
blog.csdnimg.cn/img_convert/9d70865ff879c973329b76c6d248c79a.png)

将cookie中的login=0改为login=1,成功登录。![img](https://img-
blog.csdnimg.cn/img_convert/8aec0e8b782d306ba5cfed679b2f9a36.png)

<3>点击manage,继续抓包,将cookie中的login=0改为login=1

![image-20230330162709547](https://img-
blog.csdnimg.cn/img_convert/609d71987951e08102ec8fc9cbe8b482.png)

![image-20230330162820245](https://img-
blog.csdnimg.cn/img_convert/27b6429288748e68e7e8cb8625961f55.png)

<4>抓到下一个请求接口,这个接口很关键,有module=index&name=php参数,意思是访问index.php文件。

![image-20230330164525869](https://img-
blog.csdnimg.cn/img_convert/1e3184fffee8334cf5ae8a3072ca8434.png)

<5>尝试修改参数值,实现对指定文件的读取。…/.绕过了…/过滤

GET /manages/admin.php?module=..././..././..././etc/nginx/nginx.conf&name= HTTP/1.1

防护

(1)过滤特殊字符.点,使用户在URL中不能穿越目录

(2)正则严格判断用户输入参数的格式

(3)php.ini配置open_basedir限定文件访问范围

(4)将文件路径保存于数据库中,通过url?id=123的方式下载文件

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值