漏洞基础与文件包含漏洞原理级分析
漏洞基础
定义
由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种
安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的
文件(可以使web根目录以外的文件),甚至执行系统命令。
漏洞挖掘
(1)ur编码代替.或者/,如使用%2F代替/
?filename=..%2F..%2F..%2F..%2Fetc%2Fpasswd .+/.../etc/passwd
(2)加入+
?filename=.+./.+./bin/redacted.dll
(3) %00
?filename=%00./file.php
/etc/passwd%00.jpg
2.常出现的功能点:文件读取或者展示图片等对文件读取交互的功能块
3.进行目录跳转时,关注重点:各种历史命令如:出现的密码、路径、配置文件路径、其
他关联IP、日志文件、war包、备份文件路径等等,可进一步读取或利用。
4.对于windows,很多人将重要信息放置在桌面,可以直接对桌面的一些文件名进行
fuzz,比如1.txt、2.txt、密码.txt等
5.利用全路径或者其他地方获取到的路径读取一些关键的程序源码。
读取WEB-INF/web.xml,进一步读取class文件,反编译得到源码。
读取war包,反编译获取源码。
6.读取网站的相关配置信息,数据库配置等
redis:/etc/redis.conf
ssh:/etc/ssh/sshd_config
tomcat:/usr/local/tomcat/conf/tomcat-users.xml
apache:
/etc/httpd/conf/httpd.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
nginx:
/www/nginx/conf/nginx.conf
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/etc/nginx/nginx.conf
7.读取应用日志文件。获取网站后台地址、ap接口、备份、等等敏感信息
apache:
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/httpd/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
nginx:
/var/log/nginx/access.log
/var/log/nginx/error.log
/usr/local/var/log/nginx/access.log
/usr/local/nginx/logs
危害
任意文件读取可以让恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
漏洞防范
1.对../以及相关编码进行过滤(但依旧有方法进行绕过,如%00,+.+.或URL编码等)
2.敏感词防护。对HTTP请求体、HTTP请求参数、HTTP响应体、HTTP请求URL位置双
向检测,并可触发继续、通过、阻断、封禁、重定向等及时响应动作,对敏感信息进行
多选择性、高灵活性的有效防护
3.程序报错内容不要有回显
4,对web服务器目录权限进行最小权限设置
5.对用户输入点进行严格验证
6.注意如PHPinfoO的web敏感信息泄露造成的任意文件读取
文件包含漏洞
关键在于URL地址
由url地址(也是我们抓包的地址)可知通过PHP文件?号链接参数title等于一个PHP文件来获取内容文件,因此title值不同反馈内容不同(不论是windows还是Linux都可以使用../进行目录回退),我们可以使用../让title值等于根目录然后拼接我们需要访问内容路径(如需要访问windows系统的hosts就可以使用多个../确保回退到根目录再拼接绝对路径进行访问)
造成改漏洞的原因是(如下图代码)它包含了header.php这个文件,之后它对title文件title进行传参和校验,同时赋值给了filename,然后就直接把传进来的内容require没有对输入参数进行处理和限制因此造成目录遍历问题
漏洞原理
程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交
目录跳转来遍历服务器上的任意文件。(对用户输入没有进行限制)
常见读取敏感文件路径
1.windows
C:\Windows/System32/drivers/etc/hosts//主机名与IP地址映射文件
C:\boot.ini //查看系统版本
C:\Windows\System32Vinetsrv\MetaBase.xml/IIS配置文件(如MySQL,PHP服务器的详细配置信息)
C:\Program Files\mysqlmy.ini //Mysql配置0..(.ini大多数都是初始化配置文件,因此在进行目录遍历时也可以特意对ini文件进行遍历)
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini//Mysql配置信息
2.Linux
/etc/passwd(可查看当前系统的账户信息)
/etc/shadow(加码后的用户密码的密文格式与账户信息对应,*表示系统用户不能登录,!表示当
前用户被禁用不能登录)
/etc/my.cnf(可查看MySQL的配置文件,端口号,数据库详细路径等)
Vetc/redhat-release(可查看系统版本,得知系统版本后可查找当前系统所存在的漏洞,若对方没
有修复则可进行利用)
/root/.bash_history(可查看对方主机有哪些历史操作)
/proc/mounts(对方系统挂载了哪些设备)
/proc/scheddebug(该文件中可看到当前系统中正在运行的进程,且可获得对应进程的PID,可
通过关掉进程的方式时期失效)
/proc/net/fibtrie(查看对方内网有哪些IP,若要考虑获取到对方的IP地址,则可对其进行横向渗
透)
/proc/self/environ(可查看对方服务器当前所配置的环境变量,可通过环境变量中所配置的路径/文
件去获取到对方服务器的很多信息)
/proc/self/loginuid(对对方服务器用户进行查看)
/etc/httpd/conf/httpd.conf(Apache配置文件)
以上便是进程文件包含,进程漏洞读取,相关的文件或文件内容
流量分析
如流量包中出现: ../ .%00 .. + 等,就很可能会涉及文件包含或漏洞等相关内容
漏洞利用
Lanproxy任意文件读取漏洞复现(CVE-2021-3019)
简介
lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持tcp流量转
发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面等
该漏洞主要是因为这个代理产生了漏洞:Lanproxy1.0通过../绕过读取任意文件。该漏洞允许目录遍历读取//conf/config.properties来获取到内部网连接的凭据。
影响版本
Lanproxy1.0
环境搭建
下载地址:https://www.seafile.com/en/download/
下载后解压到目录/usr/local
mv'home/kd/桌面/proxy-server-0.1.zip'/usr/local/移动文件或改名
cd /usr/local//进入指定目录
unzip-d/usr/local proxy-server-0.1//解压proxy-server到]/usr/local指定目录下
rm-rfproxy-server-0.1.zip//删除压缩包
I!查看就可以发现该文件了及pid了,不想用时可使用q命令将其关掉
进入proxy-server-0.1bin目录,给startup.sh加上执行权限
cd proxy-server-0.1/bin
chmod +x startup.sh
启动服务/startup.sh
通过浏览器访问,http://your-ip:8090(就会出现登录页面)
漏洞复现
在登录页面,使用Burp抓包,并发送到Repeater
在url构造以下链接读取配置文件/./conf/config.properties,通过构造payload抓包之后右侧有回显
就说明我们已经成功读取到了命令
修改payload读取敏感文件…./etc/passwd
修复建议
更新补丁包