csrf漏洞 day06

  1. 总结CSRF和XSS区别

CSRF(跨站请求伪造)和XSS(跨站脚本攻击)是两种不同的网络安全漏洞,它们的攻击方式、利用条件和防护措施各有特点。

CSRF攻击:

CSRF攻击利用的是网站对用户浏览器的信任。攻击者通过诱使用户打开一个恶意网站或者点击一个链接,诱导用户在已经被攻击的网站上执行一些操作,如转账、发帖等,而这些操作利用了用户在目标网站上的会话cookie,从而绕过服务端的验证。

- CSRF攻击通常不需要受害者登录,只要受害者有有效的会话cookie即可。

- 攻击者只需诱使用户访问恶意链接,无需受害者直接与恶意网站交互。

- 防护CSRF的方法包括使用CSRF令牌(也称为同步器令牌)、双重cookie提交、验证Referer头等。

XSS攻击:

XSS攻击则利用的是用户对指定网站的信任。攻击者通过在网页中注入恶意脚本,当用户浏览该网页时,恶意脚本会在用户的浏览器上执行,从而允许攻击者窃取用户的会话cookie或其他敏感信息。

- XSS攻击分为存储型、反射型和基于DOM的攻击,其中存储型XSS漏洞通常存在于知名网站上。

- 攻击者需要诱使用户与恶意脚本交互,如点击恶意链接或访问特定的网页。

- 防护XSS的方法包括输入验证、输出转义、使用HTTPOnly Cookie、实施内容安全政策(CSP)等。

CSRF和XSS的区别主要表现有

  1. 攻击的利用点不同:CSRF利用的是网站对用户的信任,通过用户的会话cookie来执行恶意操作;XSS利用的是用户对网站的信任,通过注入的恶意脚本来窃取用户信息。
  2. 攻击的触发方式不同:CSRF通常通过恶意链接或者钓鱼网站触发,用户无须直接与恶意网站交互;XSS则需要用户与恶意脚本直接交互,如点击链接或访问特定页面。
  3. 防护策略不同:CSRF防护通常使用CSRF令牌、双重cookie提交等技术;XSS防护则侧重于输入验证、输出转义、使用HTTPOnly Cookie等。
  4. 了解这些区别对于确保网站安全、防止潜在攻击具有重要意义。在实际防护中,应针对两种漏洞的特点,采取相应的防护措施,同时加强代码审计和安全,确保系统的安全稳定运行。

  1. 总结CSRF攻击步骤

CSRF(跨站请求伪造)攻击是一种网络攻击手段,它通过利用用户在已认证的状态下,在不经用户同意的情况下,诱导用户访问一个恶意网站或者点击一个恶意链接,从而在用户不知情的情况下执行非本意的操作。CSRF攻击的步骤大致如下:

用户登录受信任网站A:用户在浏览器中登录了某个网站A,并且这个网站A在用户的浏览器中设置了一个有效的会话cookie。

访问危险网站B:用户在不知情的情况下访问了恶意网站B或者点击了一个恶意链接,这个恶意网站B可能会包含一些恶意代码。

执行恶意代码:恶意网站B利用用户的会话cookie,向网站A发送一个请求,这个请求可能是更改用户密码、转账等操作。由于用户的浏览器中仍然保存着网站A的会话cookie,所以这个请求会被网站A识别为用户的合法请求。

执行非本意操作:网站A在验证了请求的合法性后,会执行用户账号的相应操作,而这个操作是用户在访问恶意网站B之前完全不知情的。

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

