目录
文件上传漏洞是wb安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒。恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。本文仅关联相关安全问题无其他导向
程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js代码进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如asp、php、aspx、php3、php5等文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。
客户端绕过、服务端绕过
3.1环境
upload-labs靶场+phpStudy小皮
GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs小皮面板(phpstudy) - 让天下没有难配的服务器环境!phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境,支持Windows与Linux系统,支持WEB面板操作管理,一键网站开发环境搭建配置,另经典版本phpStudy2016/2018/JspStudy环境套件同步更新中,欢迎网站开发者或运维下载使用!https://www.xp.cn/
3.1.1函数介绍
trim()作用:从一个字符串的两端删除空白字符deldot()作用:从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止strrchr()作用:查找字符串在另一个字符串中最后一次出现strtolower()作用:转换大小写str_ireplace()作用:字符串替换操作,不区分大小写
https://www.jb51.net/article/239371.htmhttps://www.jb51.net/article/239371.htm
3.2过程
3.2.1客户端绕过
原理
由于程序猿只在前端通过js代码进行后缀检验,正是他的粗心导致了可利用的漏洞
方法
(1)停用JavaScript(适用于upload-labs靶场的第一关)ctrl shift+i-->设置-->偏好设置-->停用Javascript
总结
文件上传漏洞中如果是出现前端js限制这种情况,那么绕过方法非常简单就是停用浏览器的JavaScript,这种前端黑名单的限制方法是不应该出现的,更加严谨的是需要前端后端都需要进行限制,upload-labs的第二关就是对后端也进行了限制
3.2.2服务端绕过
原理
通过后端限制的缺陷来进行绕过,一般都是在网页上写一段javascript脚本,校验上传文件的后缀名是否合法,有白名单和黑名单两种形式,区别就是,黑名单明确了不能上传的文件格式,白名单则明确了可以上传的文件格式
黑名单检查后缀
方法
(2)使用抓包工具burp修改包数据(适用于upload-labs靶场的第一、二关)创建一句话-->修改后缀满足“.jpg|.png|.gif”(绕过前端限制)-->设置浏览器代理(burp代理)-->通过burp抓包然后修改上传文件后缀然后放行
(3)通过大小写的方法绕过(适用于upload-labs靶场的第五关)PHP、Aspx等
(4)空格绕过(upload-labs靶场第六关)后缀使用空格技巧通过,绕过原因为后端并没有过滤空格,这里前提也是在Windows下利用它的特性会去除文件名空格
(5)使用点绕过(upload-labs第七关)+burp抓包绕过由于没有过滤点,我们可以通过后缀加点的方法绕过,这里是依据Windows系统自动去除上传文件的点
(6)Windows数据流特性,完整的数据后面是含有::$DATA的而这个::$DATA就称为数据流,只不过在文件的后缀中不会显示出来,所以利用这个特性我们就可以通过upload-labs靶场的第八关
(7)路径拼接绕过(upload-labs靶场第九关)第九关虽然限制的看似没有问题但是恰恰问题就出现在它的限制顺序中,我们考虑如果我们按照它的限制顺序让它把过滤的都过滤掉只剩下我们需要上传的就可以了
(8)双写绕过(upload-labs靶场第十关)通过burp抓包+双写后缀来绕过
(9)php后缀特性绕过(upload-labs靶场第三关)php2、php3、php5、phtml等,一般php配置文件中不会设置这样的特性,所以不会生效
(10)利用.htaccess配置+图片马绕过(upload-labs靶场第四关)利用它的伪静态特性,首先在.htaccess配置文件中写入命令让传入目标文件下的文件都用php执行,然后我们通过cmd合成一个图片马传入目标文件目录下,然后通过.htaccess文件的特性来使用php执行该图片马
编写.htaccess配置文件通过vscode进行修改内容如下,并将它传入目标路径下
SetHandler application/x-httpd-php
在cmd中通过以下命令生成图片马,test.php中的内容为我们写入的一句话木马
copy aa.png/b + test.php/a image.png
白名单检查后缀
方法
(1)MIME类型绕过服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法burp抓包修改content-Type实现绕过
(2)00截断漏洞&get型(出现于php5.2版本漏洞)(upload-labs第十一关)使用burp抓包添加%00然后修改php后缀名的方式绕过
00截断原理:\0截断了后面的执行语句让其默认已经执行完成了,所以导致恶意文件上传成功
(3)00截断漏洞&post型(upload-labs第十二关)get传参首先在url要解码所以你就需要提前将\0进行编码成%00,而post传参不需要所以要把这里的%00解码使用burp抓包添加%00先对%00进行url-decode然后修改php后缀名的方式绕过
引入特别的Windows特性实例:U-Mail邮件系统在Windows+php+iis(phpstudy2018)环境下Windows具有以下特性小于号(<)相当于星号(*)大于号(>)相当于问号(?)双引号(")相当于小数点(.)这里我们又知道在操作系统中*星号表示所有的意思,所以利用这个特性我们可以去绕过一些特别的限制eg:当我们将这样的bypass.<<<文件上传到目标路径下相当于匹配了php后缀也就是bypass.php那么就可以达到我们想要的效果
(4)文件包含漏洞绕过(upload-labs靶场第十三、十四、十五关)生成图片马方法和前面的第4关中一样,然后上传验证是否成功
文件包含漏洞形成原因是:用户可以控制你包含的文件
文件包含漏洞解决方法:如果你使用了文件包含函数,那么你就需要将文件包含的文件写死,不要让用户可以去控制(url中输入的文件使包含成功)
(5)特殊的文件包含漏洞绕过(upload-labs靶场第十六关)使用了imagecreatejpeg()函数,通过010editor工具对比上传前后函数变化的位置,将一句话木马写入到未改变的位置来实现绕过
通过010工具对比修改前后的位置差异来插入一句话实现绕过
(6)时间型竞争漏洞(upload-labs第十七关)依据“先上传后删除的特性+burp抓包进行时间竞争绕过
来源地址:https://blog.csdn.net/newlife1441/article/details/126329763