0x01 前言

在讲本课的内容之前我们先来了解互联网中的HTTP是什么?
        超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。(百度的)
        HTTP协议的主要特点
        1.支持客户/服务器模式。
        2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
        3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
        4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
        5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

0x02 HTTP协议基础讲解

http请求由三部分组成,分别是:请求行、消息报头、请求正文
        请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

0x03 HTTP请求方法

GET    请求指定的页面信息,并返回实体主体。
HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT     从客户端向服务器传送的数据取代指定的文档的内容。
DELETE      请求服务器删除指定的页面。
CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS     允许客户端查看服务器的性能。TRACE     回显服务器收到的请求,主要用于测试或诊断。

0x04 HTTP请求行区别

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
对应HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
现在用的比较多的是post和get方式,一般情况下,如果不说明请求方式,例如地址栏输入网址请求、
超链接请求等都是get请求,只有在form表单请求时可以设置method方式为post。
get请求方式请求数据显示在url后面,post方式显示在请求体中,空白行下面。
get方式请求数据有限制,最大为1k,而post方式理论上没有限制。
在绕WAF中 GET包 与  POST包在处理上是有区别的,先看GET与POST的区别

Content-Type: 实体报头域用语指明发送给接收者的实体正文的媒体类型
现在市场上大部分的WAF会解析这行 Content-Type 去识别是否是POST注入,因为要防止方法污染。所以我们就可以根据这个特性来设置不同的Content-Type利用尝试绕过WAF

0x05 协议未覆盖绕过WAF

POST 请求常用有2种参数提交方式:
Content-Type: application/x-www-form-urlencoded;
Content-Type: multipart/form-data;
Waf未能覆盖Content-Type: multipart/form-data从而导致被绕过。或者WAF会认为它是文件上传请求,从而只检测文件上传,导致被绕过。如图,下面的WAF就存在被绕过的情况,是典型的协议未覆盖。

0x06 例子一:实战绕过云锁win_3.1.6版注入(针对POST请求)

给拦截了,先来看看这个包的请求

这是我们发送过去的包

我们前面说了大部分的WAF现在会去检测Content-Type 来判断当前执行的操作是什么那么如果我们修改他使用的是其他的报头一定程度上就可能可以绕过WAF

我们可以看到丝毫没有拦截就绕过去了,可见云锁没有对 Content-Type 的检测做好导致了绕过,我们来看看两个包的区别

成功绕过注入出数据了

0x07 例子二:实战绕过360主机卫士2.0.4.6apache版进行注入(针对GET请求)

至于为什么可以绕过我这里猜想了一下:

云锁:        
        我这里猜想的想是因为 云锁在检测的时候判断问题,因为我们知道Content-Type:multipart/form-data; 是用于POST文件上传的,所以云锁检测到这个报文是上传表单的请求,就调用了上传 表单相对应的规则来检测,而忽略了我们在上传表单中一样可以传输POST数组写入恶意代码,所以我们才能注入。

360主机卫士
        360卫士的话,就比较简单了,估计程序猿是使用了惯性思维,在写代码的时候判断我们是POST请求就将重点放在POST数组中进行检测,忘记了我们有可能在传输POST数据的时候,在URL写入恶意代码,导致防护失效

0x08 总结

绕waf一定要思路骚,http协议也一定要了解,了解了http协议在了解WAF 的工作原理,我们必须正视的是,绕waf就是在绕正则,所以正则表达式一定要入门,只有这样你绕waf的时候才能脑补规则,干起活来也才能事半功倍。

哦对了,可能会有人想要我上面的那个工具,我会上传到百度云  : )     
        下载地址:http://pan.baidu.com/s/1c1Fpfhu

转载请获取作者同意在进行转载谢谢  :  )

作者:PHPoop
链接:http://www.jianshu.com/p/06eeb2ed4c9d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/WindSwaysGrass/p/7398482.html

