《web安全深度剖析》——深入HTTP请求流程

一些名词

B/S架构:浏览器/服务器结构
HTTP:超文本传输协议
HTML:超文本标记语言
URL:统一资源定位符,也称网页地址,是互联网标准的地址。标准格式:协议://服务器IP[:端口]/路径/[?查询]例如:http://www.xxser.com/post/httpxieyi.html

发起HTTP请求

windows中可用crul.exe工具(需用户自行下载)发起请求,通过curl+URL命令就可以简单地发起一个HTTP请求。例如:curl http://www.baidu.com可返回这个页面的HTML数据,加上-I可查看访问URL后服务器返回的HTTP响应头。

HTTP请求与响应

Request请求
Response响应
客户端
服务端

HTTP请求包括三部分

1.请求行(请求方法):由三部分组成,第一部分说明该请求是POST请求,第二部分说明该请求是该域名根目录下的login.php,第三部分说明使用的是HTTP1.1版本。
2.请求头(消息报头):空白行,代表请求头结束。
3.请求正文 :HTTP请求的最后一行,请求正文是可选的,最常出现在POST请求方法中。

HTTP响应包括三部分

1.响应行:HTTP响应的第一行,其中有HTTP版本、状态码、消息“OK”。
2.响应头(消息报头):第二行至末尾的空白行,由服务器向客户端发送。
3响应正文(消息主题):响应报头之后是相应正文,是服务器向客户端发送的HTML数据。

HTTP请求方法

方法应用特点
GET获取请求页面的指定信息(以实体的格式)若请求资源为动态脚本(非HTML),则返回文件是web容器解析后的HTML源代码,而不是源文件。一般都是由开发者内定的参数项目才会接收。
HEAD测试超文本链接的有效性、可访问性和最近的改变除只测试资源是否存在,服务器不能在响应里返回消息主题外,都与GET相同;速度最快。
POST用于向服务器发送大量数据,如上传文件、提交留言等除有请求内容外,都与GET相似。
PUT用于请求服务器把请求中的实体存储在请求资源下若请求资源已经在服务器中存在,则将会用此请求中的数据替换原先的数据;若不存在,则会创建这个资源,且数据位于请求正文。通常情况下关闭,属于危险方法。
DELETE用于请求源服务器删除请求的指定资源客户端可以进行删除文件的操作,通常关闭,属于危险方法。
CONNECT用于能动态切换到隧道的代理HTTP1.1协议规范保留了此方法。
OPTIONS用于请求获得由URI标识的资源在请求/响应的通信过程中可以使用的功能选项客户端可以在采取具体资源请求前决定对该资源采取何种必要措施,或者了解服务器的性能。
WebDAV使应用程序可以直接对Web Sever进行读写,支持文件锁定、解锁、复制、移动,支持文件的版本控制基于HTTP/1.1协议的通信协议。

HTTP状态码

HTTP协议中的状态码由三位数字组成,第一位数字定义了响应的类别,共分为以下5种。

·1xx(100~101):信息提示,表示请求已被成功接收,继续处理。
·2xx(200~206):成功,服务器成功地处理了请求。
·3xx(300~305):重定向,浏览器将重新对新资源发起请求。
·4xx(400~415):客户端错误状态码。
·5xx(500~505):服务器内部错误。

常见状态码:
200:客户端请求成功,是最常见的状态。
302:重定向。
404:请求资源不存在。
400:客户端请求有语法错误,不能被服务器所理解。
401:请求未经授权。
403:服务器收到请求,但拒绝提供服务。
500:服务器内部错误,是最常见的状态。
503:服务器当前不能处理客户端的请求,一段时间后可恢复正常。

HTTP消息(HTTP头)

由请求头、响应头、普通头、实体头四部分组成。
1.请求头:允许客户端向服务器端传递请求的附加信息和客户端自身的信息。常见的HTTP请求头如下:

请求头作用
Host主要用于指定被请求资源的Internet主机号和端口号。
User-Agent允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
Referer包含一个URL,代表当前访问的URL的上一个URL。
Cookie是非常重要的请求头,是一段文本,常用来表示请求者身份等。
Range可以请求实体的部分内容,多线程下载一定会用到。
x-forward-for即XXF头,代表请求端的IP,可以有多个,用逗号隔开。
Accept用于指定客户端接受哪些MIME类型的信息。
Accept-Charset用于指定客户端接受的字符集,若在请求消息中没有设置这个域,默认是任何字符集都可以接收。

2.响应头:是服务器根据请求向客户端发送的HTTP头。常见的HTTP响应头如下:

响应头作用
Server服务器所使用的web服务器名称,通过查看此头,可以探测web服务器名称,建议在服务器端修改此头的信息。
Set-cookie向客户端设置Cookie,通过查看此头,看到服务器向客户端发送的Cookie信息。
Last-Modified告诉浏览器,资源的最后修改时间。
Location告诉浏览器去访问哪个页面,浏览器接受请求后通常会立刻访问Location头所指向的页面,此头通常配合302状态码(重定向)使用。
Refresh告诉浏览器定时刷新浏览器。

