实战
又是我们我们常用的登陆点
登录页面的渗透规则
爆破类:用户名爆破,密码爆破,目录(api文件和js文件)爆破,如果目录爆破403看看是否可以绕过,端口爆破,长时间4位数验证码爆破
框架漏洞
前端代码审查,js文件爬取查找接口和敏感参数,注释中有没有敏感信息
OWASP漏洞探测
如果可以的话,可以创建两个用户进行测试,任意密码重置和前端js验证,越权,逻辑漏洞这些
如果上面都没有可以尝试进行同向渗透,比如fofa的fid功能,扫描同样模板的弱口令进入后台,找未授权接口
前端代码
日常查看代码找接口
发现有几个html,而且都是管理类的
点进去,有的直接已经404了
但是最后一个用户管理系统,可以登录进去
并且我们发现还可以查看用户数据
但是当查看其他数据的时候,会出现网络数据异常状况
猜测有未授权
后在其他功能点找到了文件上传功能的按钮
这里看到上面没有验证就可以看到用户数据,认为文件上传也没有做验证
但我们上传的时候,会出现网络数据异常的状况
这里通过全局搜索定位到这里
猜测文件上传这里存在检验
所以重新回到我们获取用户名的地方
这里有两个思路,第一个是把所有用户名全都爬取下来,用burp使用Cluster bomb进行爆破
另外一个思路就是,这个地方存在添加用户按钮
很幸运的是,这个地方也没有做检验,因为跟能查看到用户数据的属于同一个页面
登录进去以后,发现并不会报网路数据的错误
而且上传接口是前端检验,所以我们只需要把pdf改成执行脚本即可
这里成功getshell
产生原因
- 寻找真实IP
- 利用同网段
因为流量是局域网内可以实现绕过 阿里云曾经不会封阿里云的流量,不知道阿里云是否还可以
上传请求数据包
文件上传可修改的地方
- content-disposition
- filename
- content-type
- boundary
- name一般为表单参数值,不能更改
waf如何拦截恶意文件的
- 文件名
- 获取Request Header里面的content-type值中获取boundary
- 根据boundary解析POST数据,获取文件名
- 判断文件名是否在黑白名单里
- 文件内容
- 文件目录权限
操作content-disposition头
多个分号多个等号
变换form-data
操作boundary
字段顺序颠倒
交换name和filename顺序,content-Disposition和Content-Type顺序,交换不同boundary内容顺序
操作后缀名
filename字段和后缀名换行
POST请求头的值(不是请求头)是可以换行的,但是中间不得有空行,若waf匹配到换行就截至,则可以绕过
大小写双写绕过
后缀名大小写
$file_ext = strtolower($file_ext); //转换为小写
没有全部转换为小写
name content-disposition filename大小写
双写
当我们上传php后缀的时候,发现后缀没有了
windows服务器特性
后缀名加空格
$file_ext = trim($file_ext); //首尾去空
因为windows对后缀名自动去除空格
发现没有对后缀名加以空格
后缀名加点绕过
利用windows会自动删除点的特性
$file_name = deldot($file_name);//删除文件名末尾的点
发现并没有删除末尾的点
后缀名加::$DATA
名称后缀为.php::$data,但是由于Windows的特性在磁盘中会忽略::$data并将文件新建
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
发现并没有去除::$DATA
php服务器特性
后缀名添加%00截断绕过白名单
php.ini 中 magic_quotes_gpc=off php版本小于5.3.4
小技巧
通过上传一个aaa.asd一个无危害的后缀名 来判断是黑名单还是白名单:
上传特殊可解析的后缀
专注于黑名单
可以直接配合burp fuzz
利用漏洞
配合解析漏洞
入IIS,Nginx,Apache
如果目标是Apache的话可以尝试上传.htaccess文件
apache服务器的一个配置文件
发现黑名单并没有过滤.htaccess
利用文件包含漏洞包含图片马
资源限制角度绕过waf-垃圾数据和延迟
body垃圾数据
如果http请求POST boby太大,检测所有内容,waf集群消耗太大的cpu,内存资源 因此可以利用垃圾数据填充
延迟分块传输
filename和name之间添加垃圾数据
参数污染
请求中包含2个参数名相同的参数typeid,第一个是正常参数的值正常,第二个参数才是payload。如果WAF解析参数使用第一个值,没检查第二个值,将导致绕过。
Content-Disposition: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=”BBBBBBBBB”;name=myfile”; filename=”1.php” 因为waf对Content-Disposition字段的长度验证不是很准确
多写未覆盖
content-Disposition字段
在协议中,一个文件上传块存在多个Content-Disposition,将以最后一个Content-Disposition的filename值作为上传的文件名。许多WAF解析到第一个Content-Disposition就认为协议解析完毕,获得上传的文件名,从而导致被绕过
waf解析的是pho,php解析的是”sp.php”
多写filename字段
在一个Content-Disposition 中,存在多个filename ,协议解析应该使用最后的filename值作为文件名。如果WAF解析到filename=”p3.txt”认为解析到文件名,结束解析,将导致被绕过。因为后端容器解析到的文件名是t3.jsp。 Content-Disposition: form-data;name=”myfile”; filename=”p3.txt”;filename=”t3.jsp” 对于所有file检测时候,可以尝试去掉前面的值 Content-Disposition: form-data;name=”myfile”; filename=; filename=”t3.jsp”
多写文件内容
multipart协议中,一个POST请求可以同时上传多个文件。许多WAF只检查第一个上传文件,没有检查上传的所有文件,而实际后端容器会解析所有上传的文件名,攻击者只需把paylaod放在后面的文件PART,即可绕过。
多写boundary边界
协议层面绕过waf
如果waf的防御策略根本没有检测payload,便可绕过 利用waf解析协议问题,使payload被认为不是请求的http请求内容
- 协议未覆盖绕过WAF
- Content-Type: multipart/form-data;
- Content-Type: image/jpg;
解析不一致绕过
主要是利用waf不能解析,而后端解析成功
Content-Disposition: form-data;name=myfile”; filename=t3.jsp” 去掉form-data,for-data是内容描述的意思,来自表单的数据,即使不写,apache也接受 Content-Disposition: name=myfile”; filename=t3.jsp”
multipart协议中,文件名的形式为“filename=”abc.php””。但是Tomcat、PHP等容器解析协议时会做一些兼容,能正确解析 ”filename=”abc.php”、”filename=abc.php”、 ”filename=’abc.php’”。而WAF只按照协议标准去解析,无法解析文件名,但是后端容器能正确获得文件名,从而导致被绕过。场景的绕过形式:
- Content-Disposition: form-data; name=”file”; filename=abc.php
- Content-Disposition: form-data; name=”file”; filename=”abc.php
- Content-Disposition: form-data; name=”file”; filename=’abc.php’
前端绕过
木马内容被查杀
all in all
1.云waf寻找真实ip或者尝试同局域网渗透
2.填充垃圾字符
3.对Content-Type和Content-Disposition字段进行操作
4.对filename字段进行操作
5.对后缀名进行操作
6.前端绕过
7.利用multipart协议特性,可以多文件上传
8.配合解析漏洞
9.测试是否是木马内容被查杀了