文件上传漏洞
实验准备
安装JDK环境
在系统变量下新建变量JAVA_HOME 变量值指向JDK安装的文件夹。
在系统变量下新建变量CLASSPATH 变量值输入:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
选中Path 点击编辑,Windows 7系统, 则直接在末尾添加
测试安装成功
Low等级
查看源码
basename(path,suffix)
函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
如果上传成功,则会提示 路径+succesfully uploaded! 如果上传失败,则会提示 Your image was not uploaded。
上传冰蝎(belinder)的webshell, server文件夹中的文件:shell.php
启动冰蝎,连接木马webshell
配置冰蝎,“新增”
双击刚才新增的记录,连接webshell,链接成功后的界面
可进行各种攻击
Medium等级
查看源码
可以看到,服务器对上传文件的大小和类型做了限制。只允许上传小于 100000 字节并且文件type类型是image/jpeg或 image/png 的。
方法一:抓包修改文件的type
在phpstudy的服务器中,将原来上传的shell.php,删除
在kali中上传冰蝎(belinder)的webshell,这里显示文件类型错误提示
配置kali中的火狐代理,通过burpsuite抓包(具体过程略),默认type类型是application/octer-stream
将其类型改为 image/jpeg ,然后send上传,可以看到,已经上传成功
在物理机,利用冰蝎访问shell.php
方法二:00截断
00截断方法一
在phpstudy的服务器中,将原来上传的shell.php,删除
在kali中上传冰蝎(belinder)中将shell.php, 复制,并改名为shell.php.jpg
在kali中上传冰蝎(belinder)的webshell, server文件夹中的文件:shell.php.jpg,这里显示文件上传成功
配置kali中的火狐代理,通过burpsuite截获该数据包,并转发到repeater
查看16进制文件名shell.php.jpg,通过将”.”,改为00,将文件名改为:shell.php jpg , 语法运行结果为: shell.php,并上传到web网站
将2e改为 00
然后再查看,可以看到文件名已经变了
点击“send”提交数据包,response显示文件提交成功
可以到物理机的phpstudy服务器查看webshell,已经提交成功
在物理机,利用冰蝎访问shell.php
00截断方法二:将文件名改为 1.php%00.jpg
将原来上传的shell.php,删除
将shell.php,复制,并命名为“shell.php%00.jpg
上传该文件,显示成功上传
配置kali中的火狐代理,通过burpsuite截获该数据包,并转发到repeater
然后选中 %00 ,然后进行URL-decode。可以看到,文件名已经变了
点击 send ,可以看到已经上传成功了
可以到物理机的phpstudy服务器查看webshell,已经提交成功
在物理机,利用冰蝎访问shell.php