文章来源:先知社区(pureqh)
原文地址:https://xz.aliyun.com/t/10459
0x00:前言
0x01:后缀绕过
失败
失败
去掉引号
失败
多个Content-Disposition字段
失败
畸形协议
失败
boundary前加减空格
失败,而且操作这边服务器会不识别上传,导致正常文件传不上去
删除Content-Type: image/jpeg
失败
溢出文件名
失败,而且这里也有限制,太长也会导致正常上传失效。
Accept-Encoding:
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
失败 似乎waf拦截的就是 Transfer-Encoding: chunked ,但是去掉chunked会请求异常
柳暗花明
后面看了一眼服务器 是windows的,尝试用windows文件命名规范来绕过,
但是上传的时候我们可以构造,尝试使用斜杠绕过
结果有点出乎意料,最后到服务器的居然是.jpg,正反斜杠都这样
访问一下看看是否存在www.php
文件确实传上去了,可是问题又来了,没写入内容…
0x02:内容绕过
但是 也被waf加入规则了
但是问题又来了 文件名咋整,www.php会被拦截,加个冒号又会将文件置空,似乎陷入了死循环,一顿瞎操作后,发现这样居然写进去了,虽然也不知道为什么,可能是什么奇奇怪怪的正则机制?
既然能写文件了,那我本来以为就简简单单了,没想到噩梦才是刚刚开始
首先正常的变量他就过不去,然后<?php 标签和某些场景混合时也过不去,成对的括号它也拦截,总之就是变态
所以才有了上面那个奇怪的马
少个闭合就炸:
但是末尾的两个标签也不能去掉,是用来混淆的,去掉直接waf都过不去
真的执行不了吗?
$a =<<< aa
assasssasssasssasssasssasssasssasssasssasssassss
aa;
这种赋值手法是php的一种特性,用于解决字符串中既有单引号又有双引号这种特殊情况,aa名称没意义,起什么都可以,在某些php版本中,末尾的aa后不能加其他语句,否则会报错。
因为会报错,所以waf不会拦截,所以在aa;后是可以添加php代码的
好巧不巧,这服务器可以执行
既然能执行phpinfo,那system()肯定也行
传完后又转起来了
这里又一个坑,因为system中可以用双引号也可以不用,用双引号的时候一般是类似 ls -l 这种有空格的情况,但是whoami这种的是不需要引号的,但是这里访问一直转明显是语法错误,那我加上就是了。
属实是天坑命令执行没问题了,尝试写一句话, 果不其然被拦截了 尝试加点注释
没问题过去了,访问一下
又转起来了
本地试了一下,发现eval这句不能在aa;后面,又是语法错误
既然如此,那我只能放大招了,那就是fopen大法,也就是通过php脚本文件向服务器写新文件,达到绕过流量层waf检测。
先写个txt试试水,所有字符能放开的最好直接用注释分开,
访问一下www.php
没问题,说明确实执行了我们的代码。
那既然如此就好办多了,直接传个一句话
可惜,明文传输直接挂,流量还得过。
0x03:流量绕过
流量绕过就比较简单了,多次编码即可,这里上传了一个三次base64解密的马
但是蚁剑编码器出现了问题,可能是多次编码导致不知道哪里出了问题,直接上传冰蝎(这里需要把冰蝎分两段传,用fopen的a参数拼接脚本)
over关注公众号回复“1024”可免费获取500G的网络安全的视频和教程,“SRC”刷SRC的一些技巧总结的PDF,“0901”9月1日前HACK学习呀公众号所有文章打包。
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读:
点赞,转发,在看
欢 迎 私 下 骚 扰