CSRF和XSS区别
1.原理不同
CSRF:利用网站A本身的漏洞,通过伪造请求,冒充用户在站内的正常操作。攻击者通常通过一些技术手段欺骗用户的浏览器去访问一个用户以前认证过的站点并运行一些操作(如转账、发送消息等)。由于浏览器之前已经认证过,被访问的站点会认为这是真正的用户操作而去执行。
XSS:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入其中的Script代码会被执行,从而达到攻击用户或服务器的目的。XSS主要基于JavaScript(或其他脚本语言)来完成恶意的攻击行为。
2.目标不同
CSRF:目标是用户,攻击者通过伪造用户的正常操作,以用户的名义发送恶意请求,对服务器来说这个请求是完全合法的,但却完成了攻击者所期望的操作(如转账、发送邮件等)。
XSS:目标主要是服务器,通过执行恶意脚本代码,攻击者可以窃取用户信息、劫持会话、进行网络钓鱼、放马挖矿、广告刷流量等,也可以劫持后台、篡改页面等。
3.实现方式不同
CSRF:需要用户先登录目标网站获取cookie,然后攻击者通过一些技术手段(如链接欺骗、隐藏iframe等)欺骗用户的浏览器发起请求。这些请求在用户不知情的情况下携带了用户的cookie信息,从而以用户的身份执行操作。
XSS:攻击者直接向目标网站注入JS代码,这些代码被存储在服务器上或作为请求的一部分发送给服务器,当其他用户访问该页面时,嵌入的JS代码会被执行。XSS攻击可以分为反射型、存储型和DOM型三种。
CSRF攻击步骤
1. 用户登录受信任网站
用户首先登录了一个受信任的网站A,如网上银行或社交媒体平台。在登录过程中,用户的身份被验证,并且网站A在用户的浏览器中设置了一个包含会话信息的Cookie。
2. Cookie存储在浏览器中
登录成功后,用户的浏览器会存储网站A的Cookie。这些Cookie通常包含了用户的会话标识符 (Session ID)或其他认证信息,用于后续请求的身份验证。
3. 用户访问恶意网站
在用户不知情的情况下,他们访问了一个恶意的网站B。这个网站可能是通过电子邮件、社交媒 体链接或其他方式诱导用户访问的。
4. 恶意网站构造伪造请求
恶意网站B利用HTML、JavaScript或其他技术手段,构造了一个针对受信任网站A的伪造HTTP请求。这个请求可能是一个隐藏的表单提交、一个AJAX请求或任何其他类型的HTTP请求。
5. 浏览器自动携带Cookie发送请求
当恶意网站B的JavaScript代码执行时,它会触发浏览器向受信任网站A发送伪造的HTTP请求。由于浏览器在发送请求时会自动携带与请求域相匹配的Cookie,因此这个伪造请求会包含用户之前登录网站A时设置的Cookie。
6. 网站A验证请求并执行操作
受信任网站A接收到伪造请求后,会验证请求中的Cookie以确认用户的身份。由于Cookie是有效的,网站A会误以为这是用户本人发出的请求,并执行请求中的操作,如转账、修改密码、发布信息等。
7. 攻击成功
一旦网站A执行了伪造请求中的操作,攻击者就成功实现了CSRF攻击。用户可能在没有意识到的情况下遭受了损失或隐私泄露。
CSRF手工构造POST型页面方法
1. 确定目标
确定你想要进行CSRF攻击的目标网站和具体操作的URL。
通过分析或测试,了解该操作需要的POST参数及其结构。
2. 创建表单
在HTML文件中创建一个表单(<form>标签)。
设置表单的action属性为目标网站的URL。
设置表单的method属性为POST。
3. 添加输入字段
根据目标操作的POST参数,在表单中添加相应的输入字段(<input>标签)。
每个输入字段的name属性应与POST参数的名称相对应,value属性可以设置为攻击者希望发送的值。
4. 隐藏表单
为了使用户不易察觉,可以将表单和提交按钮隐藏在页面上(例如,使用CSS将表单和按钮的display属性设置为none,或将它们放在视口外)。
或者,使用JavaScript在后台自动提交表单,无需用户交互。
5. 诱导用户访问
将包含恶意表单的网页上传到攻击者控制的服务器上,或者通过邮件、聊天软件、社交媒体等方式发送给目标用户。
诱导用户点击一个看似无害的链接或按钮,该链接或按钮会触发表单的提交。
6. 监控和验证
攻击者可以通过在服务器上设置日志或利用Burp Suite等工具来监控POST请求的发送情况。
验证攻击是否成功,即目标网站是否执行了预期的操作。
token类CSRF利用方法
1.XSS(跨站脚本)攻击:
攻击者可以利用XSS漏洞在受害者的浏览器中注入恶意脚本。这些脚本可以读取或修改Token(如果Token存储在DOM中),或者在用户不知情的情况下提交包含有效Token的请求。
2.Token泄露:
如果Token被泄露到日志、网络传输或第三方服务中,攻击者可能会利用这些泄露的Token来构造CSRF攻击。
3.Token预测:
对于某些简单的Token生成算法,攻击者可能能够通过预测算法来生成有效的Token。
4.绕过Token验证逻辑:
如果服务器端的Token验证逻辑存在漏洞,如验证不严格或存在绕过逻辑的路径,攻击者可能会绕过Token验证。
5.浏览器插件或扩展:
恶意的浏览器插件或扩展可以读取和修改HTTP请求,包括Token。
6.CSRF Token复用:
在某些情况下,如果用户在不同的请求中使用了相同的Token(尽管这通常不是设计上的预期),攻击者可能会捕获并重用该Token。
SSRF常用伪协议
1.file://:
用途:用于从文件系统中获取文件内容。
示例:file:///etc/passwd可以读取Linux系统中的用户密码文件;file:///proc/net/arp可以显示ARP缓存表,帮助发现内网中的其他主机。
说明:这是SSRF攻击中最简单也是最直接的利用方式之一,通过读取敏感文件来获取系统信息或用户数据。
2.dict://:
用途:字典服务协议,用于访问字典资源。
示例:dict://ip:6739/info:可以访问字典服务器上的信息。
说明:虽然dict协议主要用于查询词典或字典内容,但在SSRF攻击中,它也可以被用来进行端口扫描等操作。
3.ftp:// 和 sftp://:
用途:FTP(File Transfer Protocol,文件传输协议)和SFTP(SSH File Transfer Protocol,SSH文件传输协议)用于文件传输。
说明:在SSRF攻击中,这些协议可以用于尝试访问内部网络上的FTP或SFTP服务器,进而获取或修改文件。
4.ldap://:
用途:轻量级目录访问协议(Lightweight Directory Access Protocol),用于访问和维护分布式目录信息服务。
说明:在SSRF攻击中,ldap协议可以被用来尝试访问内部网络上的LDAP服务器,获取敏感信息如用户列表、组织结构等。
5.tftp://:
用途:简单文件传输协议(Trivial File Transfer Protocol),用于在不登录到远程计算机的情况下进行文件传输。
说明:虽然tftp协议的安全性较低,但在SSRF攻击中,它也可以被用来尝试访问内部网络上的TFTP服务器,下载或上传文件。
6.gopher://:
用途:分布式文档传递服务协议,早期互联网上的一种文档检索协议。
说明:gopher协议在SSRF攻击中非常强大,因为它可以用来构造复杂的HTTP请求,包括POST请求和包含特殊字符的请求。这使得gopher协议成为攻击者绕过防火墙和防护机制的有力工具。
7.http:// 和 https://:
用途:超文本传输协议(HyperText Transfer Protocol)和安全超文本传输协议(HyperText Transfer Protocol Secure),用于在Web上传输数据。
说明:虽然HTTP和HTTPS协议本身是安全的,但在SSRF攻击中,攻击者会利用服务器对URL的解析漏洞,构造恶意的HTTP或HTTPS请求来访问内部网络资源或执行其他恶意操作。
SSRF pikachu靶场通关
第一关 SSRF
打开第一关,点击链接
观察发现使url传输方式
修改URL,尝试植入www.baidu.com
第二关 SSRF
利用file协议读取本地文件