执行步骤:

  1. 首先需要确定一个用户已经登录并且设置了cookie的Web应用程序,这个应用程序就是CSRF攻击的目标。
  2. 通过分析网络请求,获取目标应用程序在用户浏览器中设置的cookie值。
  3. 创建一个恶意页面,这个页面需要包含向目标应用程序发送恶意请求的代码。这个代码通常是一个隐藏的表单或者是一个iframe,其中包含了向目标应用程序发送POST请求的代码。
  4. 如果目标应用程序的URL中包含了一些可以被预测或者控制的参数,可以利用这些参数来构造一个反射型CSRF攻击。攻击者可以在恶意页面中包含一个链接,当用户点击这个链接时,会向目标应用程序发送一个带有恶意参数的请求。
  5. 如果目标应用程序的请求可以通过DOM操作来触发,那么可以利用DOM型CSRF。在恶意页面中,通过JavaScript代码动态地创建一个表单或者请求,然后利用用户的交互行为(如点击按钮、滚动页面等)来触发这个请求。
  6. 攻击者可以利用第三方站点来发送CSRF攻击请求。用户只需访问恶意第三方站点,就会自动向目标应用程序发送恶意请求。这种方法不需要用户与恶意页面进行交互,成功率更高。

构造方法:

  1. 使用HTML表单: 
  2. 最常见的方式是通过HTML表单收集用户输入,然后通过`<input type="submit">`按钮提交数据。例如:
  3.    ```html
  4.    <form action="your-server-endpoint" method="post">
  5.      <input type="text" name="username" placeholder="用户名">
  6.      <input type="password" name="password" placeholder="密码">
  7.      <input type="submit" value="提交">
  8.    </form>
  9.    ```
  10. 使用JavaScript和DOM:
  11.    可以使用JavaScript动态地创建表单元素,并通过AJAX方法发送POST请求。例如:
  12.    ```javascript
  13.    // 创建表单元素
  14.    var form = document.createElement('form');
  15.    form.action = 'your-server-endpoint';
  16.    form.method = 'post';
  17.    // 创建输入元素
  18.    var usernameInput = document.createElement('input');
  19.    usernameInput.type = 'text';
  20.    usernameInput.name = 'username';
  21.    usernameInput.placeholder = '用户名';
  22.    var passwordInput = document.createElement('input');
  23.    passwordInput.type = 'password';
  24.    passwordInput.name = 'password';
  25.    passwordInput.placeholder = '密码';
  26.    // 将输入元素添加到表单中
  27.    form.appendChild(usernameInput);
  28.    form.appendChild(passwordInput);
  29.    // 通过AJAX发送表单数据
  30.    var xhr = new XMLHttpRequest();
  31.    xhr.open('POST', form.action, true);
  32.    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  33.    xhr.onreadystatechange = function() {
  34.      if (xhr.readyState == 4 && xhr.status == 200) {
  35.        console.log(xhr.responseText);
  36.      }
  37.    };
  38.    xhr.send(new URLSearchParams(form).toString());
  39.    ```
  40. 使用命令行工具:
  41.    可以使用命令行工具如`curl`或`httpie`来构造和发送POST请求。例如,使用`curl`发送一个包含用户名和密码的POST请求:
  42.    ```sh
  43.    curl -X POST 'your-server-endpoint' -d 'username=用户名&password=密码'
  44.    ```
  45. 使用编程语言:
  46.    在编程语言中,可以使用相应的库来发送POST请求。例如,在Python中,可以使用`requests`库:
  47.    ```python
  48.    import requests
  49.    payload = {'username': '用户名', 'password': '密码'}
  50.    response = requests.post('your-server-endpoint', data=payload)
  51.    print(response.text)
  52.    ```
  53. 在构造POST结构时,需要考虑以下几点:
  54. - 数据类型:通常使用的数据类型包括application/x-www-form-urlencoded、multipart/form-data、application/json等。
  55. - 数据编码:如果使用application/x-www-form-urlencoded编码类型,需要将数据参数键/值对进行URL编码。
  56. - 安全性:在发送敏感数据(如密码)时,应确保使用HTTPS等安全协议,以保护数据传输过程中的安全。- 验证和错误处理:在服务器端,应对POST请求的数据进行验证,以确保数据的完整性和真实性,并对客户端的错误进行适当处理。

  1. 说明token类CSRF利用方法

