一、总结CSRF和XSS区别
CSRF
跨站请求伪造(Cross-site request forgery),是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
XSS
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表 CSS 混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页之时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。
区别
1. 原理不同,CSRF是利用网站A本身的漏洞,去请求网站A的api;XSS是向目标网站注入JS代码,然后执行JS里的代码。
2. CSRF需要用户先登录目标网站获取cookie,而XSS不需要登录
3. CSRF的目标是用户,XSS的目标是服务器
4. XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求
二、总结CSRF攻击步骤
步骤 1: 用户认证
- 受害者登录到受信任的网站,并且网站通过cookie或其他方式设置了一个认证会话。
步骤 2: 攻击者构造恶意请求
- 攻击者创建一个恶意网站或者嵌入恶意代码的网页。
- 该恶意代码通常是一个隐藏的HTTP请求,比如一个图片标签的
src
属性,或者一个表单的自动提交。
步骤 3: 诱导受害者触发恶意请求
- 攻击者通过各种手段诱导受害者访问恶意网站或包含恶意代码的页面,例如通过电子邮件、社交媒体链接等。
步骤 4: 利用受害者的会话执行操作
- 当受害者访问恶意网站时,恶意代码会在受害者的浏览器上执行。
- 由于受害者的浏览器已经与受信任的网站建立了会话,恶意请求会自动携带受害者的会话认证信息(如cookie)。
- 受信任的网站接收到请求后,会认为这是一个来自受害者的合法请求,并执行相应的操作。
步骤 5: 攻击成功
- 如果网站没有适当的CSRF防御措施,攻击者的请求会被成功执行,可能导致数据泄露、状态更改、资金转移等后果。
三、总结CSRF手工构造POST型页面方法
步骤 1: 确定目标操作和参数
- 需要确定想要伪造的特定操作和所需的POST参数。
步骤 2: 创建HTML页面
- 创建一个HTML页面,其中包含一个表单,该表单的
action
属性设置为目标的URL,并且表单使用POST
方法。
步骤3:添加表单数据
- 在表单中添加输入项<input>,这些输入项对应于目标POST请求中的参数。这些参数应该被设置为攻击者希望篡改的值。
步骤4:提交表单
- 可以通过JavaScript自动提交表单。
步骤 5: 触发CSRF攻击
- 当受害者访问该页面时,表单会自动提交,或者受害者可能会被诱导点击提交按钮。
四、说明token类CSRF利用方法
1. 用户登录
- 客户端:用户在登录表单中输入用户名和密码,然后提交请求。
- 服务端:接收到登录请求后,服务端会比较用户提供的用户名和密码与数据库中的记录是否匹配。
2. 生成和发送Token
- 服务端:一旦验证用户名和密码正确,服务端会生成一个唯一的Token。这个Token通常是一个随机生成的字符串,足够长且复杂,以确保其难以被猜测或破解。
- 存储Token:服务端会在数据库中为该用户会话存储这个Token,并将其与用户的会话关联起来。
- 发送Token:服务端将生成的Token发送回客户端,通常通过设置HTTP响应头中的Set-Cookie字段,将Token存储在客户端的Cookie中,或者在响应体中返回,由客户端决定存储位置(如Local Storage)。
3. 存储Token
- 客户端:收到Token后,客户端将其存储起来,通常存储在Cookie中,这样每次请求都会自动带上这个Token。
4. 发送Token进行请求
- 客户端:在随后的请求中,客户端会自动将Token包含在请求中,通常是通过HTTP请求头中的Cookie字段发送。
- 如果Token存储在Local Storage中,客户端可能需要手动将其添加到每个请求的参数或请求头中。
5. 验证Token
- 服务端:对于每个接收到的请求,服务端都会提取请求中的Token,并与存储在服务器上的Token进行比对。
- 验证有效期:服务端还会检查Token是否在有效期内,以确保Token未被滥用或过期。
6. 响应请求
- 服务端:如果Token验证成功,服务端认为请求是合法的,并向客户端返回请求的数据。
- 失败处理:如果Token验证失败(比如Token不存在、不匹配或已过期),服务端会拒绝请求,并可能要求用户重新登录。
CSRF Token Tracker
五、SSRF常用伪协议
1. file://
- 用途:访问服务器上的文件系统。
- 示例:
file:///etc/passwd
—— 读取服务器上的/etc/passwd
文件内容。
2. http://
和 https://
- 用途:通过HTTP或HTTPS协议访问网络资源。
- 示例:
http://example.com
—— 访问外部网站。
3. ftp://
- 用途:通过FTP协议访问文件。
- 示例:
ftp://example.com/file.txt
—— 尝试下载FTP服务器上的文件。
4. gopher://
- 用途:通过Gopher协议访问资源,Gopher协议可以构造复杂的请求,有时用于绕过过滤。
- 示例:
gopher://127.0.0.1:25/_TCP%20localhost%20smtp%20cmd%20data%200%20quit
—— 发送SMTP命令。
5. dict://
- 用途:通过Dict协议访问在线字典服务。
- 示例:
dict://example.com:2628/
—— 访问Dict服务器。
6. ldap://
和 ldaps://
- 用途:通过LDAP协议访问目录服务。
- 示例:
ldap://localhost:389/
—— 尝试连接到本地LDAP服务器。
7. telnet://
- 用途:通过Telnet协议尝试建立网络连接。
- 示例:
telnet://example.com:23
—— 尝试连接到Telnet服务器。
8. tftp://
- 用途:通过TFTP协议(简单文件传输协议)访问文件。
- 示例:
tftp://127.0.0.1/readwrite
—— 尝试通过TFTP读取或写入文件。
9. javascript://
- 用途:执行JavaScript代码,通常用于XSS攻击。
- 示例:
javascript:alert('XSS')
—— 弹出警告框。
六、SSRF pikachu靶场通关
SSRF(curl)
点击链接后发现URL中存在curl关键字,因此我们可以植入恶意URL链接
尝试植入www.baidu.com
修改url为:url=file:///d:/aaa.txt,查看文件的内容
SSRF(file_get_content)
url变成了file
尝试植入www.baidu.com
修改file为:file=file:///D:/aaa.txt,查看文件的内容。