文件上传
举例:
这里讲一个很有名的,千里之堤,溃于蚁穴,警示我们要注重细节,一只蚂蚁也能毁了堤坝,我们就是要将不起眼的蚂蚁送到这个堤坝上,这里堤坝就是网站,蚂蚁就是文件
概念:
Web中的常用功能,将本地文件上传到服务器上
文件上传漏洞,Web运行用户上传恶意代码,并在服务器上运行
文件上传类似代码:upload(“hello.php”),上传对应的是upload的函数,文件就是hello.php,文件就是我们可以控制的,我们要做的就是将我们设计好的文件上传上去
准备:
火狐浏览器
DVWA
FoxyProxy
OWASP ZAP
手工实战
1.进入简单模式
进入File Upload,是文件上传漏洞的主界面,常见的上传图片的功能
2.面对陌生页面第一的反应就是试
网上随便找个图片,命名为test.jpg
3.上传这张图片
4.点了upload后
发现出现了红框里的字,意思是上传成功了
5.上传后的路径
我们研究一下这个路径,与我们的url进行对比
url:
http://localhost/DVWA-master/vulnerabilities/upload/#
上传地址:
../../hackable/uploads/test.jpg succesfully uploaded!
再进行拼接得到了完整的路径
http://localhost/DVWA-master/vulnerabilities/upload/../../hackable/uploads/test.jpg
再将../../做消除操作,得到链接
http://localhost/DVWA-master/hackable/uploads/test.jpg
6.我们再去访问一下这个图片
正常操作告一段落
7.尝试操作不正常的
在本地创建一个phpinfo.php文件,执行后是服务器的信息
8.将我们的phpinfo.php上传至服务器
9.访问看一下这个文件,成功执行,这里就说明存在文件上传漏洞,能够执行并查看文件
10.执行phpinfo只是判断漏洞的存在
上传一句话webshell
创建cmd.php
11.上传后访问文件
12.执行我们的命令
?cmd=phpinfo();
13.我们来查看一下系统命令
?=cmd=system(‘dir’); 运用到php的system函数
查看文件的操作
type命令,反斜杠需要转移的
14.进入中等等级模式
尝试上传cmd.php文件
报错:你上传的不是图片,不允许上传
15.准备代理
首先使用代理,变红表示启用
再加设置
保存
启用代理
而zap的代理默认就是127.0.0.1 8080
16.准备抓包
先上传正常图片的包
上传webshell的包
对比一下
发现文件名的差别,还有文件类型以及文件内容的差别
正常包的内容都是二进制文件
17.我们不断猜测,发现好像是文件类型的地方被服务端限制了
修改文件类型重新发送
成功绕过文件类型限制,后面的利用就跟简单模式一样
查看源代码
18.进入高难度模式
尝试使用修改文件类型的,结果无法上传
19.尝试
我们尝试下上传文件的后缀和文件内容是不是受到限制了
尝试php后缀名和php内容 失败
尝试php后缀名和img内容 失败
尝试img后缀名和php内容 失败
20.最后知道是文件类型和内容一起限制了
我们就做内涵图进行绕过
准备一张图片,和1.txt里面写入<?php phpinfo();?>
在cmd下输入copy 1.jpg/b+1.txt/a 2.jpg
再打开这张图片发现没有任何变化
利用编辑器打开拉到最后可以看到php代码
21.上传
查看这张图片
22.上次笔记4中的文件包含漏洞,高难度的,需要配合文件上传漏洞进行file访问本地的文件
这时候我们就可以两个一起配合使用
前面的乱码就是图片内容
23.使用菜刀
利用webshell上传
再使用菜刀访问webshell即可
24.nginx文件类型错误解析漏洞
phpstudy切换Nginx
进入查看php.ini的配置
确保cgi.fix_pathinfo为1
这样服务端设置存在畸形解析
xxx.xxx/xxx.php
2.jpg后面的路径是/2.php
而/2.php是不存在的,畸形解析了它
查看源代码
最后进入无漏洞模式
我们再上传2.jpg的php内容的文件,上传完再下载下来,被服务端重新生成了图片,有效修复了漏洞
查看源代码
红框中就是重新编码了图片文件
修复
1.文件后缀名的白名单
2.文件类型的匹配
3.文件内容的判断
4.阻止非法文件的执行
在不可能模式中
将文件重命名
将文件压缩重写生成
存储目录执行权限
存储目录与Web分离