【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法

【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法

文件上传

文件上传中经常遇到白名单,在初期的测试中,一般直接测一下,发现是白名单,然后就放弃了,其实这里还是可以尝试绕过的。
众所周知,白名单限定死了文件名的后缀

1 前台有地方可以直接改后缀
2 不改后缀找别的漏洞结合利用
3 根据限制上传点找到了非限制上传点上传shell

比较少见的数组绕过 

看一下这个上传的包
这里存在两个文件名图片[1]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

一个是filename
一个是save_name

那到底是哪个呢

这个可以通过黑盒的方法来测

图片[2]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

证实是通过save_name来控制文件的后缀的

图片[3]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

后台是直接获取的post的save_name的value

这里用的是黑名单,只是个引子,为了说明后台获取文件名是怎么写的

图片[4]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

像这种写法,就是优先级写法
如果save_name有值,那么就用save_name的,不然就用本身的文件名

图片[5]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

这种写法里,save_name如果没有,那么才用filename作为文件的后缀名

图片[6]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

如果有,就是以save_name的值来进行命名图片[7]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

这个后台是用的白名单,这里如果不做代码审计是无法绕过的,纯黑盒猜,基本不可能。
这里触发漏洞的点是后台取文件名后缀的部分

图片[8]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

因此这里虽然白名单但是并非没有办法绕过,因为上面的逻辑已经写了,是数组,就不必走那段explode逻辑,因此这里可以直接构造一个数组来进行绕过,然后我们看到保存
文件名的方式图片[9]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

图片[10]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

就是用的就是file数组本身的文件名和后缀因此构造包图片[11]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan发现后缀依旧为jpg,这里可以尝试截断,但是只限于低版本。
如果版本没有那么低,可以尝试另一种方法,就是构造特殊数组

图片[12]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

其中$file[count($file)-1]是截取最后的后缀,用普通的数组怎么绕都是绕不过去的
这里构造一个数组
$a = {1.php,NULL,jpg}
即可解决这个问题
因为NULL是不算存在值的,那么这里这里$file[count($file)-1] = $file[2-1] = $file[1] = NULL
因此最后拼接到filename的后缀也就是NUL

图片[13]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

可以看到最后文件名为upload-20.php.
最后那个.在windows中会被自动去除

图片[14]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

成功getshell

图片[15]-【红队笔记】文件上传1.3——关于文件上传白名单绕过的方法-Trojan

最终的文件名

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
自古评论出人才是你吗?
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容