通常,Web应用程序会在用户会话中使用Token来防护CSRF攻击。当用户访问一个需要认证的页面时,服务器会生成一个唯一的Token,并将这个Token存储在用户的会话中。然后,在用户的请求中,例如表单或Ajax请求,会包含这个Token。服务器在接收到请求时,会验证请求中的Token是否与用户会话中的Token一致,如果一致,则认为请求是合法的。

但是,如果Token的生成、存储或验证过程中存在缺陷,攻击者可以利用这些缺陷实施CSRF攻击。

a. Token泄露:如果Token在客户端被泄露,攻击者可以获取用户的Token,并将其用于构造恶意的CSRF攻击请求。这可能发生在Token存储在浏览器的localStorage、sessionStorage或cookie中,并且没有适当的加密或安全措施的情况下。

b. Token预测:如果Token的生成算法是可预测的,攻击者可以预测未来的Token,并使用这些预测的Token发起攻击。为了防止预测,Token应该具有足够的随机性和复杂性。

c. Token固定:如果Token在会话中固定不变,攻击者可以在Token固定的时间内多次利用同一个Token发起攻击。为了防止固定,Token应该在每次请求时动态生成。

d. Token验证不足:如果服务器在验证Token时存在缺陷,例如只验证Token的存在而不验证其有效性,攻击者可以构造一个包含有效Token的请求,使服务器误认为这是合法的用户请求。

e. 第三方库或框架的缺陷:有时候,使用的第三方库或框架可能存在CSRF防护的缺陷,攻击者可以利用这些缺陷实施攻击。例如,某些框架在生成Token时可能存在已知的问题,或者在传递Token时不够安全。

为了防止Token类CSRF攻击,应该采取以下措施:

- 使用安全的Token生成算法,确保Token的随机性和复杂性。

- 适当保护Token,避免其在客户端泄露。

- 确保Token在每次请求时都动态生成,避免Token固定。

- 强化Token的验证过程,确保验证的全面性和有效性。

- 定期更新和轮换Token,以减少Token被预测的风险。

  1. SSRF常用伪协议

file: 访问文件系统中的文件。

cmd: 执行系统命令。

shell: 执行类似Unix shell的命令。

http: 通过HTTP协议访问外部资源。

https: 通过HTTPS协议访问外部资源。

gopher: 通过Gopher协议访问资源,这是一个较老的协议,但某些系统仍支持。

ftp: 通过FTP协议访问文件。

smtp: 通过SMTP协议发送电子邮件。

imap: 通过IMAP协议访问邮箱。

pop3: 通过POP3协议接收电子邮件。

telnet: 通过Telnet协议进行远程登录。

dict: 通过DICT协议查询词典。

ldap: 通过LDAP协议访问目录服务。

svn: 通过SVN协议访问版本控制系统。

rsync: 通过RSYNC协议同步文件。

  1. SSRF pikachu靶场通关

搭建pikachu并进入网站

  1. Get型

抓个包看看情况发现有bf漏洞

那直接使用集束炸弹爆破看看情况

找到一个明显返回字长不同的包,user=root password=123456

后面查询攻略发现这个东西旁边的提示区就可以获得

按照获得的用户密码登录,抓包查看

可以看到使用url传递了信息

我们直接更改

http://192.168.126.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=so&phonenum=so&add=fun&email=ny&submit=submit HTTP/1.1

点击之后更改成功,自动跳转网页

更改成功

  1. Post型

同样先查看当前信息和post包的结构

可以看见post包中的body提交了相应的表单,需要一个恶意网站进行中转

恶意网站

在攻击端开启网络服务,将恶意网站放入html文件中

诱导被攻击者点击链接

成功跳转

且按f5刷新之后可查看成功更改信息

  1. Token

第一次密码bf的时候就没做出来,网上的攻略基本上需要仰仗burp的专业版中的token tracker功能,但是一直没下载到可用的专业版burp一直使用的社区版。

T_T

  1. 漏洞成因
  1. Get型

在csrf_get_edit.php中,如果已经完成过一次检测且通过后续再交互就不再检测验证(24-27行)

  1. Post型

和get型一样采用检测一次cookie

这里选择使用post方法,危害等级比get方法高的多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值