1.总结CSRF和XSS区别
1. 攻击原理
- CSRF: CSRF 利用用户的身份认证信息(如 Cookie、Session)在用户不知情的情况下发起伪造请求,导致用户在未授权的情况下执行某些操作。攻击者通过诱导用户访问恶意网站,利用用户已经登录的会话,在另一个受信任的网站上执行操作,如转账、修改信息等。
- XSS: XSS 是攻击者在受害者的浏览器中注入恶意脚本(通常是 JavaScript),这些脚本通常被嵌入到受害者访问的网页中。当受害者访问这些网页时,恶意脚本就会在受害者的浏览器中执行,可能导致窃取用户信息、会话劫持、伪造内容等。
2. 攻击目标
- CSRF: 目标是利用受害者已经登录的会话在受信任的网站上执行未经授权的操作。受害者本人并不知道这些操作是在攻击者的控制下完成的。
- XSS: 目标是通过注入恶意脚本来直接攻击访问被注入网站的用户。XSS 可以窃取用户敏感信息(如 Cookie、SessionID),也可以进行钓鱼攻击、劫持用户的浏览器等。
3. 依赖的条件
- CSRF: 依赖于用户的身份验证状态。攻击者需要受害者已经在目标网站上登录,并持有有效的身份验证信息(如 Cookie)。攻击者不需要获取这些信息,而是利用用户当前的身份来发起请求。
- XSS: 依赖于网站的输入处理不当或输出转义不正确,导致用户输入的数据未经过滤直接呈现在网页上。攻击者需要找到一个可以插入和执行脚本的漏洞(如输入框、URL 参数等)。
4. 防御措施
- CSRF: 防御 CSRF 的主要方法包括使用 CSRF token、验证请求来源(Referer/Origin)、SameSite Cookie 属性、防止敏感操作使用 GET 请求等。
- XSS: 防御 XSS 的主要方法包括对用户输入进行严格的输入验证和输出转义,使用 Content Security Policy (CSP),避免直接在 HTML 中插入用户输入的数据,确保所有输入都被正确地编码和过滤。
5. 典型场景
- CSRF: 一个典型的 CSRF 攻击场景是用户登录了银行网站,攻击者通过诱导用户点击恶意链接或访问恶意网站,导致用户在不知情的情况下发起了转账请求。
- XSS: 一个典型的 XSS 攻击场景是攻击者在一个留言板或评论区中插入恶意 JavaScript 代码,当其他用户查看该留言时,代码会在他们的浏览器中执行,可能窃取他们的登录凭据。
6. 用户交互
- CSRF: 用户通常是在不知情的情况下发起了恶意请求,攻击的执行不需要用户主动输入信息,只需诱导用户访问一个页面或点击一个链接。
- XSS: 通常需要用户访问特定的页面或者点击某个恶意链接,脚本才会执行。XSS 攻击可能需要用户的某种交互,比如输入信息或点击按钮。
7. 影响范围
- CSRF: 影响的是用户的信任网站,攻击者通过用户的身份来对网站发起攻击。用户可能会在不知情的情况下对他们信任的网站造成破坏。
- XSS: 影响的是访问受影响网站的所有用户,任何访问该页面的用户都可能成为受害者,攻击者能够窃取用户信息或操纵用户的浏览器。
2.总结CSRF攻击步骤
1. 攻击者设置恶意网站:
攻击者创建一个包含恶意代码的网站,该代码通常是一个伪造的请求,针对受害者已经登录的目标网站(例如银行、社交媒体)。
2. 诱使受害者访问恶意网站:
攻击者通过电子邮件、社交媒体或其他方式诱使受害者访问其恶意网站。
3. 恶意请求发送:
受害者访问恶意网站时,恶意代码会自动向目标网站发送伪造请求。因为受害者已经登录目标网站,这些请求会带上受害者的认证信息(如 Cookies)。
4. 目标网站处理请求:
目标网站接收到伪造的请求,并在没有验证请求的合法性的情况下执行操作(如转账、修改用户信息)。
5. 攻击者获益:
由于请求是以受害者的身份发送的,目标网站将操作视为受害者的合法行为,从而导致攻击者得以执行恶意操作。
3.总结CSRF手工构造POST型页面方法
- 确定目标请求:
-
- 确定目标网站上的 POST 请求的 URL 和参数(例如,表单提交的 URL 和所需的参数)。
- 比如说是修改账号信息的请求,或者是转账的请求等等。
- 获取认证信息:
-
- 确保受害者已登录目标网站,并且请求可以带上有效的认证信息(如 Cookies)。
- 构造恶意页面:
-
-
使用 HTML 创建一个包含恶意 POST 请求的表单。该表单会自动提交到目标网站。
-
这里伪造了修改用户信息的请求。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form method="POST" action="http://47.109.40.237:9998/vul/csrf/csrfpost/csrf_post_edit.php">hello,,欢迎来到个人会员中心 | 退出登录
姓名:
性别:
手机:
住址:
邮箱:
</form> </body> </html>
-
- 诱使受害者访问恶意页面:
-
- 将恶意页面的链接发送给受害者,通过电子邮件、社交媒体或其他方式。
- 观察结果:
-
- 一旦受害者访问了恶意页面,目标网站会处理伪造的 POST 请求,执行恶意操作(如转账和修改账户信息)。
4.说明token类CSRF利用方法
CSRF 令牌是用来验证请求的合法性的一种机制。然而,尽管有 CSRF 令牌保护,但攻击者仍然可以尝试通过多种方式绕过这种保护,尤其是在令牌管理不当或存在漏洞的情况下。下面详细解释一些与
CSRF 令牌相关的攻击利用方法:
1. Token 预测攻击
- 分析令牌的生成模式,尝试预测未来的令牌。
- 使用猜测的令牌值构造伪造请求。
2. Token 重用攻击
- 捕获一个有效的 CSRF 令牌并重用它,发送伪造请求。
3. Token 泄露攻击
- 利用泄露的令牌进行 CSRF 攻击。
4. Token 注入攻击
- 在请求中注入伪造的 CSRF 令牌,尝试欺骗服务器。
5. Token 验证缺陷
- 利用验证机制的漏洞,发送伪造请求。
6. 跨站点脚本(XSS)结合 CSRF 攻击
- 通过 XSS 漏洞窃取有效的 CSRF 令牌,然后用它发起伪造请求。
5.SSRF常用伪协议
1. HTTP/HTTPS
- HTTP/HTTPS 协议请求内部资源或第三方服务。
http://localhost/admin或https://internal-service.local/private.
2. FTP
- FTP 协议用于访问和管理远程服务器上的文件。攻击者可能尝试访问内部 FTP 服务器,或者使用 FTP 协议进行数据传输。
ftp://localhost/secret.txt
3. FILE
file://协议允许访问服务器的本地文件系统。攻击者可以尝试读取服务器上的文件。file:///etc/passwd
4. LDAP
- LDAP 协议用于访问和管理目录服务。攻击者可以尝试访问 LDAP 服务器或内部目录服务。
ldap://localhost
5. SMB
- SMB 协议用于文件共享和网络通信。攻击者可能会尝试访问内部 SMB 共享。
smb://localhost/share
6. RDP
- RDP 协议用于远程桌面访问。攻击者可能尝试连接到内部的 RDP 服务器。
rdp://localhost
7. Gopher
- Gopher 协议是一个早期的互联网协议,用于分发文档和文件。虽然不常见,但攻击者可能会尝试利用。
gopher://localhost
6.SSRF pikachu靶场通关
SSRF(CURL)
- 首先在vps上创建一个测试文档试试。这里创建了一个
1.txt

