Web安全基础学习:任意文件下载漏洞

理论基础

  • 任意文件下载漏洞介绍

    一些网站由于业务需要,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,攻击者就能够通过回溯符../或绝对路径跳转到任意目录查看或下载任意的文件;这可能是代码源文件,敏感配置文件等等,在特定的场景下,还可能造成SSRF漏洞。

  • 漏洞成因
    1. 由于没有对用户输入的文件名进行过滤,而造成用户输入的文件名可以通过…/实现路径穿越来访问其他目录下的文件并下载。
    2. 一些应用或者服务器可能配置存在问题,导致可以直接回溯目录读取任意文件。
    3. 通过将非法路径文件写入数据库再调用进行二次利用,形似二次注入。
  • 常见攻击点(测试点)

    功能上:读取/下载图片、文件内容;下载附件;预览文档;导出文档;修改、保存文档等。

    路径上:download.xxx?xxx=down.xxx?xxx=getfile.xxx?xxx=data.php?xxx=等。

    参数上:RealPath=FilePath=file=filename=Path=path=getFile=url=urls=Lang=dis=data=readfile=filep=src=menu=META-INF=&WEB-INF=等。

  • 利用思路
    1. 查看常规的配置文件,如ssh数据库ftp
    2. 查看常规的包含敏感信息的文件,如各用户的.bash_history
    3. 查看网站日志access.log,找找网站后台、用户密码、别人的shell等
    4. 查看源代码进行审计
  • 常见绕过方式
    1. 双写:适用于对../置空的情况,如..././config 去掉../的结果为../config
    2. 编码:URL编码、两次URL编码、十六进制编码等;URL编码一般后端会解析一次,其他的编码需要分析服务端是否会进行解析。
    3. 路径穿越+截断:当代码中固定文件后缀名时,可以使用\0字符来截断后缀名。
    4. HPP、分块传输、填充垃圾字符等。
  • 任意文件下载漏洞防御
    1. 在配置文件中限制访问的文件目录。
    2. 检查用户输入,过滤或转义含有../..\%00.../#等跳转目录或字符终止符、截断字符的输入。
    3. 严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等。
    4. 白名单限定访问文件的目录、路径、名称。
    5. 白名单限定访问文件的后缀如jpg、gif、png、rar、zip、pdf、doc、xls、ppt等。

实践学习

漏洞环境以Pilot靶场为例:下载地址与部署教程

  1. 进入漏洞页面,抓包并下载任意文件:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 发现参数file传入了文件名,尝试穿越目录下载任意文件:

    l1-2

