上面讲过了黑名单绕过,白名单就是只允许规定的文件后缀能上传,所以要比黑名单安全
一、%00绕过(.php终止符.jpg)
原理:白名单过滤肯定是从后往前读取后缀,所以读取到.jpg在白名单里就放通了。
但是在调用文件的时候读取文件名是从前往后读,所以看到.php后面的终止符的时候就停止读取了,最终读取的文件名的后缀就是.php
这个%00是什么意思呢?看到有%,那么首先就应该想到的是URL编码。然而%00只针对GET传参,所以POST传参不能识别URL编码
原理就是:一般上传的文件不是直接就送到服务器上的,而是先放到临时目录里,然后再重命名(经常我们看到的网页上的图片都是一串数字,那就是重命名之后的),最后再发往服务器
我们可以看到,最后重命名之后的文件的存储路径是用的GET传参
这个就是上传包
这个时候就用%00截断
来看上传之后的图片地址:虽然最后有数字.jpg但是已经不会执行了
二、0x00截断
其实就是post传参的00截断,因为post传参不走URL栏,所以就不用%00
在这里我们先这样修改,然后再进入hex界面
将a对应的十六进制值修改为00就可以了
三、图片马绕过
利用cmd命令:copy 123.jpg/b + aaa.php 666.jpg 可以将aaa.php中的一句话木马写入123.jpg,生成一张长得一模一样的图片666.jpg,再配合解析漏洞就可以拿到shell
四、二次渲染
二次渲染就是会改变图片的一部分十六进制数值,所以图片马中的马最好写在第三四排,并且最好用.gif
五、条件竞争绕过(针对先上传再检测的web网站)
简述一下理想模型:上传一个1.php的文件,1.php文件里的内容是生成2.php(木马)的语句,在网站删除1.php之前,访问到它,然后就生成了2.php,随后1.php被删除了,但是2.php还存在,因为2.php不是通过上传来的,所以可以绕过检测机制。
梦想照进现实,我们需要抓一个上传包,和一个访问包,然后用BP疯狂的跑就行了
需要用到语句:file_put_contents('2.php','<?php eval($_REQUEST[8])?>');
本文来自博客园,作者:domb,转载请注明原文链接:https://www.cnblogs.com/domb2235/p/15654493.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!