1.总结CSRF和XSS区别
区别一:
CSRF:需要用户先登录网站A,获取 cookie。
XSS:不需要登录。
区别二:(原理的区别)
CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。
(1)CSRF相对于XSS漏洞的危害程度更高一些。
(2)XSS有局限性,而CSRF则不。
(3)CSRF相当于是XSS的基础版,CSRF能做到的XSS都可以做到。
(4)XSS主要指向客户端,而CSRF针对服务端。
(5)XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求。
2.总结CSRF攻击步骤
具体来说,攻击流程如下:
1、用户登录:用户正常登录一个受信任的网站(如银行网站)。
2、身份验证信息存储:用户的浏览器保存了该网站的会话Cookie等身份验证信息。
3、恶意链接或表单:攻击者构造一个包含恶意请求链接或表单的网页,并诱导用户点击或提交。
4、自动发送请求:由于用户的浏览器仍与目标网站保持会话,因此当访问恶意网页时,浏览器会自动附带身份验证信息发送请求。
5、服务器处理请求:服务器无法区分该请求是用户自愿发起的还是被伪造的,从而执行了恶意操作。
3.总结CSRF手工构造POST型页面方法
手工构造CSRF POST型页面的方法主要涉及到创建一个HTML页面,该页面包含一个表单(form),该表单通过POST方法向目标网站发送数据。由于CSRF(跨站请求伪造)攻击是攻击者利用受害者的身份向网站发送未授权的请求,因此,在构造这样的页面时,需要特别注意表单的构造以及可能的防御措施。以下是详细步骤:
3.1 确定目标URL和参数
首先,需要明确你想要攻击的目标URL以及该URL所期望接收的POST参数。这通常可以通过分析目标网站的API文档、网络抓包(如使用Burp Suite等工具)或查看网页源代码中的表单结构来获取。
3.2 编写HTML表单
在HTML页面中,编写一个表单(form),设置其action属性为目标URL,method属性为POST。然后,根据目标URL所需的参数,在表单中添加相应的input元素,并设置其name属性为参数名,value属性为攻击者希望发送的值。示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSRF POST 攻击示例</title>
</head>
<body>
<h2>CSRF POST 攻击表单</h2>
<form action="http://example.com/target/url" method="POST" style="display:none;">
<input type="text" name="username" value="attacker_chosen_username">
<input type="text" name="password" value="attacker_chosen_password">
<input type="hidden" name="token" value="尝试猜测或绕过Token"> <!-- 如果目标URL需要Token,则需要尝试猜测或绕过 -->
<!-- 其他必要的输入项 -->
<script>
// 自动提交表单
document.forms[0].submit();
</script>
</form>
</body>
</html>
3.3 考虑绕过Token验证
如果目标URL需要Token来验证请求的合法性(这是一种常见的CSRF防护措施),那么攻击者需要尝试绕过这种验证。这可能包括猜测Token值(如果Token生成算法存在漏洞)、利用浏览器的Cookie(如果Token存储在Cookie中且未设置HttpOnly标志)或通过其他漏洞(如XSS)来获取Token。
3.4 诱使用户访问页面
构造好攻击页面后,攻击者需要诱使用户访问该页面。这通常通过发送包含该页面URL的恶意链接给用户来实现,例如通过电子邮件、社交媒体消息或恶意网站上的链接。
4.说明token类CSRF利用方法
在存在CSRF(跨站请求伪造)保护机制的情况下,网站会使用一种名为“Token”的方法来防止攻击者利用CSRF漏洞。这种Token通常是一个唯一的标识符,它会在用户的浏览器端(作为请求的一部分)与服务器端之间进行验证。为了绕过这种保护,攻击者需要找到一种方法来获取或预测这个Token:
1. 获取Token
XSS攻击:如果目标网站同时存在XSS(跨站脚本)漏洞,那么攻击者可以注入恶意脚本来读取用户的Cookie或其他存储在客户端的Token信息。
弱会话管理:如果会话管理不严格,比如Token通过URL传递或者在页面源码中可见,那么攻击者可以直接从响应中提取Token。
2. 预测Token
固定或可预测的Token:如果Token的生成算法不够复杂或者有一定的规律性,攻击者可能会尝试猜测Token。
重放攻击:如果Token没有一次性使用限制或有效期限制,攻击者可以尝试重放以前捕获的Token。
3. 利用逻辑缺陷
逻辑漏洞:有时网站的设计可能存在逻辑上的缺陷,例如允许某些请求不需要Token验证,攻击者可以尝试找到这些路径并利用它们。
状态依赖:有些情况下,Token验证依赖于用户的会话状态,如果攻击者能控制或预测这个状态(如已登录状态),则可能成功发起攻击。
4. 其他技术
社会工程学:通过欺骗用户来获取他们的凭据或直接让他们执行攻击者想要的操作。
中间人攻击:在网络层面上拦截通信,试图截获Token。
5.SSRF常用伪协议
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,它允许攻击者发送请求到仅服务器能够访问的地址,这可能包括内网机器、其他服务器或者是本地文件系统。攻击者可以通过构造恶意请求让服务器向这些位置发起连接,从而泄露敏感数据或执行未授权操作。在SSRF攻击中,有一些特殊的伪协议或特定的URL模式被用来实现攻击目标。下面是一些常见的伪协议及其用途:
file://
用于访问本地文件系统。攻击者可以通过此协议读取服务器上的文件,例如配置文件或敏感的日志文件。
gopher://
虽然Gopher协议现在已经很少使用了,但它可以用来连接到支持该协议的服务上,有时候可以被用来绕过网络限制。
dict://
字典协议(Dictionary Protocol)用于查询字典服务,虽然不是主要的攻击手段,但在某些情况下可以被用来探测服务器的网络可达性。
ldap:// & ldaps://
LDAP(轻量目录访问协议)用于访问目录服务,如Active Directory。攻击者可以利用SSRF漏洞来枚举目录中的用户或其他信息。
ftp:// & sftp://
FTP(文件传输协议)和SFTP(SSH文件传输协议)用于文件传输。攻击者可以尝试列出服务器上的目录或下载文件。
http(s)代理
攻击者可能会尝试设置一个恶意的HTTP(S)代理服务器,让受害服务器通过这个代理去访问内部网络资源或外部不可达的资源。
DNS请求
虽然不是真正的伪协议,但通过构造特殊的HTTP请求头(如Host),攻击者可以触发DNS请求,用来探测内部网络结构或进行DNS rebinding攻击。
Unix套接字(Unix Sockets)
在某些情况下,如果服务器的应用程序不正确地处理URL,攻击者可能尝试构造特定的字符串来模拟Unix套接字文件的路径,尽管这种情况较为罕见。
data://
这个伪协议允许直接在URL中包含数据,可以用来测试服务器对特殊输入的处理情况。
6.SSRF pikachu靶场通关
SSRF(curl)
进入SSRF(curl)界面
点击超链接,观察url的变化,发送了参数?url=http://127.0.0.1/vul/ssrf/ssrf_info/info1.php
可以尝试修改url传递的参数:
?url=https://www.bilibili.com
利用file协议查看本地文件
?url=file:///C:/Users/Lenovo/Desktop/123.txt
dict协议扫描内网主机开放端口
?url=dict://127.0.0.1:80
SSRF(file_get_content)
进入SSRF(file_get_content)界面,要我们再来亿首,点击超链接
点击超链接,观察url的变化,发送了参数?file=http://127.0.0.1/vul/ssrf/ssrf_info/info2.php
可以尝试修改url传递的参数:
?file=file:///C:/Users/Lenovo/Desktop/123.txt
7.SSRF靶场通关时根据源代码说明漏洞成因
观察传递参数隶属于哪个文件
curl
没有对url参数修改做任何过滤
file_get_content
同样没做参数过滤