实战

image.png
又是我们我们常用的登陆点

登录页面的渗透规则

爆破类用户名爆破,密码爆破,目录(api文件和js文件)爆破,如果目录爆破403看看是否可以绕过,端口爆破,长时间4位数验证码爆破
框架漏洞
前端代码审查,js文件爬取查找接口和敏感参数注释中有没有敏感信息
OWASP漏洞探测
如果可以的话,可以创建两个用户进行测试,任意密码重置和前端js验证,越权,逻辑漏洞这些
如果上面都没有可以尝试进行同向渗透,比如fofa的fid功能,扫描同样模板的弱口令进入后台,找未授权接口

前端代码

日常查看代码找接口
image.png
发现有几个html,而且都是管理类的
点进去,有的直接已经404了
image.png
但是最后一个用户管理系统,可以登录进去
image.png
并且我们发现还可以查看用户数据

但是当查看其他数据的时候,会出现网络数据异常状况
image.png

猜测有未授权
image.png
后在其他功能点找到了文件上传功能的按钮

这里看到上面没有验证就可以看到用户数据,认为文件上传也没有做验证
image.png
但我们上传的时候,会出现网络数据异常的状况

这里通过全局搜索定位到这里
image.png
猜测文件上传这里存在检验

所以重新回到我们获取用户名的地方
实战+文件上传综合bypass - 图9
这里有两个思路,第一个是把所有用户名全都爬取下来,用burp使用Cluster bomb进行爆破

另外一个思路就是,这个地方存在添加用户按钮
image.png
很幸运的是,这个地方也没有做检验,因为跟能查看到用户数据的属于同一个页面

登录进去以后,发现并不会报网路数据的错误

而且上传接口是前端检验,所以我们只需要把pdf改成执行脚本即可

image.png
这里成功getshell

产生原因

  1. 服务器配置不当

    不需要上传页面情况下也可以上传,比如开启http put方法

  2. 一直cms的漏洞,比如开源编辑器文件上传

  3. 本地文件上传限制被绕过,后缀名过滤不严格

    针对于云waf

  • 寻找真实IP
  • 利用同网段

    因为流量是局域网内可以实现绕过 阿里云曾经不会封阿里云的流量,不知道阿里云是否还可以

image.png

上传请求数据包

image.png

文件上传可修改的地方

  • content-disposition
  • filename
  • content-type
  • boundary
  • name一般为表单参数值,不能更改

waf如何拦截恶意文件的

  • 文件名
  1. 获取Request Header里面的content-type值中获取boundary
  2. 根据boundary解析POST数据,获取文件名
  3. 判断文件名是否在黑白名单里
  • 文件内容
  • 文件目录权限

操作content-disposition头

多个分号多个等号

image.png

变换form-data

image.png

操作boundary

image.png

字段顺序颠倒

image.png
交换name和filename顺序,content-Disposition和Content-Type顺序,交换不同boundary内容顺序

操作后缀名

filename字段和后缀名换行

POST请求头的值(不是请求头)是可以换行的,但是中间不得有空行,若waf匹配到换行就截至,则可以绕过

image.png

大小写双写绕过

后缀名大小写

  1. $file_ext = strtolower($file_ext); //转换为小写

image.png
没有全部转换为小写
image.png

name content-disposition filename大小写

image.png

双写

image.png
当我们上传php后缀的时候,发现后缀没有了

可以进行双写绕过
image.png

windows服务器特性

后缀名加空格

  1. $file_ext = trim($file_ext); //首尾去空

因为windows对后缀名自动去除空格
image.png
发现没有对后缀名加以空格
image.png

后缀名加点绕过

利用windows会自动删除点的特性

  1. $file_name = deldot($file_name);//删除文件名末尾的点

image.png
发现并没有删除末尾的点
image.png

后缀名加::$DATA

名称后缀为.php::$data,但是由于Windows的特性在磁盘中会忽略::$data并将文件新建

  1. $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

image.png
发现并没有去除::$DATA
image.png

php服务器特性

后缀名添加%00截断绕过白名单

php.ini 中 magic_quotes_gpc=off php版本小于5.3.4

小技巧

通过上传一个aaa.asd一个无危害的后缀名 来判断是黑名单还是白名单:
image.png

上传特殊可解析的后缀

专注于黑名单

image.png
image.png

image.png
image.png

可以直接配合burp fuzz

利用漏洞

配合解析漏洞

入IIS,Nginx,Apache
如果目标是Apache的话可以尝试上传.htaccess文件

apache服务器的一个配置文件

image.png
image.png
发现黑名单并没有过滤.htaccess
image.png

利用文件包含漏洞包含图片马

image.png


资源限制角度绕过waf-垃圾数据和延迟

body垃圾数据

如果http请求POST boby太大,检测所有内容,waf集群消耗太大的cpu,内存资源 因此可以利用垃圾数据填充

image.png

延迟分块传输

image.png

filename和name之间添加垃圾数据

image.png

参数污染

请求中包含2个参数名相同的参数typeid,第一个是正常参数的值正常,第二个参数才是payload。如果WAF解析参数使用第一个值,没检查第二个值,将导致绕过。

Content-Disposition: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=”BBBBBBBBB”;name=myfile”; filename=”1.php” 因为waf对Content-Disposition字段的长度验证不是很准确

image.png

多写未覆盖

content-Disposition字段

在协议中,一个文件上传块存在多个Content-Disposition,将以最后一个Content-Disposition的filename值作为上传的文件名。许多WAF解析到第一个Content-Disposition就认为协议解析完毕,获得上传的文件名,从而导致被绕过

image.png

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”

image.png

多写文件内容

multipart协议中,一个POST请求可以同时上传多个文件。许多WAF只检查第一个上传文件,没有检查上传的所有文件,而实际后端容器会解析所有上传的文件名,攻击者只需把paylaod放在后面的文件PART,即可绕过。

image.png

多写boundary边界

image.png


协议层面绕过waf

如果waf的防御策略根本没有检测payload,便可绕过 利用waf解析协议问题,使payload被认为不是请求的http请求内容

  • 协议未覆盖绕过WAF
    • Content-Type: multipart/form-data;
    • Content-Type: image/jpg;

image.png
image.png


解析不一致绕过

主要是利用waf不能解析,而后端解析成功

image.png

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’

前端绕过

如果还没有发包就提示后缀名错误,一般都是在前端限制的
image.png

木马内容被查杀

all in all

  1. 1.waf寻找真实ip或者尝试同局域网渗透
  2. 2.填充垃圾字符
  3. 3.Content-TypeContent-Disposition字段进行操作
  4. 4.filename字段进行操作
  5. 5.对后缀名进行操作
  6. 6.前端绕过
  7. 7.利用multipart协议特性,可以多文件上传
  8. 8.配合解析漏洞
  9. 9.测试是否是木马内容被查杀了