附录:常见攻击路径

  • WINDOWS

    C:\windows\win.ini //可以用来判断是否为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\mysql\user.MYD //Mysql root
    C:\Windows\php.ini //php 配置信息
    C:\Windows\my.ini //Mysql 配置信息
    
    # 需要管理员权限
    %ProgramData%\Microsoft\Search\Data\Applications\Windows\Windows.edb
    %ProgramData%\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex 目录下文件名类似SystemIndex.[数字序号].gthr
    
    %systemroot%\System32\winevt\Logs目录下的evtx日志文件,名字固定如下
    Application.evtx
    ConnectionInfo.evtx
    Error.evtx
    HardwareEvents.evtx
    Internet Explorer.evtx
    Key Management Service.evtx
    Media Center.evtx
    Microsoft-Windows-API-Tracing%4Operational.evtx
    Microsoft-Windows-AppID%4Operational.evtx
    Microsoft-Windows-Application Server-Applications%4Admin.evtx
    Microsoft-Windows-Application Server-Applications%4Operational.evtx
    Microsoft-Windows-Application-Experience%4Problem-Steps-Recorder.evtx
    Microsoft-Windows-Application-Experience%4Program-Compatibility-Assistant.evtx
    Microsoft-Windows-Application-Experience%4Program-Compatibility-Troubleshooter.evtx
    Microsoft-Windows-Application-Experience%4Program-Inventory.evtx
    Microsoft-Windows-Application-Experience%4Program-Telemetry.evtx
    .........省略
    
    # 不需要管理员权限
    %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt # 类似.bash_history
    %userprofile%\appdata\local\iconcache.db # 类似locate的db文件
    
  • LINUX

    /etc/passwd
    /etc/shadow
    /etc/hosts
    /var/lib/mlocate/mlocate.db // locate命令的索引数据库文件,每天更新一次,大宝贝
    /root/.bash_history //root 的 bash 历史记录
    /root/.mysql_history //mysql 的 bash 历史记录
    /root/.wget-hsts
    /opt/nginx/conf/nginx.conf //nginx 的配置文件
    /var/www/html/index.html
    /etc/redis.conf
    /etc/my.cnf
    /etc/httpd/conf/httpd.conf //httpd 的配置文件
    /proc/self/fd/fd[0-9]*(文件标识符)
    /proc/mounts
    /porc/config.gz
    /proc/sched_debug // 提供 cpu 上正在运行的进程信息,可以获得进程的 pid 号,可以配合后面需要 pid的利用
    /proc/mounts // 挂载的文件系统列表
    /proc/net/arp //arp 表,可以获得内网其他机器的地址
    /proc/net/route //路由表信息
    /proc/net/tcp and /proc/net/udp // 活动连接的信息
    /proc/net/fib_trie // 路由缓存
    /proc/version // 内核版本
    /proc/[PID]/cmdline // 可能包含有用的路径信息
    /proc/[PID]/environ // 程序运行的环境变量信息,可以用来包含 getshell
    /proc/[PID]/cwd // 当前进程的工作目录
    /proc/[PID]/fd/[#] // 访问 file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log
    其会去保存文档和目录名称到数据库内(这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次),然后查找合乎范本样式条件的文档或目录。一般这个数据库的位置在:
    
    # ssh相关
    /root/.ssh/id_rsa
    /root/.ssh/id_rsa.pub
    /root/.ssh/authorized_keys
    /root/.ssh/known_hosts //记录每个访问计算机用户的公钥
    /etc/ssh/sshd_config
    /var/log/secure
    /etc/sysconfig/network-scripts/ifcfg-eth0
    /etc/syscomfig/network-scripts/ifcfg-eth1
    
  • 其他服务路径

    /NetServer\bin\stable\apache\php.ini
    /NetServer\bin\stable\apache\php.ini%00
    /PHP\php.ini
    /PHP\php.ini%00
    /Program Files\Apache Group\Apache2\conf\httpd.conf
    /Program Files\Apache Group\Apache2\conf\httpd.conf%00
    /Program Files\Apache Group\Apache\conf\httpd.conf
    /Program Files\Apache Group\Apache\conf\httpd.conf%00
    /Program Files\Apache Group\Apache\logs\access.log
    /Program Files\Apache Group\Apache\logs\access.log%00
    /Program Files\Apache Group\Apache\logs\error.log
    /Program Files\Apache Group\Apache\logs\error.log%00
    /Program Files\xampp\apache\conf\httpd.conf
    /Program Files\xampp\apache\conf\httpd.conf%00
    /Volumes/Macintosh_HD1/opt/apache/conf/httpd.conf
    /Volumes/Macintosh_HD1/opt/apache/conf/httpd.conf%00
    /Volumes/Macintosh_HD1/opt/apache2/conf/httpd.conf
    /Volumes/Macintosh_HD1/opt/apache2/conf/httpd.conf%00
    /Volumes/Macintosh_HD1/opt/httpd/conf/httpd.conf
    /Volumes/Macintosh_HD1/opt/httpd/conf/httpd.conf%00
    /Volumes/Macintosh_HD1/usr/local/php/httpd.conf.php
    /Volumes/Macintosh_HD1/usr/local/php/httpd.conf.php%00
    /Volumes/Macintosh_HD1/usr/local/php/lib/php.ini
    /Volumes/Macintosh_HD1/usr/local/php/lib/php.ini%00
    /Volumes/Macintosh_HD1/usr/local/php4/httpd.conf.php
    /Volumes/Macintosh_HD1/usr/local/php4/httpd.conf.php%00
    /Volumes/Macintosh_HD1/usr/local/php5/httpd.conf.php
    /Volumes/Macintosh_HD1/usr/local/php5/httpd.conf.php%00
    /Volumes/webBackup/opt/apache2/conf/httpd.conf
    /Volumes/webBackup/opt/apache2/conf/httpd.conf%00
    /Volumes/webBackup/private/etc/httpd/httpd.conf
    /Volumes/webBackup/private/etc/httpd/httpd.conf%00
    /Volumes/webBackup/private/etc/httpd/httpd.conf.default
    /Volumes/webBackup/private/etc/httpd/httpd.conf.default%00
    /WINDOWS\php.ini
    /WINDOWS\php.ini%00
    /WINNT\php.ini
    /WINNT\php.ini%00C:\WINDOWS\php.ini
    C:\WINDOWS\win.ini
    C:\WINNT\php.ini
    C:\boot.ini
    \Program Files (x86)\Apache Group\Apache\logs\access.log
    \Program Files (x86)\Apache Group\Apache\logs\error.log
    \Program Files\Apache Group\Apache2\conf\httpd.conf
    \Program Files\Apache Group\Apache\conf\httpd.conf
    \Program Files\Apache Group\Apache\logs\access.log
    \Program Files\Apache Group\Apache\logs\error.log
    \Program Files\xampp\apache\conf\httpd.conf
    \apache2\log\access.log
    \apache2\log\access_log
    \apache2\log\error.log
    \apache2\log\error_log
    \apache2\logs\access.log
    \apache2\logs\access_log
    \apache2\logs\error.log
    \apache2\logs\error_log
    \apache\log\access.log
    \apache\log\access_log
    \apache\log\error.log
    \apache\log\error_log
    \apache\logs\access.log
    \apache\logs\access_log
    \apache\logs\error.log
    \apache\logs\error_log
    \log\access.log
    \log\access_log
    \log\error.log
    \log\error_log
    \log\httpd\access_log
    \log\httpd\error_log
    \logs\access.log
    \logs\access_log
    \logs\error.log
    \logs\error_log
    \logs\httpd\access_log
    \logs\httpd\error_log
    \mysql\bin\my.ini
    \opt\xampp\logs\access.log
    \opt\xampp\logs\access_log
    \opt\xampp\logs\error.log
    \opt\xampp\logs\error_log
    \xampp\FileZillaFTP\FileZilla Server.xml
    \xampp\FileZillaFTP\Logs
    \xampp\FileZillaFTP\Logs\access.log
    \xampp\FileZillaFTP\Logs\error.log
    \xampp\MercuryMail\LOGS\access.log
    \xampp\MercuryMail\LOGS\error.log
    \xampp\MercuryMail\mercury.ini
    \xampp\apache\conf\httpd.conf
    \xampp\apache\logs\access.log
    \xampp\apache\logs\error.log
    \xampp\mysql\data\mysql.err
    \xampp\phpMyAdmin\config.inc
    \xampp\phpMyAdmin\config.inc.php
    \xampp\phpMyAdmin\phpinfo.php
    \xampp\php\php.ini
    \xampp\phpmyadmin\config.inc
    \xampp\phpmyadmin\config.inc.php
    \xampp\phpmyadmin\phpinfo.php
    \xampp\sendmail\sendmail.ini
    \xampp\sendmail\sendmail.log
    \xampp\tomcat\conf\tomcat-users.xml
    \xampp\tomcat\conf\web.xml
    \xampp\webalizer\webalizer.conf
    \xampp\webdav\webdav.txt
    php://input
    
  • 45
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值