💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 文件下载漏洞 文件下载功能在很多web系统上都会出现,如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。 ### 漏洞危害和利用条件: **危害** * 下载服务器任意文件,如脚本代码,服务及系统配置文件等; * 可用得到的代码进一步代码审计,得到更多可利用漏洞 **利用条件** 1. 存在读文件的函数 2. 读取文件的路径用户可控且未校验或校验不严 3. 输出了文件内容 ### 漏洞发现: **1、Google hacking利用:** ``` #payload inurl:"readfile.php?file=" ``` **2、从链接上看:** ``` download.php?path= download.php?file= down.php?file= data.php?file= readfile.php?file= read.php?filename= ``` **3、从参数名看:** ``` &Data= &path= &src= &Inputfile= &readfile= &filepath= &RealPath= &dis= &url= &Lang= &urls= &menu= &filep= ``` ### 漏洞验证: 在找到下载文件的的url后,将url中的文件参数,替换为各种穿越目录,看是否能下载到相应的文件,如果能下载,就有下载漏洞 ```html #原url:http:#xx.com/index.php?f=logo.png http:#xx.com/index.php?f=../../../../../../etc/passwd http:#xx.com/index.php?f=../index.php http:#xx.com/index.php?f=file:#/etc/passwd ``` >当参数f的参数值为php文件时,若是文件被解析则是文件包含漏洞,若显示源码或提示下载则是文件查看与下载漏洞。 ### 文件下载漏洞利用思路: 尝试读取/root/.bash\_history看自己是否有root权限 #### 1、正常情况下的利用思路: 1. 下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置 2. 下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方。 3. 下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。 #### 2、当遇到权限问题的时候: * 如果具有root权限 这时候很多人肯定会说,具有root权限直接去读shadow文件了,但是很多时候我们遇到的服务器可能只对外开放了80,443端口,这时候我们即使获得了密码作用也不大,但是具备root权限对任意文件下载利用是绝好的。 下载/var/lib/mlocate/mlocate.db这个linux文件搜索库,然后利用`locate mlocate.db xxname` 搜索任意文件的具体路径 >locate 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建且每天自动更新一次。 * 如果没有root权限 只能按部就班的利用`../`来回跳转读取一些文件,如`.ssh`下的配置信息文件,读取mysql下的.bash\_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件 是下载的时候变得很繁琐,只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。 >如我们遇到的是java/jsp+oracle环境,可以先下载/WEB-INF/classes/applicationContext.xml文件,这里面记载的是web服务器的相应配置, >然后下载/WEB-INF/classes/xxx/xxx/ccc.class对文件进行反编译, >然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话我们可以本地构造上传页面用api接口将我们的文件传输进服务器。 ### 任意文件下载防御: * 过滤".",使用户在url中不能回溯上级目录 * 正则严格判断用户输入参数的格式(写死路径) * php.ini配置`open_basedir`限定文件访问范围 >如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!