实训第六天

1. CSRF和XSS区别

CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和不知情的用户之间的信任关系。但是,XSS 和 CSRF 攻击之间存在一些根本差异,包括:

1.1 XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地。另一方面,CSRF是一种单向攻击机制,这意味着攻击者只能发起HTTP请求,但不能检索已发起请求的响应。

1.2 CSRF攻击要求经过身份验证的用户处于活动会话中,而XSS攻击则不需要。在XSS攻击中,只要用户登录,就可以存储和交付有效载荷。

1.3 CSRF攻击的范围有限,仅限于用户可以执行的操作,例如点击恶意链接或访问黑客的网站。相反,XSS攻击提供执行恶意脚本来执行攻击者所选择的任何活动,从而扩大了攻击的范围。

1.4 在XSS攻击中,恶意代码存储在站点中,而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。

2. CSRF攻击步骤

1.用户登录、浏览并信任正规网站WebA,同时,WebA通过用户的验证并在用户的浏览器中产生Cookie。

2.攻击者WebB通过在WebA中添加图片链接等方式诱导用户User访问网站WebB。(比如说这里有劲爆的表演请点击~)

3.在用户User被诱导访问WebB后,WebB会利用用户User的浏览器访问第三方网站WebA,并发出操作请求。

4.用户User的浏览器根据WebB的要求,带着步骤一中产生的Cookie访问WebA。

5.网站WebA接收到用户浏览器的请求,WebA无法分辨请求由何处发出,由于浏览器访问时带上用户的Cookie,因此WebA会响应浏览器的请求,如此一来,攻击网站WebB就达到了模拟用户操作的目的。

总结

用户和合法网站之间,三次握手建立了稳定连接后,又用https建立了加密通信的通道。到这里,服务器就认为从这个通道过来的都是良民,都是正确的用户请求,直接予以处理。

那么此时,有个hacker使用自己的服务器也好,使用恶意连接也好,诱骗用户在不知情的情况下向服务器发送了带有cookie的请求。那么由于服务器默认处理这些请求,于是,引发用户触发非个人意愿的操作,造成损失。

也就是说,这一切的根源其实就是服务器没有对用户的请求做持续的认证,误以为建立了https就万事大吉了。殊不知,用户的请求也会被在不知情的情况下进行发送。

3. CSRF手工构造POST型页面

1. 构建表单:
   - 首先,你需要创建一个HTML表单,其中包含一个指向目标网站的URL,以及该网站接受的POST请求所需的数据字段。
   - 表单中应该包括隐藏字段,这些字段包含攻击者想要提交的数据。

2. 设置HTTP方法为POST:
   - 确保你的表单使用POST方法,因为GET请求通常只携带查询字符串参数,而POST请求可以包含更复杂的数据体。

3. 包含必要参数:
   - 如果目标网站需要特定的参数来验证或执行操作,确保这些参数被正确地添加到表单中。
   - 这些参数可以通过观察正常的POST请求来获取,例如使用开发者工具中的Network标签页来查看。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSRF Attack Page</title>
</head>
<body>
    <h1>Click to perform an action on the target site</h1>
    <form action="http://target-site.com/some-action" method="post">
        <!-- 假设需要传递的参数为 'param1' -->
        <input type="hidden" name="param1" value="attacker_value">
        
        <!-- 如果需要传递多个参数 -->
        <input type="hidden" name="param2" value="another_value">
        
        <!-- 提交按钮 -->
        <button type="submit">Perform Action</button>
    </form>
</body>
</html>

在这个例子中,当受害者点击按钮时,表单将被提交到目标站点的some-action路径,并携带了两个参数param1param2。如果目标站点没有适当的CSRF防护措施(如使用CSRF令牌),那么这个请求可能会被执行。

4. token类CSRF利用

Token类CSRF(Cross-Site Request Forgery,跨站请求伪造)攻击是指攻击者利用受害者浏览器中的认证状态(如Session或Token)来伪造请求到另一个网站,从而执行对受害者的恶意操作。下面详细说明几种利用令牌进行CSRF攻击的方法:

4.1 窃取或猜测Token
- 直接窃取:如果用户的认证令牌(如Session ID或JWT)存储在Cookie中,并且Cookie没有设置`HttpOnly`标志,那么攻击者可以通过XSS(跨站脚本攻击)来窃取用户的令牌。
- 预测或猜测Token:如果应用使用的Token是可预测的,比如基于时间戳或用户ID生成,攻击者可以尝试猜测Token的值。

4.2 利用未加密的Token
- 如果Token是以明文形式传输的,攻击者可以在中间人攻击(Man-in-the-Middle, MITM)中截获Token,并利用它发起恶意请求。

4.3 利用Token作为认证的一部分
- 在CSRF攻击中,攻击者可以构造一个恶意链接或HTML表单,其中包含了指向目标站点的一个URL,该URL包含一个经过认证的请求(例如带有Token的GET参数)。当受害者点击这个链接或提交表单时,由于他们的浏览器已经保存了相关的认证状态(如Cookies),这个请求会被视为合法请求并被执行。

4.4 CSRF Token重放
- 如果应用的CSRF防护措施不够完善,例如Token的生命周期管理不当,攻击者可以捕获一个带有有效CSRF Token的请求,并在不同的上下文中重放这个请求,以执行恶意操作。

以pikachu上的关卡为例,在burpsuite上安装CSRF Token Tracker插件

安装步骤:Extensions(扩展)→BApp Store→CSRF Token Tracker→Install(安装)

安装完成后进行配置:

5. SSRF常用伪协议

SSRF(Server-Side Request Forgery)是一种安全漏洞,它允许攻击者通过受信任的应用程序向内网或只能被该应用程序访问的系统发送恶意请求。在某些情况下,服务器可能会支持一些特殊的伪协议(fake protocols),这些伪协议可以被滥用以进行SSRF攻击。下面是一些常见的伪协议:

5.1 file协议:主要用于访问本地计算机中的文件。在有回显的情况下,利用file协议可以读取任意文件的内容。如:ssrf.php?url=file:///etc/passwd,通过此请求可以读取服务器上的/etc/passwd文件。
5.2 http/https协议:用于访问网络资源,如网页、图片等。http协议通常用于GET请求,而https是http的安全版本,增加了数据加密。如:ssrf.php?url=http://192.168.25.203,通过此请求可以访问内网中的某个IP地址上的资源。
5.3 dict(字典服务器协议):访问字典资源,如,dict:///ip:6739/info。
5.4 sftp(SSH 文件传输协议或安全文件传输协议): Linux 中,Windows 不存在。
5.5 ldap(轻量级目录访问协议)
5.6 tftp(简单文件传输协议)
5.7 gopher(分布式文档传递服务):可使用 gopherus (工具) 生成 payload。由于有部分协议 http 这类不支持,可以 gopher 来进行通讯(mysql、redis 等)。

6. Pikachu靶场——SSRF通关

6.1 第一关 SSRF(curl)

点击蓝色文字,跳转页面,发现是通过url参数进行传递请求的

本地新建文件text6.txt,使用file伪协议访问该文件

6.2 第二关 SSRF(file_get_content)

同样点击蓝色文字,发现上一关的url变成了file

同理,file伪协议读取本地文件:

7. Pikachu靶场中SSRF漏洞的成因分析

源码存储路径:

第一关(对ssrf_curl.php分析)

服务端直接接受前端的URL,并没有做任何有效的校验过滤,导致了SSRF漏洞

第二关(对ssrf_fgc.php分析)

在file协议中没有过滤恶意文件路径或url,导致攻击者可以通过file协议进行内网请求或本地文件请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值