目录
1.任意文件上传
1.漏洞产生的原因
1.Web应用程序在处理用户上传的文件操作时,如果用户上传文件的路径、文件名、扩展名成为用户可控数据,就会导致直接上传脚本木马到web服务器上,直接控制web服务器。
2.文件上传时检查不严。
没有进行文件格式检查。
在客户端进行了格式检查 – 很容易绕过
一些应用虽然在服务器端进行了不严格的黑/白名单检查
忽略大小写,将.php改为.Php即可绕过检查
忽略了%00截断符, xxx.php%00.jpg保存时变成xxx.php
只对文件类型(Content-Type)进行检查
3.文件上传后修改文件名时处理不当 - 允许用户修改文件名后缀
2.服务端语言对上传文件类型限制方法
1.对文件类型进行限制(Content-Type)
此类设置,很容易被绕过。直接使用burpsuite等软件更改为允许的类型
2.对文件名后缀进行限制(黑名单,白名单)
可能使用%00等截断方式绕过
使用大小写方式绕过黑名单
3.危害
1.上传任意文件,可能会造成
文件是一个webshell,可以任意执行系统命令
与后台数据库链接,任意执行数据库命令
把本服务器当作跳板,访问局域网内任意服务器
2.任意文件上传漏洞可能会让用户完全控制本机,直接获取登陆权限。
4.检测方法
1.检测代码
A检测点:
检测所有可以上传漏洞的页面
B检测方法:
是使用什么方式来限制文件类型
后缀名
Content-Type
是否对文件名进行重命名
是否允许用户重命名文件名
2.检测功能
A检测点:
检测所有可以上传漏洞的页面
B上传检测方法:
尝试上传多后缀文件,并查看时候能被截断
a.php.jpg
尝试上传文件,与Content-Type不符
尝试更改文件名
C检测方法
是否能执行之前上传漏洞里的代码
3.防御方法
A文件上传的目录设置为不可执行
B判断文件类型
不仅仅是Content-Type 来进行判断,也需要对后缀名进行判断
使用白名单策略
对于图片处理,使用resize(或类似)函数来破坏源代码
C使用随机数来存储文件
防止.php.jpg等多后缀引起的漏洞
D单独设置文件服务器的域名
这个服务器,不能运行任何动态网页
只能静态访问HTML、图片等
2.任意文件下载
1.概念
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞
下载服务器任意文件,如脚本代码、服务及系统配置文件等可用得到的代码进一步代码审计,得到更多可利用漏洞
2.通过文件下载漏洞读取服务端文件的方法
查找漏洞点:
http://.../dvwa/vulnerabilities/fi/?page=file3.php
把文件更改为要查看的文件
http://.../dvwa/vulnerabilities/fi/?page=/etc/passwd
返回:
3.如何查找任意文件下载漏洞
1.查找传入文件名的参数
导入文件等参数,要是直接输入文件名,就有可能有注入点
注意如下几个参数名:
RealPath,FilePath,filepath,Path,path,inputFile,url,urls,Lang,dis,data,readfile, filep,src,menu,META-INF,WEB-INF
2.代码中如何查找漏洞:
PHP为例,有如下等代码,就有可能存在任意文件下载漏洞
readfile
fopen
file_get_contents
4.敏感文件路径
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配置信息
Linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd /etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history /proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
5.修复文件下载漏洞的方法
访问控制漏洞PHP为例:
过滤.(点),使用户在url中不能回溯上级目录
使用正则表达式,严格判断用户输入参数的格式
php.ini配置open_basedir限定文件访问范围