湖北國聯(lián)計算機(jī)科技有限公司
  • 首頁HOME
  • 公司簡介INTRODUCTION
  • 安全防御DEFENSE
  • 軟件開發(fā)SOFTWARE
  • 物聯(lián)網(wǎng)IOT
  • 運(yùn)行維護(hù)SRE
  • 成功案例CASE
  • 聯(lián)系我們CONTACT
  • SOFTWARE |軟件開發(fā)

    SOP,CORS,CSP 是什么,是做什么的,如何繞過?
    來源:湖北國菱計算機(jī)科技有限公司-湖北國聯(lián)計算機(jī)科技有限公司-荊州網(wǎng)站建設(shè)-荊州軟件開發(fā)-政府網(wǎng)站建設(shè)公司 時間:2025-06-10

    大家好,因為之前的文章中一些有小伙伴提內(nèi)容安全策略,還有同源策略等內(nèi)容,這篇文章一起講一下它們是什么,以及它們能做什么,還有如何繞過它們。

    JSRPC

    同源策略和內(nèi)容安全策略會影響JSRPC 代碼注入和執(zhí)行的過程,所以為了更好的進(jìn)行 JSRPC 注入,需要了解如何繞過它們。

    同源策略

    同源策略(Same-origin policy)是瀏覽器強(qiáng)制實施的一種安全機(jī)制,限制不同源的文檔或腳本之間的交互。默認(rèn)情況下,瀏覽器禁止非同源請求,除非目標(biāo)服務(wù)器明確返回 Access-Control-Allow-Origin 響應(yīng)頭。

    說到同源策略,可能有小伙伴會疑惑,那跨域是啥?跨域這個詞在后端開發(fā)中經(jīng)常聽到,和同源策略有什么關(guān)系呢?

    跨域是指從瀏覽器中發(fā)起的請求與當(dāng)前頁面來源不同,即違反同源策略,違反同源策略的請求會被瀏覽器拒絕。

    例如從 https://aa.com 請求 https://bb.com 的數(shù)據(jù),會被瀏覽器攔截并且報錯提示用戶,我這里使用百度來演示:

    image-20250331194830390

    所以,同源策略和跨域的區(qū)別就是:同源策略是瀏覽器制定的安全規(guī)則,跨域是觸發(fā)該規(guī)則限制的請求或操作。

    那如何繞過同源策略呢?有下面幾種方案:

    1. 服務(wù)端設(shè)置響應(yīng)頭:Access-Control-Allow-Origin: *  // 或指定域名,這種方式就叫做:跨源資源共享(CORS,或通俗地譯為跨域資源共享)

    2. 通過 <script> 標(biāo)簽加載跨域腳本,也就是 JSONP,但是只支持 GET 請求。

    3. 使用nginx 或者其他代理服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。

    4. 在瀏覽器的啟動參數(shù)中添加 --disable-web-security 參數(shù),可以臨時禁用同源策略,但是會降低瀏覽器的安全性,不要用于生產(chǎn)環(huán)境。

    那應(yīng)該如何繞過同源策略呢?可以使用第一種方案,直接修改響應(yīng)頭。

    注:websocket 協(xié)議默認(rèn)是不會受到同源策略限制的,可以隨意使用。

    proxyman 打個斷點,重新執(zhí)行剛才訪問百度的代碼,在 proxyman 中給訪問百度的請求手動添加請求頭 Access-Control-Allow-Origin,即可繞過同源策略訪問百度了。當(dāng)然了,如果是自己可控的服務(wù)器,可以直接在后端設(shè)置,就不用抓包了。

    image-20250331203621767

    image-20250331203329530

    總結(jié)一下同源策略,說白了就是限制其他的網(wǎng)站讀取本服務(wù)器的響應(yīng),它保護(hù)的是服務(wù)器資源不被未授權(quán)的網(wǎng)站讀取

    內(nèi)容安全策略

    內(nèi)容安全策略(Content Security Policy,簡稱CSP),相比于同源策略更加可靠,它是一種白名單機(jī)制,開發(fā)者明確配置哪些外部的資源可以執(zhí)行,在白名單以外的所有資源都不會被執(zhí)行。開發(fā)者只需要提供一些配置即可,瀏覽器會自動按照配置執(zhí)行。

    內(nèi)容安全策略可以通過兩種方式啟用,一種是 Content-Security-Policy 請求頭,另一種是 <meta> 標(biāo)簽。

    內(nèi)容安全策略可以控制是否加載圖片、腳本、AJAX和CSS資源,并且默認(rèn)情況下會禁止執(zhí)行 eval , newFunction , setTimeoutsetInterval。

    如果一個網(wǎng)站開啟了內(nèi)容安全策略,那默認(rèn)情況下你無法在控制臺使用 document.head.append 添加一個外部源的腳本,并且內(nèi)容安全策略還會影響 Safari 瀏覽器中的油猴腳本的執(zhí)行,因為 Safari 中的拓展腳本會遵守網(wǎng)站的內(nèi)容安全策略,導(dǎo)致油猴腳本無法執(zhí)行。

    同時因為設(shè)置了白名單,也能阻止一些攻擊,例如XSS。

    那應(yīng)該如何繞過內(nèi)容安全策略呢?

    部分的瀏覽器拓展可以通過瀏覽器拓展的網(wǎng)絡(luò)攔截Api 刪除掉網(wǎng)站設(shè)置的內(nèi)容安全策略請求頭,但是無法修改響應(yīng) body,也就導(dǎo)致了如果策略設(shè)置在 body 中的 <meta> 標(biāo)簽中,則無法繞過。這個時候可以嘗試使用這個瀏覽器拓展[1]來繞過,它會連接devtools 工具來攔截修改 Body,具體使用方式見項目中的readme。

    還有一種方式就是通過中間人的方式來繞過。因為中間人是獨立于瀏覽器之外的,不會受到瀏覽器的任何限制,且可以隨意更改請求和響應(yīng),所以用它來繞過內(nèi)容安全策略再方便不過了。

    來看一個示例:

    image-20250331212223837

    Github 默認(rèn)是啟動內(nèi)容安全策略的,并且在策略中配置了一大堆域名,也就是說默認(rèn)情況下,任何非 Github 域名的腳本都無法被加載和執(zhí)行。

    嘗試一下加載外部的腳本,被拒絕了,提示它不是Github 官方的腳本。嘗試使用中間人的方式來繞過內(nèi)容安全策略,因為策略是設(shè)置在響應(yīng)頭中的,那么只需要打個斷點在響應(yīng)頭中刪掉它就好了。

    image-20250331212754761

    打個斷點,在響應(yīng)頭中,刪除圖中的這個響應(yīng)頭,然后點擊右下角的執(zhí)行。

    image-20250331212830419

    可以看到瀏覽器中的響應(yīng)頭中已經(jīng)沒有內(nèi)容安全策略對應(yīng)的響應(yīng)頭了。

    image-20250331212907740

    image-20250331212921118

    并且在瀏覽器中加載外部的腳本不會報錯了,雖然這個腳本404 了,因為這個腳本本來就是不存在的,只是為了測試能否正常加載。

    至此,就可以完全繞過內(nèi)容安全策略的保護(hù)了。如果嫌打斷點麻煩,可以使用上篇文章中提到的中間人腳本的方式實現(xiàn)自動化刪除內(nèi)容安全策略的響應(yīng)頭,同時也可以修改body 刪除對應(yīng)的 <meta> 標(biāo)簽,就可以完全繞過內(nèi)容安全策略的保護(hù)了。

    總結(jié)

    如果大家在實際的逆向中遇到了JSRPC 注入代碼被攔截的情況,可以使用上面的方式嘗試?yán)@過。

    轉(zhuǎn)載自:程序員指北

    荊州地區(qū)政府網(wǎng)站建設(shè) 解決方案 專業(yè)團(tuán)隊 騰訊第三方平臺 地址:湖北省荊州市沙市區(qū)荊沙大道楚天都市佳園一期C區(qū)29棟112       地址:湖北省松滋市新江口街道才知文化廣場1幢1146-1151室     郵編:434200 聯(lián)系電話:0716-6666211     網(wǎng)站編輯部郵箱:business@gl-ns.com 鄂公網(wǎng)安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業(yè)名稱:湖北國菱計算機(jī)科技有限公司