安全面试常见问题任意文件下载

《网安面试指南》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

 

1.1 任意文件下载漏洞

l 阅读本章节需要掌握的技术

HTTP请求协议基础

常用工具:

BurpSuite(强大的抓包改包工具)

1.1.1 漏洞原理

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

1.1.2 漏洞危害

通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等。

1.1.3 检测条件

网站正常运行;网站存在可以下载文件的功能。

1.1.4 检测方法

1、 查找网站存在可下载资源,可读取文件的接口。

2、 使用burpsuite进行数据包的抓取。

3、 寻找数据包中控制文件下载的参数,如

http://www.example.com/filedown.php?filename=testpic.png

4、 修改参数,尝试进行任意文件读取/下载

http://www.example.com/filedown.php?filename=../../../../../../../../../../etc/passwd

要注意的是,部分网站可能存在编码问题,所以构造的时候需要将 /转为url编码 %2f

http://www.example.com/filedown.php?filename=..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd

任意文件下载常用路径

LINUX:

/root/.ssh/authorized_keys

/root/.ssh/id_rsa

/root/.ssh/id_ras.keystore

/root/.ssh/known_hosts

/etc/passwd

/etc/shadow

/etc/issue

/etc/fstab

/etc/host.conf

/etc/motd

/etc/sysctl.conf

/etc/inputrc 输入设备配置文件

/etc/default/useradd 添加用户的默认信息的文件

/etc/login.defs 是用户密码信息的默认属性

/etc/skel 用户信息的骨架

/sbin/nologin 不能登陆的用户

/var/log/message 系统的日志文件

/etc/httpd/conf/httpd.conf 配置http服务的配置文件

/etc/ld.so.conf

/etc/my.cnf

/etc/httpd/conf/httpd.conf

/root/.bash_history

/root/.mysql_history

/proc/mounts

/porc/config.gz

/var/lib/mlocate/mlocate.db

/porc/self/cmdline

WINDOWS:

C:\windows\system32\drivers\etc\hosts host文件

C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml

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 //Mysqlroot

C:\Windows\php.ini //php配置信息

C:\Windows\my.ini //Mysql配置信息

C:\Windows\win.ini //Windows系统的一个基本系统配置文件

1.1.6 修复建议

1、 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。

