目录
任务一:总结CSRF和XSS区别
1.CSRF
CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害人的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账,改密码等)。
2.XSS
XSS(跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响,恶意用户利用xss代码攻击成功后,可能得到很高的权限、私密网页内容、会话和cookie等各种内容
3.CSRF和XSS的区别:
(1)XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地。CSRF是一种单向攻击机制,攻击者只能发起HTTP请求,但不能检索已发起请求的响应。
(2)CSRF攻击要求经过身份验证的用户处于活动会话中。而XSS攻击则不需要,在XSS攻击中,只要用户登录,就可以存储和交付有效载荷。
(3)CSRF攻击的范围有限,仅限于用户可以执行的操作,例如点击恶意链接或访问黑客的网站。XSS攻击提供执行恶意脚本来执行攻击者所选择的任何活动,从而扩大了攻击的范围。
(4)在XSS攻击中,恶意代码存储在站点中。在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。
任务二:总结CSRF攻击步骤
(1)用户登录受害网站,浏览器保存身份凭证在本地cookie中。
(2)用户被诱导打开黑客网站,黑客网站向受害网站发起恶意请求,浏览器自动带上身份凭证。
(3)受害网站服务端校验恶意请求,发现身份凭证,恶意请求被受理。
(4)攻击者执行恶意操作
任务三:总结CSRF手工构造POST型页面方法
(1)抓包分析目标网站的POST请求
对目标网站的数据包进行分析,了解哪些操作是通过POST请求进行的,并捕获这些请求的详细信息。(2)构造HTML表单
根据分析构造一个HTML表单。表单的action属性应设置为目标网站的URL,method属性应设置为POST。表单内部应与目标POST请求一致,并预设好恶意攻击的数据。(3)隐藏表单元素
将表单中的输入字段(如用户名、密码等)设置为hidden类型,但不会影响表单的提交。(4)诱导点击
将构造好的HTML页面发布到恶意网站上,或通过电子邮件、社交媒体等方式发送给目标用户。诱导用户点击,在用户不知情的情况下向目标网站发送包含恶意数据的POST请求。(5)执行恶意操作
如果攻击成功,目标网站可能会执行攻击者想要的恶意操作。
例:pikachu靶场CSRF第二关
第二关
进入页面后,根据提示登录后修改信息提交并抓包
此时发现是POST请求,参数在请求体中,无法直接构造恶意链接,但可以构造恶意表单
将该恶意表单放到浏览器上测试
点击进入,bp抓包如下,发现里面的参数已经修改
点击放行,显示403
找到pikachu/vul/csrf/csrf_post.php,修改如下图所示
保存后打开编写好的表单,点击后进入登录页面
填写登录信息后,显示修改成功
任务四:说明token类CSRF利用方法
CSRF Token的工作原理:
CSRF Token 每随着页面被操作,Token 都会改变,比如 f5 刷新,点击按钮等等,都会导致 CSRF Token 变化。
而每一个请求的 CSRF Token 会通过后端代码验证 Token 的有效性 ,在时间戳上是否有效,如果加密字符串一致且时间未过期,那么这个Token就是有效的。
例:pikachu靶场CSRF第三关
登录后点击修改信息,填写完成后点击抓包
发现报文中包含token,选择安装burp插件CSRF Token Tracker
安装后如图点击,进行修改并启用
将抓到的包发送到重放器,修改数据
点击发送发现数据发生变化
点击“跟随重定向”
任务五:SSRF常用伪协议
1.file协议
在有回显的情况下,利用 file 协议可以读取任意文件的内容
2.dict协议泄露安装软件版本信息,查看端口,操作内网redis服务等
3.gopher协议gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。
4.http/s协议探测内网主机存活
任务六:SSRF pikachu靶场通关
- SSRF(curl)
修改URL,添加上链接http://www.baidu.com 访问百度页面。
修改URL,访问本地文件test.txt。
- SSRF(file_get_content)
与SSRF(curl)操作相似,在“file=”后修改相应的url,访问百度页面。
访问本地文件test.txt。
任务七:SSRF靶场通关时根据源代码说明漏洞成因
- SSRF(curl)
(1)没有验证URL参数:代码从用户输入的$_GET[‘url’]参数中直接获取URL并用于curl_init函数,未对输入进行有效的验证或过滤。
(2)没有限制请求目标:curl_setopt配置允许请求任何指定的URL,包括内部服务或本地网络上的服务。攻击者可以利用该请求来扫描内部网络、访问内部API,或者获取内部系统的信息。
- SSRF(file_get_content)
(1)$_GET[‘file’]直接获取URL ,没有进行任何过滤或验证。这允许攻击者通过在 file 参数中提供恶意输入来执行恶意操作。
(2)使用了 explode() 函数来处理路径,但如果攻击者提供特殊的路径参数(如本地文件或内网资源),仍然可以访问不应该公开的文件。