实训作业day06
一、CSRF和XSS区别
-
XSS 允许攻击者在受害者的浏览器上执行 js 代码,而 CSRF 不行。
-
XSS 通过窃取受害者的 cookie 来实现账号接管,如果目标站点使用了httponly 这就行不通了;CSRF 通过浏览器发起请求,自动携带受害者的cookie信息,即使有 httponly 也不影响 CSRF 攻击的实现。
-
XSS 的危害更大。攻击者如果成功实现了 XSS 攻击,那通常意味着他可以使用受害者在这个网站的所有功能,而 CSRF 只限于特定的存在漏洞的功能。
-
CSRF 无法让攻击者获取到服务器返回的数据。由于请求是由受害者的浏览器发起的,那么服务器的响应最后还是给到了受害者那里,攻击者是拿不到这部分数据的。所以对于一些查询类功能,即便没有做任何防御 CSRF 的措施,它也几乎是没有利用价值的;而 XSS 由于可以执行js代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如回传 cookie。
二、CSRF攻击步骤
如图,攻击步骤:
-
发现CSRF
- 有两种情况:
- 抓取一个请求的数据包,如果这个接口的请求包中没有设置referer和token字段该网站可能存在CSRF漏洞。
- 抓取一个请求的数据包,如果这个接口的请求包中设置了referder和token字段删除字段和仍可正常访问,该网站可能存在CSRF漏洞。
- 有两种情况:
-
伪造页面
- 攻击者利用存在CSRF漏洞的网站构建的恶意网站,将链接发给受害者。
-
诱导点击
- 攻击者通过社会工程学等方式诱导受害者。当受害者访问了这个有害界面时,其利用页面中的恶意代码强制用户向某个具有CSRF漏洞的服务器发送请求。这个请求因为是从受害者端发出的,因此会自动带上受害者的Cookie。服务器接收到这个请求后,认为是合法用户的请求进而执行,使得攻击者的计谋得逞。
三、CSRF手工构造POST型页面方法
-
由于不能直接发给用户一个网站从而修改其用户信息,必须要通过表单提交的信息才行,所以设计一个钓鱼页面(新建后缀为html的文件)。
-
按照html的基本语法写好框架。
<html> <head> <title>标题</title> <!--标题自拟--> <meta charset="UTF-8"> </head> <body> <form action="url " method="post"> <!--url是修改用户信息页面的url --> <!--待写的输入框的代码--> </form> <script>history.pushState('','','/')</script> <!--在浏览器的历史记录(history)中添加⼀个新的记录,⽽不会导致⻚⾯重新加载。⽤于实现⻚⾯的⽆刷新跳转或更新URL⽽不重新加载⻚⾯的效果。--> </body> </html>
-
填好url和标题信息后,将网页每个需要填写的信息作为一个含input标签(标签类型为”hidden”)的元素并输入属性。
-
最后还需要一个类型为“submit”的input标签用于提交表单。
四、token类CSRF利用方法
token验证
服务器会在cookie中保存一个csrf_token_key, 用作钥匙。 服务器会在页面生成时,获取csrf_token_key这个钥匙,
生成一个随机的csrf_token令牌,当表单提交时,获取到csrf_token 通过
csrf_token_key解密比较是否一致。所有的HTTP 请求中以参数的形式加入一个随机产生的
token,并在服务器端建立一个栏截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是
CSRF 攻击而拒绝该请求。
token类CSRF防御原理
csrf利用方式为利用from表单提交参数给被攻击站,参数必存在于from表单中token传递为被攻击站点击站内按钮,激活站内post传递参数,参数中存在token。而且token不会像cookie一样被自动添加,必须激活站内按钮进行post传递csrf无法让被攻击站模拟出按钮点击动作。
token类CSRF攻击步骤
-
以pikachu上的关卡为例,在burpsuite上安装CSRF Token Tracker插件,且在Burp extention中启用。
-
登录kobe账号,进入修改信息界面,点击“submit”。
-
返回burbsuite查看抓到的包,发送给重放器后,开启跟随重定向。
-
在 CSRF Token Tracker 模块中填写 Host 地址(可以参考数据包中的 Host 值)及 Token 的参数名称(也是参考数据包)然后勾选两个选项。
-
在重放模块中更改参数sex为“man”,点击“Send”。
-
回到pikachu界面,发现信息已修改。
五、SSRF常用伪协议
- 伪协议 (也称为非标准协议或假协议)指的是网络应用程序中支持的协议类型,通常被用于绕过防御措施或利用SSRF 攻击。攻击者利用这些伪协议,通过服务器端请求来访问敏感数据或执行意外行为。
- SSRF常用伪协议有:
- file协议:主要用于访问本地计算机中的文件。在有回显的情况下,利用file协议可以读取任意文件的内容。如:ssrf.php?url=file:///etc/passwd,通过此请求可以读取服务器上的/etc/passwd文件。
- http/https协议:用于访问网络资源,如网页、图片等。http协议通常用于GET请求,而https是http的安全版本,增加了数据加密。如:ssrf.php?url=http://192.168.25.203,通过此请求可以访问内网中的某个IP地址上的资源。
- dict(字典服务器协议):访问字典资源,如,dict:///ip:6739/info。
- sftp(SSH 文件传输协议或安全文件传输协议): Linux 中,Windows 不存在。
- ldap(轻量级目录访问协议)
- tftp(简单文件传输协议)
- gopher(分布式文档传递服务):可使用 gopherus (工具) 生成 payload。由于有部分协议 http 这类不支持,可以 gopher 来进行通讯(mysql、redis 等)。
六、SSRF pikachu靶场通关
-
SSRF(curl)
-
修改URL为:http://www.baidu.com 访问百度页面。
-
修改URL为:file:///E:/homework/xinyue/BurpSuite/BurpSuiteCommunity/1.txt访问本地文件1.txt。
-
-
SSRF(file_get_content)
-
与SSRF(curl)操作相似,在“file=”后修改相应的url,访问百度页面。
-
访问本地文件1.txt。
-
七、根据源代码说明SSRF漏洞成因
-
SSRF(curl)
-
URL参数未验证:
if(isset($_GET['url']) && $_GET['url'] != null){ $URL = $_GET['url']; $CH = curl_init($URL);
- 代码从用户输入的$_GET[‘url’]参数中直接获取URL并用于curl_init函数,未对输入进行有效的验证或过滤。这允许攻击者提供恶意的URL。
-
未限制请求目标:
curl_setopt($CH, CURLOPT_HEADER, FALSE); curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt配置允许请求任何指定的URL,包括内部服务或本地网络上的服务。这使得攻击者可以利用该请求来扫描内部网络、访问内部API,或者获取内部系统的信息。
-
敏感信息泄露:
- 由于未进行响应处理,恶意请求可能会返回敏感的系统信息。如果内部服务的响应被返回给攻击者,可能会暴露重要信息。
-
-
SSRF(file_get_content)
-
用户输入未经过滤:
$filename = $_GET['file'];
- $_GET[‘file’] 直接用于 file_get_contents() 函数,没有进行任何过滤或验证。这允许攻击者通过在 file 参数中提供恶意输入来读取任意服务器上的文件。
-
路径控制不严格:
$RD = explode('/',$FILEDIR)[1];
- 虽然使用了 explode() 函数来处理路径,但如果攻击者能够提供特殊的路径参数(如本地文件或内网资源),仍然可以访问不应该公开的文件。
-