目录
任务一、总结CSRF和XSS区别
(1)XSS 允许攻击者在受害者的浏览器上执行js代码;而CSRF不行。
(2)XSS通过窃取受害者的cookie来实现账号接管,如果目标站点使用了httponly这就行不通了; CSRF通过浏览器发起请求,自动携带受害者的cookie信息,即使有httponly 也不影响CSRF攻击的实现。
(3)XSS 的危害更大。攻击者如果成功实现了XSS攻击,那通常意味着他可以使用受害者在这个网站的所有功能,而CSRF只限于特定的存在漏洞的功能。
(4)CSRF无法让攻击者获取到服务器返回的数据;而XSS由于可以执行js代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如前面XSS章中提到的回传cookie。
任务二、总结CSRF攻击步骤
(1)用户C打开浏览器登陆受信任网站A,输入账号密码
(2)cooike被保存在浏览器中,用户C被诱导打开另一个网页登录恶意网站B
(3)恶意网站直接调用cookie以合法身份对受信任网站执行恶意操作
任务三、总结CSRF手工构造POST型页面方法
(1)确定目标网站的POST请求格式
观察目标网站的正常请求,查看表单的提交方式(POST),以及需要提交的参数名和对应的值。使用Burp Suite、浏览器开发者工具等,捕获和分析这些请求。
(2)构造伪造的HTML表单
根据捕获到的正常POST请求参数,构建一个伪造的HTML表单。攻击者会将表单的action指向目标网站的处理URL,表单中的输入项包含伪造的值。
(3)表单提交
诱导合法用户点击网站完成攻击,可以将网站设置成刷新页面
举例
看请求包中传递的参数有 sex/phonenum/add/email/submit
<html>
<head>
<title>This is a Test Page</title>
<meta charset="UTF-8">
</head>
<body>
<form action="http://172.20.10.2/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
<input type="hidden" name="sex" value="man" />
<input type="hidden" name="phonenum" value="123456789" />
<input type="hidden" name="add" value="保安室" />
<input type="hidden" name="email" value="cyber@xxx.xxx" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="点我刷新⻚面" />
</form>
<script>history.pushState('','','/')</script>
<!-- 在浏览器的历史记录(history)中添加一个新的记录,而不会导致⻚面重新加载。用于
实现⻚面的无刷新跳转或更新URL而不重新加载⻚面的效果。 -->
</body>
</html>
任务四、说明token类CSRF利用方法
Token是为了提高安全性,每次请求增加的一个随机码,后台对这个随机码进行验证
这个随机码被伪造很困难,但我们可以捕获它如果攻击者能够获取受害者的CSRF Token,就可以利用该Token发起伪造请求。
Token泄露的途径包括:
XSS如果目标网站存在XSS漏洞,攻击者可以通过植入恶意脚本来窃取CSRF Token。Token通常嵌入在页面的HTML中,攻击者可以通过JavaScript提取并发送给自己。
利用方法:攻击者通过XSS注入JavaScript代码,从页面中提取CSRF Token并将其发送给攻击者服务器,然后使用这个Token构造并发送合法的伪造请求。
Referer头信息泄露:某些情况下,Token可能会被包含在URL中。如果目标网站将Token放在URL中(例如重定向时附加在参数中),那么Referer头信息可能会泄露这个Token。例如,通过某个外部链接跳转时,Referer可能会包含Token,攻击者可以通过日志或流量分析获取它。
实例:
进入提交系统后打开抓包,点击提交
此时bp抓取到请求包,我们将包发送到重放器
我们借助bp里的插件CSFR Token Tracker
在host填写本机地址 名称设置token来抓取token值
发现提交发送后每次token值都不一样
(已在设置点击一直跟随重定向)
在重放器修改要改的值后
将包里的token放到CSRF Token Tracker的token中,再次在重放器发送包,点击跟随重定向
任务五、SSRF常用伪协议
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种利用服务器发送HTTP请求的攻击方式。为了绕过一些安全限制或访问未公开的资源,攻击者常常利用各种伪协议。这些伪协议可以帮助攻击者访问本地文件、内网服务、甚至进行代码执行。常见的SSRf伪协议有:
1. file://
用于访问服务器上的本地文件。例如:file:///etc/passwd
通过读取文件,可以获取服务器上的敏感信息。
2. ftp://
支持文件读取和目录遍历,也可以用于匿名FTP登录尝试。
例如:ftp://ftp.example.com/
3. gopher://
Gopher协议允许构造任意TCP请求,因此可以进行类似HTTP、SMTP等协议的伪造攻击。
例如:gopher://127.0.0.1:25/ 用于发送伪造的SMTP请求。
4. http:// 和 https://
这是SSRf攻击中最常见的协议,利用服务端的HTTP客户端来访问特定资源。
例如:http://localhost/admin,访问本地的管理页面。
5. php://
常见于PHP环境中,允许读取和操作输入输出流。
例如:php://input 读取POST请求体,或使用 php://filter 进行编码和解码操作。
6. data://
可以直接在URL中插入Base64编码的数据,利用该协议可以绕过一些URL过滤规则。
例如:data:text/plain;base64,aGVsbG8gd29ybGQ=
7. mysql://
利用MySQL协议发送请求。
例如:mysql://127.0.0.1:3306/ 进行数据库探测。
任务六、SSRF pikachu靶场通关
SSRF(curl)
curl的用法:https://www.runoob.com/php/php-ref-curl.html
SSRF(file_get_content)
任务七、SSRF靶场通关时根据源代码说明漏洞成因(加分项)
(源代码在搭建靶场的文件夹WWW/pikachu/vul内是每一关的源代码)
SSRF(curl)
输出的url来自于用户直接的输入,而且没有任何过滤就直接进行curl_exex,执行curl会话
SSRF(file_get_content)
Url直接从文件中获取,也没有任何过滤