直连下载
http://127.0.0.1/demo.exe
这种文件的路径由于网站设置的解析权限,访问到exe文件就会直接将文件下载到本地
http://127.0.0.1/demo.php
这种文件在直连下载的环境中,脚本文件只会被解析,不会被进行下载,什么文件会被下载是网站提前设定好的
为此这种文件下载一般情况下不会存在文件下载漏洞的情况
一般来说直连下载和网站的配置设置有关,就是网站自身规定了哪些文件可以下载,哪些文件用来进行解析,是由网站设置决定的,而不是由代码决定。
参数下载
而参数下载一般是由下载解析协议去解析文件,下载的内容如果没有限制的话一般由参数决定
http://127.0.0.1/demo.php?download=demo.exe
这就会下载demo.exe文件
http://127.0.0.1/demo.php?download=demo.php
这就会下载demo.php文件
这种文件下载一般情况下是通过网站的配置来取决于哪些文件需要下载,哪些文件需要解析。以IIS搭建平台为例(因为这个是微软自带的有图形化界面)我们可以定义不同文件后缀的文件进行代码解析,但IIS默认不设置的话就是下载操作。
网站文件下载的决定因素是由网站配置解析决定的
不同的文件后缀名会以什么样的方式解析,设置了网站就会呈现相关的解析 结果,没有设置就会下载
确保Apache服务器已经正确安装和配置。
找到Apache服务器的配置文件,通常位于 /etc/apache2
或 /etc/httpd
目录下,具体位置取决于您的操作系统和Apache版本。
在配置文件中找到
标签,该标签定义了网站文件的存储位置和访问权限。
在
标签中添加以下代码来允许下载图片文件
ForceType application/octet-stream
AddType application/octet-stream ".jpg" ".jpeg" ".png" ".gif"
AddDisposition inline
apache 和IIS配置的区别就是IIS是微软的 ,微软将其做成了图形化界面,apache则是通过口令去配置
利用这个接口进行文件下载,利用下载协议去解析文件
http://127.0.0.1/demo.php?download=index.php
代码示例
就下载到了网站下的图片信息
但是这种文件下载方式如果配置不当就会出现下载任意文件
假定网站下有一个index.php,我们进行url构造
因为这个是脚本文件,我们查看源代码和真实代码是不一样的,拿到源代码后我们可以进行进一步的代码分析
网站查看源码看到的代码
源码文件
通过比较可以发现至少我们源码中的php代码没有在前端源码中展示
但事实如果我们使用直连下载的话,图片还是正常下载,但是脚本文件就会正常解析,不会被恶意下载
另外一个就是使用参数下载文件,如果过没有进行过滤限制,我们可以下载网站目录下的任意文件,甚至是其他目录下的文件
如图我们下载到了网站配置文件中的目录文件
如果我们使用的是直连下载,我们去下载其他目录下的文件时会强制将../进行过滤并不会返回下载的界面
会将我们的../进行过滤且返回找不到文件的错误
当我们发现这个漏洞就可以去下载一些已知路径的敏感文件
1.apche mysql nginx等中间件的配置文件
2.windows Linux的默认路径文件
# 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\mysqlluser.MYD # Mysql root
C:\windows\php.in # php配置信息
C:\windows\my.ini # Mysql配置信息
C:\windows\win.ini # windows系统的一个基本系统配置文件
C:\windows\System32\drivers \etc\ hosts # host文件位置
#Linux平台
/root/.ssh/authorized_keys # 服务器公钥
/root/.ssh/id_rsa # SSH私钥
/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历史命令记录文件
/porc/self/cmdline # 当前进程的cmdline参数
/proc/net/arp # arp表,可以获得内网其他机器的地址
/proc/net/route # 路由表信息
/proc/net/tcp and/proc/net/udp # 活动连接的信息
/proc/net/fib_trie # 路由缓存
/proc/version # 内核版本
1.过滤特殊字符.点,使用户在URL中不能穿越目录
2.正则严格判断用户输入参数的格式
3.中间件做好配置
4.文件路径保存于数据库中,通过url?id=123的方式下载文件
如有错误,请及时指出,感谢