2、 web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用. 由chroot创造出的那个根目录,叫做“chroot监狱”(所谓"监狱"就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考:http://blog.csdn.net/frozen_fish/article/details/2244870

3、 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。

4、 要下载的文件地址保存至数据库中。

5、 文件路径保存至数据库,让用户提交文件对应ID下载文件。

6、 用户下载文件之前需要进行权限判断。

7、 文件放在web无法直接访问的目录下。

8、 不允许提供目录遍历服务。

9、 公开文件可放置在web应用程序下载目录中通过链接进行下载。

参考代码:

public String download() throws Exception {//获取文件idString id = Struts2Utils.getRequest().getParameter("id");try {//通过id进行文件查询DownloadFile downFile = fileService.findEntityById(Long.parseLong(id));// 获取该附件的类型byte[] bt = null;bt = downFile.getContent();HttpServletResponse res =Struts2Utils.getResponse();res.reset();res.setContentType("application/x-msdownload");res.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(uacFile.getName(), "UTF-8"));OutputStream out = res.getOutputStream();out.write(bt);out.flush();out.close();} catch (Exception e1) {e1.printStackTrace();}return null;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408642.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旅游社交小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理 微信端账…

《数据结构》顺序表+算法代码+动画演示-C语言版

目录 顺序表概念 顺序表初始化 顺序表销毁 顺序表尾插 顺序表尾删 顺序表头删 顺序表头插 顺序表pos位置插入 顺序表pos位置删除 顺序表全部代码如下: 顺序表概念 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下…

多个程序监听不同网卡的相同端口、相同网卡不同IP的相同端口

1 概述 一个主机上的多个程序监听同一个端口,是否一定存在冲突?如果是多网卡、单网卡多IP的情景下,多个程序是可以独立监听的。 2 多个程序监听不同网卡的相同端口 3 多个程序监听同一个网卡不同IP的相同端口 4 小结 多个程序监听同一个网…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

pycharm修改文件大小限制

场景&#xff1a; 方法&#xff1a; 打开pycharm 安装目录下的idea.properties 增加配置项&#xff1a;idea.max.intellisense.filesize99999

java后端请求与响应总结

get 请求&#xff1a;将参数写在请求路径中&#xff08;请求路径跟一个&#xff1f;后面跟参数多个参数之间用&连接&#xff09; post 请求&#xff1a;将参数写在请求体中中 一、请求 1.简单参数 如 传一个或两个字符串、整数等 例如串一个用户名和密码 如果传入的数…

【自动驾驶】控制算法(四)坐标变换与横向误差微分方程

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

从法律风险的角度来看,项目经理遇到不清楚或不明确问题时的处理

大家好&#xff0c;我是不会魔法的兔子&#xff0c;在北京从事律师工作&#xff0c;日常分享项目管理风险预防方面的内容。 序言 在项目开展过程中&#xff0c;有时候会遇到一些不清楚或不明确的状况&#xff0c;但碍于项目进度的紧迫性&#xff0c;不得不硬着头皮做决策&…

Golang | Leetcode Golang题解之第368题最大整除子集

题目&#xff1a; 题解&#xff1a; func largestDivisibleSubset(nums []int) (res []int) {sort.Ints(nums)// 第 1 步&#xff1a;动态规划找出最大子集的个数、最大子集中的最大整数n : len(nums)dp : make([]int, n)for i : range dp {dp[i] 1}maxSize, maxVal : 1, 1fo…

CMake构建学习笔记4-libjpeg库的构建

libjpeg是一个广泛使用的开源库&#xff0c;用于处理JPEG&#xff08;Joint Photographic Experts Group&#xff09;图像格式的编码、解码、压缩和解压缩功能&#xff0c;是许多图像处理软件和库的基础。 libjpeg本身的构建没什么特别的&#xff0c;不过值得说道的是libjpeg存…

[Other]-安装ruby、ascli、ascp

最近新接到这样一个需求&#xff0c;将生物原始数据上传到某中心&#xff0c;其中用到ascp命令&#xff0c;阴差阳错的装了ruby、ascli&#xff0c;这里就都一并介绍下安装方式&#xff0c;由于服务器老旧默认安装时ruby2.0&#xff0c;又 升级到2.7等引发的一系列问题&#xf…

力扣(动态规划)-343整数拆分;96不同的二叉搜索树

整数拆分 题目&#xff1a; 给定⼀个正整数 n&#xff0c;将其拆分为⾄少两个正整数的和&#xff0c;并使这些整数的乘积最⼤化。 返回你可以获得的最⼤乘积。 示例 1: 输⼊: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输⼊: 10 输出: 36 解释: 10 3 3 4, 3 3…

Python 递归(recursion) 和 迭代(iteration)

递归 (recursion) 是指在函数的定义中使用函数自身的方法&#xff0c;直观上来看&#xff0c;就是某个函数自己调用自己。递归的基本思想就是把规模大的问题转化为规模小的相同的子问题来解决。 在函数实现时&#xff0c;因为大问题和小问题是一样的问题&#xff0c;因此大问题…

一款人性化的终端用户界面工具

A collection of human friendly terminal user interface. Screenshot • Installation • Usage • Configuration • Thanks 截图 历史文件预览 注意: find file 依赖 fzf. file browser依赖 ranger / lf / … 安装 git clone https://github.com/StubbornVegeta/Sta…

3秒内搞定服务器端口扫描!用RustScan快速查看开放端口

文章目录 3秒内搞定服务器端口扫描&#xff01;用RustScan快速查看开放端口1. RustScan简介2. RustScan特点3. RustScan的基本使用3.1 创建alias别名3.2 基本用法3.3 常用参数说明3.4 示例4. 注意事项 最近开始公众号文章也开始同步更新了&#xff0c;对Java、大数据、人工智能…

字节微前端框架Garfish

Garfish 是字节跳动开源的微前端框架&#xff0c;旨在应对现代 Web 应用在前端生态繁荣与应用日益复杂化背景下的挑战。本文将介绍如何使用 Garfish&#xff0c;提供代码示例&#xff0c;并与另一流行的微前端框架 Qiankun 进行对比分析。 安装 Garfish 首先&#xff0c;安装…

大模型对齐:DPO vs PPO

现在这些大型语言模型&#xff08;LLMs&#xff09;&#xff0c;可真是火得不行&#xff0c;各行各业都离不开它们了。它们能处理和写出跟我们差不多的文本&#xff0c;这让自然语言处理、写东西、还有客服这些领域都焕然一新。不过呢&#xff0c;这技术进步的同时也带来了一个…

Unity+Addressable

前期准备 下载一个hfs本地服务器&#xff0c;打开即可 HFS ~ HTTP 文件服务器 (rejetto.com) 1.安装Addressable插件 创建组 2.使用图片创建预制体 放入Addressable Groups内 3.右键 新建组 创建预制体t拖拽放入新建组里 新组命名为Gameobject 简化名称 4.创建一个测试脚本 …

Array List 练习(添加手机对象并返回要求的数据)

package ArrayListDemo;import java.util.ArrayList;public class ArrayListDemo7 {public static void main(String[] args) {//1.创建集合对象ArrayList<Phone> list new ArrayList<Phone>();//2.创建手机对象Phone ph1 new Phone("小米",1000);Pho…

使用 setResponseStatus 函数设置响应状态码

title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通过 setResponseStatus 函数,你可以轻松地在 Nuxt.js 中设置响应的状态码。这不仅能帮助用户更好地理解发生了什么,还能在需要时显示自定义的错误页面。…