任意文件下载/读取漏洞利用
正文
字面意思理解,就是你能够读取任何 你有权限读取到
的文件,但有一个最主要的问题就是,你不知道 文件名
一般情况下,任意文件读取/下载漏洞存在于 可下载资源,可读取文件的接口,比如网站读取指定图片
http://www.example.com/filedown.php?filename=testpic.png
或者是学校网站给下载文档的地方
http://www.example.com/filedown.php?file=xxxxx&filetype=doc
那么通过修改参数,就可以进行任意文件读取/下载
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
可以说,任意文件读取/下载漏洞存在后,最经典的还是下载 /etc/passwd
文件
在我利用的漏洞中,这个文件也可以说是最关键的文件,下面有两种思路
思路1
根据当前目录,配合请求的url,来对文件进行读取,接着慢慢的通过源码,读取整个网站关联到的文件
例如
那么通过a href就可以得到 DisplayFIle.php
这个文件名
http://www.example.com/filedown.php?filename=./filedown.php
通过读取 displayfile.php
这个文件,在获取到其他文件的名字,最后找到敏感代码文件,审计绕过
思路2
这是我最爱的思路,因为我根本懒得审计代码
通过下载 /etc/passwd
文件,我们可以得到这台机器上的所有文件,以及用户主目录
最好的情况就是,你当前的用户,就能去下载 /root/.bash_history
文件,如果不行的话,可以考虑用以下脚本
执行后,会自动获取用户主目录,然后一个一个去尝试下载,最后下载下来审计用户操作记录,我有一次就是利用这个方法,最后定位到用户,接着深入挖掘
深入挖掘
那么有了 .bash_history
后,就可以开始审计操作记录了,首先我们要确定一个东西,那就是任何终端输入的东西,都会被记录到 .bash_history
中,比如 mysql-u root-p123456
这样一来,我们就相当于直接获取到了mysql的账号密码
上图是我挖edu的时候,读到的东西
除此之外,通过用户history,我们还可以下载到所有的例如网站备份脚本,网站备份文件,调用其他网站的api key 和 api id
如果存在备份脚本的话,还可通过审计脚本,逆推着写一个脚本来下载备份数据库文件,贴一张我漏洞报告中的记录
下载到 mysql_backup.sh
后,进行审计,然后写出脚本获取备份文件
总结
除了思路1那种审计网站的思路外,我最常用的其实就是,跟着管理员的操作来进行文件读取,因为有的网站是直接外面写好后,传入里面解压后,才部署的网站,如果管理员没删除部署文件的话,直接整站下载美滋滋
在针对登录的页面,进行审计绕过,也不失为一种方式,但是我还是偏向于,读取备份文件、网站脚本、网站配置文件
- poj-----(2828)Buy Tickets(线段树单点更新)
- javaSE之线程联合
- ASM 翻译系列第三十一弹:了解ASM文件的空间分配
- 备份重于一切:远离“Gitlab删库事件”,QBackup是你的最佳选择!
- FFMPEG指令
- Gitlab删库事件回顾,备份手段还停留在“原始社会”?
- ASM 翻译系列第三十二弹:自制数据抽取小工具
- WordPress集成SendCloud邮件代发,规避SMTP泄漏网站主机真实IP的风险
- ASM 翻译系列第三十三弹:REQUIRED_MIRROR_FREE_MB的含义
- 放弃Python转向Go语言:这9大理由就够了 !(附代码)
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
- 利用HSTS安全协议柔性解决全站HTTPS的兼容性问题
- Nginx内容替换模块http_substitutions_filter_module及实用案例分享
- libmemcached编译安装报错解决记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode 242. 有效的字母异位词
- 再见Excel!最强国产开源在线表格Luckysheet走红GitHub
- 快速学习Python之迭代器和生成器
- js事件冒泡
- Deepin创建应用快捷方式
- SecureCRT下Python脚本编写
- 一篇文章上手Vue3中新增的API
- 先电OpenStack卸载脚本
- 先电OpenStack之neutron-vlan脚本
- 【7】进大厂必须掌握的面试题-Java面试-Jsp
- HTML5+JS 可交互360°&柱状全景图浏览
- Spring编译源代码解决spring-core缺少cglib和objenesis的jar包的办法
- 尤大 3 天前发在 GitHub 上的 vue-lit 是啥?
- CSS3旋转实例学习(附3D旋转实例)
- 学会23个linux常用命令,不做前端切图仔~