- 在靶场进行测试。发现url中直接是curl这个链接。所以尝试SSRF是否存在。

- 测试可以通过http协议访问百度

- 测试
file协议。访问成功。根目录下的1.txt

- 测试
FTP协议,没有配置ftp服务器,其他几种也是不行或者无法测试。

SSRF(file_get_content)
- 分析这个也是存在SSRF漏洞,但是这里用的是
file协议。

- 直接定向到
///1.txt,可以直接访问

- 也可以通过
file协议去访问到1.txt

- 也可以使用http协议访问外网。

7.SSRF靶场通关时根据源代码说明漏洞成因(加分项)
SSRF(CURL)
成因
- 直接使用用户输入 :
代码中通过$_GET['url']接收用户的URL输入,并将其存储在变量$URL中。然后,这个用户提供的URL被直接传递给curl_init()函数。

- 缺乏输入验证和过滤 :
没有对传入的URL进行任何形式的验证或过滤。攻击者可以提供任意URL(例如file:///etc/passwd、http://localhost:8080),从而造成服务器发送恶意请求或读取服务器文件系统的内容。 - 没有对传入的URL进行任何形式的验证或过滤。这意味着攻击者可以提供任意URL(例如
file:///etc/passwd、http://localhost:8080),从而造成服务器发送恶意请求或读取服务器文件系统的内容。 - CURL支持多种协议 :
curl不仅支持HTTP/HTTPS,还支持其他协议(如FTP、FILE、GOPHER 等)。攻击者可以利用这些协议来执行任意请求,比如读取服务器文件(通过file://协议)或访问内部网络(通过HTTP)。 - 返回未经处理的响应 :
服务器通过curl_exec($CH)执行请求后,将结果直接返回给前端。这使得攻击者可以轻松地获取服务器上的敏感信息或探测内部网络。

解决
- 严格验证和过滤用户输入:使用白名单验证输入的URL,确保只允许访问特定的外部资源。
- 限制CURL的协议和功能 :通过
curl_setopt()函数限制CURL仅支持HTTP/HTTPS协议,禁止FILE等敏感协议。 - 对响应内容进行过滤:避免直接输出CURL请求的结果到前端,防止泄露敏感信息。
SSRF(file_get_content)
成因
- 直接使用用户输入 : 代码通过
$_GET['file']接收用户的输入,并将其存储在$filename变量中,然后直接传递给file_get_contents()函数。

这种直接使用用户输入的方式使得攻击者能够传入任意的URL或路径来执行任意请求。
- 缺乏输入验证和过滤 : 在代码中,没有对传入的文件路径或URL进行任何验证或过滤。攻击者可以利用这一点,提供恶意的文件路径或URL来实现其目的。例如,使用
php://伪协议来读取PHP源文件的内容或使用http://来请求内部网络资源。 - 支持多种协议和路径 :
file_get_contents()函数不仅可以读取本地文件,还可以通过HTTP、FTP等协议访问远程资源。因此,攻击者可以利用此函数读取服务器上的本地文件或请求内部网络中的服务。
解决
- 严格验证和过滤用户输入:确保只允许访问特定的外部资源(例如使用正则表达式或URL白名单)。
- 禁用不必要的协议 :使用特定函数来禁止访问敏感协议,如
php://、file://等。 - 对返回的内容进行处理:避免直接输出用户请求的内容,或者对敏感信息进行过滤。
- 考虑使用安全的替代方法 :如使用
cURL并限制其功能或仅支持特定的协议。