介绍

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

漏洞挖掘

常见情况

主要还是观察数据包,分析每个参数,以及每个参数代表的作用。
常见功能点:读取/下载图片、文件内容;下载附件;预览文档;导出文档;修改、保存文档等
比如:filename=aaa,那么这个aaa可能就是代表的服务器上某个文件,尝试修改它为/etc/passwd等对应系统存在且有权限访问的文件即可。
场景一
常见参数:
如果在测试过程中发现这些参数,可以多留意分析尝试。

  1. &RealPath=
  2. &FilePath=
  3. &file=
  4. &filename=
  5. &Path=
  6. &path=
  7. &inputFile=
  8. &url=
  9. &urls=
  10. &Lang=
  11. &dis=
  12. &data=
  13. &readfile=
  14. &filep=
  15. &src=
  16. &menu=
  17. &META-INF=
  18. &WEB-INF=

配置问题

一些应用或者服务器可能配置存在问题,导致可以直接回溯目录读取任意文件
如:Grafana任意文件读取漏洞(CVE-2021-43798)
场景二

利用思路

  1. 查看常规的配置文件,如ssh数据库ftp
  2. 查看常规的包含敏感信息的文件,如各用户的.bash_history
  3. 查看网站日志access.log,找找网站后台、用户密码、别人的shell等
  4. 查看源代码进行审计

[!TIP|style:flat]

总体来说,就是到处翻文件,找对我们渗透有帮助的文件获取信息即可。

常见文件

Windows

  • Fuzz_dict
  • Windows任意文件下载的三个Tips ``` 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文件

  1. ### Linux
  2. - [Fuzz_dict](%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96.assets/Linux%E8%B7%AF%E5%BE%84.txt)

/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

  1. **locate.db介绍:**<br />Linux locate命令用于查找符合条件的文档。一般情况我们只需要输入`locate your_file_name` 即可查找指定文件:

locate [-d ][—help][—version][范本样式…]

  1. 其会去保存文档和目录名称到数据库内(这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次),然后查找合乎范本样式条件的文档或目录。一般这个数据库的位置在:

/var/lib/mlocate/mlocate.db

  1. - 寻找`mlocate.db`中所有带有`properties`的路径

locate mlocate.db properties

``` image-20220211151425198

绕过手法

  1. 双写:适用于对../置空的情况,如..././config 去掉../的结果为../config
  2. 编码:URL编码、两次URL编码、十六进制编码等;URL编码一般后端会解析一次,其他的编码需要分析服务端是否会进行解析
  3. HPP、分块传输、填充垃圾字符:比较通用

    修复建议

  4. 在配置文件中限制访问的文件目录

  5. 检查用户输入,过滤或转义含有../..\%00.../#等跳转目录或字符终止符、截断字符的输入
  6. 严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等
  7. 白名单限定访问文件的目录、路径、名称
  8. 白名单限定访问文件的后缀如jpg、gif、png、rar、zip、pdf、doc、xls、ppt等