1.总结CSRF和XSS区别
- 1XSS 允许攻击者在受害者的浏览器上执行js代码;而 CSRF 不行。
- XSS 通过窃取受害者的cookie 来实现账号接管,如果目标站点使用了httponly 这就行不通了;CSRF 通过浏览器发起请求,自动携带受害者的cookie信息,即使有 httponly也不影响CSRF 攻击的实现。
- XSS 的危害更大。攻击者如果成功实现了XSS 攻击,那通常意味着他可以使用受害者在这个网站的所有功能,而CSRF只限于特定的存在漏洞的功能。
- CSRF 无法让攻击者获取到服务器返回的数据,由于请求是由受害者的浏览器发起的,那么服务器的响应最后还是给到了受害者那里,攻击者是拿不到这部分数据的,所以对于一些查询类功能,即便没有做任何防御CSRF的措施,它也几乎是没有利用价值的;而XSS由于可以执行js代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如前面XSS章中提到的回传cookie。
- 在XSS攻击中,恶意代码存储在站点中,而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。
2.总结CSRF攻击步骤
- 访问受信任网站A,输入用户名和密码请求登录网站A;
- 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B(攻击者构造的网站);
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
3.总结CSRF手工构造POST型页面方法
1.确定目标网站
确定该网站存在CSFR漏洞以及请求方式为POST,可以通过BP抓包查看url,请求方式,参数等。
2.构造HTML表单
创建一个HTML表单,表单的action属性应设置为目标网站的URL,method属性应设置为POST。在表单中添加input元素,这些元素的type属性设置为hidden,然后根据URL所需要的参数,name为参数名,value设置为攻击者希望发送的值。
示例:
<form action="http://target.com/malicious" method="POST">
<input type="hidden" name="username" value="victim_username">
<input type="hidden" name="password" value="victim_password">
<button type="submit">点击</button>
</form>
3.诱骗用户点击
将其布置到自己的vps上,然后伪造一个看起来像来自可信来源的消息,通过电子邮件、社交媒体等方式发送给目标用户,诱骗用户点击提交按钮。
4.说明token类CSRF利用方法
1.Token的工作原理:
客户端把用户的用户名和密码发到服务端;
服务端进行校验,校验成功会生成token, 把token发送给客户端;
客户端自己保存token, 再次请求就要在Http协议的请求头中带着token去访问服务端,和在服务端保存的token信息进行比对校验。
2.CSRF Token Tracker可以自动获取 csrf 的 token,对于一些有 csrf 限制的请求,它可以绕过该限制,如暴力破解具有 csrf token 的登录请求。在BApp Store中可以直接安装。
3.在pikachu靶场演示使用方法
修改两次信息并提交,burpsuite抓包,发现每次提交请求token都会变化。
原本在repeater中修改参数值,send后不能成功修改数据,说明有验证token,使用CSRF Token Tracker自动识别Token值,之后每次提交的重放都会自动识别并填充token值来实现绕过的目的。
5.SSRF常用伪协议
file:// 从文件系统中获取文件内容,如file:///etc/passwd
dict:// 字典服务协议,访问字典资源,如 dict:///ip:6739/info:
ftp:// 可用于网络端口扫描
sftp:// SSH文件传输协议或安全文件传输协议
ldap://轻量级目录访问协议
tftp:// 简单文件传输协议
gopher://分布式文档传递服务
6.SSRF pikachu靶场通关
第一关(curl)
点击链接,发现这里出现了一个url地http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
1.通过网址访问链接
比如说修改url为:url=http://www.baidu.com
,访问百度页面:
2.利用file协议查看本地文件
修改url为:url=file:///f:/test.txt
,查看文件的内容:
3.dict协议扫描内网主机开放端口
使用dict协议可以获取内网主机开放端口相应服务的指纹信息,比如说内网主机开了http端口的话,可以修改url为:url=dict://127.0.0.1:80
第二关(file_get_content)
点击链接,发现这里出现了一个url地http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
1.file读取本地文件
修改file为:file=file:///F:/test.txt
,查看文件的内容:
2.http协议请求内网资源
修改file为:file=http://127.0.0.1/pikachu/vul/sqli/1.php
,查看文件的内容:
7.SSRF靶场通关时根据源代码说明漏洞成因(加分项)
第一关(curl)
部分关键源代码:
根据源码可以看到,这里对传入的url参数没有做任何过滤,然后就直接对传入的参数执行了curl。
第二关(file_get_content)
部分关键源代码:
根据源码可以看到,这里对传入的file参数没有做任何过滤,然后就直接对传入的路径进行了文件读取。