3.普通头:普通报头中有少数报头域用于所有的请求和相应信息,但并不用于被传输的实体,只用于传输的消息。例如:

普通头作用
Date表示消息产生的日期和时间。
Connection允许发送指定链接的选项。
cache-Control用于指定缓存指令,缓存指令是单向的且是独立的。

4.实体头
定义了关于实体正文和请求所标识的资源的元信息(也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等)。常见的实体头如下:

实体头作用
Content-Type向接收方指示实体的介质类型。
Content-Encoding被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
Content-Length指明实体正文的长度,以字节方式存储的十进制数字来表示。
Last-Modified指示资源的最后修改日期和时间。

模拟HTTP请求

在cmd中输入telnet www.baidu.com 80后按回车,进入黑屏状态,按“ctrl+]”打开telnet回显,按回车键进入编辑状态,输入GET index.html HTTP/1.1,按回车键,输入HOST:www.baidu.com,再连续按两次回车,提交请求,随后接收服务器返回数据,等待几秒后就可接收到服务器返回的数据,如下图所示。
接收到的响应和数据

HTTP协议与HTTPS的区别

HTTPS协议是以安全为目的的HTTP通道,安全基础是SSL。HTTP与HTTPS的主要区别如下:

·HTTP是超文本传输协议,信息是明文传输;HTTPS是具有安全性的SSL加密传输协议。
·HTTP采用80端口连接;HTTPS采用443端口连接。
·HTTPS协议需要到ca申请证书,免费证书少,需要交费,也有些web容器提供,如TOMCAT;HTTP协议不需要。
·HTTP协议连接相对简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议更安全。

截取HTTP请求

前端JavaScript验证是为了防止用户输入错误,服务器端验证是为了防止恶意攻击。在渗透测试中,经常会进行HTTP请求的截取来发现一些神秘的漏洞。常见的抓包工具如下:
1.Burp Suite Proxy

工具说明
Proxy一个拦截HTTP/S的代理服务器,允许拦截、查看、修改在两个方向上的原始数据包
Spider一个应用智能感应的网络爬虫,能完整地枚举应用程序的内容和功能
Scanner一个高级工具,能自动发现web应用程序的安全漏洞
Intruder一个定制的高度可配置的工具,对web应用程序进行自动化攻击
Repeater一个靠手动操作来补发单独的HTTP请求,并分析应用程序响应的工具
Sequencer一个用来分析不可预知的应用程序会话令牌和重要数据项的随机性的工具
Decoder一个极为方便的解码/编码工具
Comparer通过一些相关的请求和响应得到两项数据的一个可视化的“差异”

例:使用Brup Suite绕过JavaScript验证的步骤:①配置网络代理;②查看拦截信息;③拦截输入信息并修改

2.Fiddler
· web调试工具,可以记录所有的浏览器与服务器之间的通信信息(HTTP和HTTPS),允许设置断点,修改输入/输出数据。
·Fiddler会自动为IE浏览器配置代理信息,用户无需进行其他配置操作,其它浏览器的配置过程与Burp Suite相似。
·Fiddler监听进程的类型主要可以分为:所有类型、web浏览器和非浏览器,用户可根据选择类型对该类型进行监控,也可选择“Hide All”隐藏所有,还可通过任务栏“Any Process”选择指定的进程。
·Fiddler的命令行工具叫做QuickExec,允许用户直接输入命令进行操作。如:cls,清除会话列表;select,选择会话;bup,截取Request。
·Fiddler提供的过滤器可以过滤请求消息、响应消息、状态码等。
·设置断点是Fiddlei最强大的功能之一,设置好断点后,Fiddler会捕捉所有经过的消息,也可任意修改HTTP请求信息,包括Host、Cookie或表单的数据。
·目前,Fiddler支持的编码和解码种类有:Base64、URL、JS、HTML、UTF-7、默认的SAML编码。
·会话编辑器可针对单个URL的会话进行分析。
·Fiddler提供了对外接口,允许任何人开发自己喜欢的插件。测试人员常用的第三方插件有:Intruder21、x5s(能够帮助渗透测试人员快速发现跨站脚本漏洞)、Ammonite(一款web应用程序的安全扫描插件,可有效检测出SQL注射、OS命令行注射、本地文件包含、缓冲区溢出和XSS漏洞)。

3.WinSock Expert
一个用来监视和修改网络发送和接受数据的程序,可列出系统的所有进程,选择指定的进程(除QQ、HTTPS协议)进行监听。

4.一些常见的抓包工具:WireShark、MiniSinffer、Iptool、Sniffer等。

HTTP应用:SEO

SEO即为搜索引擎优化,能让网站的排名更高。排名越高,网站的流量就越多,利益也就越大,因而黑帽SEO通过作弊的手段欺骗搜索引擎。黑帽SEO用web语言进行针对搜索引擎的流量劫持的一般步骤:
①建立劫持搜索引擎库,如以Baidu,Google等域名为关键字。
②获取HTTP Referer头。
③遍历搜索引擎库,并于Referer的内容相比较,若二者相同或存在搜索引擎关键字,则页面将会发生跳转,也就是域名劫持

  • 1
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 1

打赏作者

云端_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值