【网络安全 --- 任意文件下载漏洞(1)】任意文件下载漏洞

一,环境,工具准备

1-1 VMVare 16 虚拟机及下载安装(资源)

 请参考以下博客安装(特详细):【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)https://blog.csdn.net/m0_67844671/article/details/133609717?spm=1001.2014.3001.5502

1-2 window server 2003 下载安装 (提供镜像)

 请参考以下博客安装(特详细):

【网路安全 --- win2003安装】 windows server 2003 详细安装过程(提供镜像资源)_网络安全_Aini的博客-CSDN博客【网路安全 --- win2003安装】 windows server 2003 详细安装过程(提供镜像资源)https://blog.csdn.net/m0_67844671/article/details/133675835?spm=1001.2014.3001.5502

1-3 pikachu靶场搭建 (提供靶场及所需要的工具)

 请参考以下博客安装(特详细):

【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)_网络安全_Aini的博客-CSDN博客【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)https://blog.csdn.net/m0_67844671/article/details/133682360?spm=1001.2014.3001.5502

二,任意文件下载漏洞

以pikachu靶场为例进行演示

1-1 实例

发现点击名字就可以下载图片 

看一下图片的网址

http://192.168.31.159/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

看到这样的网址,我们上来的反应是sql注入点、xss攻击等手段,现在还需要考虑有没有任意文件下载漏洞,比如改一个文件名会怎样呢?会不会下载这个文件名的文件呢?先看一下文件所在目录

那么网址路径和物理路径的对应关系如下:但是注意,物理路径的最后一个download文件夹是没有在网址路径上体现出来的,通过filename参数对应的文件名称,后台代码肯定是去download文件夹里面找对应的文件了  

我们再来看, ../../../index.php ,从download文件夹开始往上层走,找到了如下pikachu文件夹,将里面的文件下载下来了。

我输入完网址,一按回车就把index.php下载下来了 

效果:index.php被下载下来了,这就叫做任意文件下载。这样的漏洞现在还有好多。  

1-2 产生原因 

我们看一看execdownload.php文件代码

写代码的时候,代码规定一个绝对路径,只能在某个文件夹里面下载文件,这样就能防止这个漏洞,但是很多程序员不知道这个问题,导致了漏洞。另一个防御方法,就是将 ../ 之类的符号屏蔽或者过滤掉。  

很多网站还会出先如下的问题,就是写很多很多层的 ../

比如下面这种,如果是Linux系统部署的网站,通过../不断往上走,能查看/etc/passwd文件

http://192.168.0.15/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../../../../../../../../../etc/passwd
## 通过../../等切换目录,也叫做目录穿越漏洞。

很明显,这个层级是不存在的,那么如果没有对路径进行处理的话,很有可能默认就直接返回了系统根路径,那么就拿到了根路径下面的etc下面的passwd文件。  

1-3 利用思路

快速扫描下载漏洞的时候,不管是工具还是手工,我们怎么判断下载漏洞呢?它有几个关键的形式:

## 一般链接形式:
    download.php?path=
    down.php?file=
    data.php?file=
    download.php?filename=

## 或者包含参数:
    &Src=
    &Inputfile=
    &Filepath=
    &Path=
    &Data=

当遇到一个任意文件下载时,我们的一般利用思路:比如下载哪些文件呢?  

(1)下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置

(2)下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方

(3)下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。如果是linux系统的话,尝试读取/root/.bash_history看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../来回跳转读取一些.ssh下的配置信息文件,读取mysql下的.bash_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,  

1-4 常见利用文件  

/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts     //记录每个访问计算机用户的公钥
/etc/passwd      // 存用户名的   
/etc/shadow     // 存密码的 
/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参数

1-5 漏洞修复

(1)过滤".",使用户在url中不能回溯上级目录 不能目录穿越 ../../
(2)正则严格判断用户输入参数的格式
(3)php.ini配置open_basedir限定文件访问范围

猜你喜欢

转载自blog.csdn.net/m0_67844671/article/details/134008314