web渗透测试中WAF绕过讲解(二)基于HTTP协议绕过相关推荐

  1. cURL在Web渗透测试中的应用

    1.概述 cURL是一个命令行下用于传输数据的工具,支持多种协议 cURL有如下特性: 1.支持多种协议,包括:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, ...

  2. 渗透测试中waf命令执行的绕过经验技巧

    管道符 ; 顺序执行,命令之间没有逻辑关系 正常顺序执行 && 逻辑与; 当命令1正确执行后,才会执行命令2.否则命令2不会执行 两个命令都会执行 || 逻辑或; 当命令1不正确执行后 ...

  3. Web渗透测试中常见逻辑漏洞解析与实战

    注:以下漏洞示例已由相关厂商修复,切勿非法测试! 0x01 漏洞挖掘 01  注册 注册中最常见的有两个,一个是恶意注册,另一个是账户遍历.一个好的注册界面应该是这样 或者这样的 而不是这样的 要么使 ...

  4. Web渗透测试常规套路

    注:文章首发自合天智汇微信公众平台 0x01:本篇文章旨在给小白白们做一次有关web渗透的科普,其中涉及到的套路.工具可能在如今XX狗.XX盾当道的社会已不再适用,但是其中涉及的思想永远不会过时,其中 ...

  5. Kali Linux Web 渗透测试秘籍 第三章 爬虫和蜘蛛

    第三章 爬虫和蜘蛛 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 渗透测试可以通过多种途径完成,例如黑盒.灰盒和白盒.黑盒测试在测试 ...

  6. 渗透测试流程及方法论讲解(web安全入门04)

    一.渗透测试方法论 1.1 渗透测试(penetration testing,pentest) 是实施安全评估(即审计)的具体手段. 方法论是在制定.实施信息安全审计方案时,需要遵循的规则.惯例和过程 ...

  7. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  8. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...

  9. 【3】web安全入门篇-渗透测试中常用的命令

    1.linux命令 渗透测试中常用的linux命令 上面博客提到的基本都能满足需求 2.cmd命令 常用的cmd命令 cmd命令和linux命令常用的对于web入门的萌新可以看看上面博客,多敲一敲用的 ...

  10. Web渗透测试学习笔记

    文章目录 第一章 信息收集 1.1域名信息 1.1.1whois查询 1.1.2备案信息查询 1.2敏感信息 1.3子域名信息 1.3.1 子域名检测工具 1.3.2搜索引擎枚举 1.3.3第三方聚合 ...

最新文章

  1. Cisco堆叠交换机序号的改变
  2. 20个Pandas数据实战案例,干货多多
  3. 数据改动,更新视图,类似于vue
  4. html json to table,javascript - HTML - Convert json to table - Stack Overflow
  5. 腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里
  6. mysql 查询列表是否关注_点赞功能,用mysql还是redis?
  7. find python3_Python3 rfind()方法
  8. 分享一个自己写的基于TP的关系模型(2)
  9. 铸造行业ERP管理软件的开发
  10. 软件架构设计说明书该怎么写?
  11. 非监督神经网络的wake-sleep算法
  12. 微型计算机可以配置,目前主流微型计算机的配置及选购的调查报告
  13. mysql数据库引擎面试,mysql数据库引擎面试
  14. logback 中文手册
  15. 天宇优配|离岸人民币狂拉逾千点!中概股暴涨!B站涨22%
  16. SpringBoot2.0整合Redis实战
  17. YOLOv5实现火焰和烟雾检测
  18. 光纤熔接之盘纤技巧(首先你得有一把好切割刀)
  19. 红外目标图像中阈值分割方法的比较与研究
  20. 如何输入特殊字符,如英语音标

热门文章

  1. Atitit 减少财政支出之减少通讯支出 解决方案attilax总结
  2. Atitit learn by need 需要的时候学与预先学习知识图谱路线图
  3. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列
  4. paip.为什么使用多线程的原因.
  5. paip.提升用户体验---论文本编辑器的色彩方案
  6. paip.TechExcel DevSuite IIS 应用配置
  7. 芒格:倒过来思考有利于理解事物本质并解决问题
  8. 为什么钉钉里的图片打开得更快了? | 凌云时刻
  9. 喜报!木兰宽松许可证通过OSI认证,成为首个中英双语国际开源许可证!
  10. django使用mysql函数_请问django 可以操作mysql函数么?