當前位置:
首頁 > 最新 > 2018 RCTF-WEB題 AMP記錄

2018 RCTF-WEB題 AMP記錄

這是一道RCTF2018的web題,22solved

題目地址:

http://amp.2018.teamrois.cn

github地址:

https://github.com/zsxsoft/my-rctf-2018/tree/master/amp


打開頁面,提示輸入name作為請求參數:

測試name參數yunsle,頁面提示如下:

點擊STOP TRACKING ME後,提示將會記錄請求request並發送給admin:

查看cookie內容,發現提示,flag在admin的cookie中:

提示中提到記錄請求以及將會發送給admin,很自然地想到XSS,於是嘗試name參數:

但是頁面並沒有彈窗,並且在控制台輸出:

查看http響應頭,發現了做了CSP內容安全策略,並且設置了script-src

了解CSP可以看這裡:https://developer.mozilla.org/zh-CN/docs/Web/Security/CSP

script-src屬性開啟將對當前頁面上可執行的JS源進行了限制

查看源代碼可以看到,所有引用的JS都申明了一個nonce屬性,nonce屬性中的value是服務端隨機生成的字元串

只有申明了nonce屬性,並且nonce值和服務端隨機數一致時才能執行JS來源:

於是,自然地,嘗試繞過這裡的CSP規則

之前有看到過針對nonce的繞過操作,是利用頁面上XSS點之後較近的JS引用中的nonce屬性,簡單來說可以看下面實例:

當插入點可控時,可以建立如下的payload:

此時,payload插入之後的頁面上,將變成:

這樣就講nonce包含到了構建的JS引用中,導致繞過

在這裡,用上述繞過姿勢引入放在伺服器上的JS代碼,在代碼中創建img標籤,在img的src中加入cookie值

最後src中將打到ngrox上

構建payload如下:

伺服器上JS內容:

name參數設置為payload提交後,查看本地瀏覽器已經執行了從伺服器上載入的JS代碼,並且將本地的cookie打到了ngrox:

接下來點擊STOP TRACKING ME按鈕後,等待伺服器端admin查看頁面,將cookie打過來

但是等了一會後,接收到的打過來的cookie依然不是真正的flag!

到這裡就懵逼了,打回來的cookie裡面仍然是提示:

用ceye再嘗試接收了一次,仍然是失敗的結果:


等比賽結束,看WP後發現,考點是在AMP上(題目和代碼注釋里都提示了,然而沒有去想。。)

AMP的官網:

https://www.ampproject.org/zh_cn/

簡單介紹就是:

這題的頁面中,使用了AMP,因此就引入了AMP的標籤,這就引入了AMP標籤的一些特性

官方文檔中,有如下的介紹:

在官方文檔上,對amp-pixel標籤有這樣一個代碼實例:

其中cid-scope-cookie-fallback-name意思是:文檔未由AMP代理服務時,備用cookie的名稱,如果未提供,則cid作用域將用作cookie名稱。

於是當構建如下payload時:

將會把cookie的FLAG的值賦值為變數值

對以上payload進行復現嘗試,拿到flag:


做題還是有一個快速學習能力的要求,很多東西都是在題目剛剛接觸時才會接觸到一個新的事物。這時候就需要快速對新事物進行了解,並且找到利用點,這點是最重要的。

另外,這題中AMP的功能和標籤要能生效,必須要能走https協議並且不能掛Burpsuit代理

如果掛了代理,https協議失效,v0.js並沒有真正生效,AMP標籤也會失效:

在一開始做題的時候,開了瀏覽器的Burpsuit代理,所以使用CSP繞過payload可以提交上去(沒有被AMP載入的v0.js禁止),但是打不到flag

當不走Burpsuit的時候,payload是提交不了的,會被AMP載入的JS限制,如圖:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 安全客資訊平台 的精彩文章:

在午餐前獲取內部網路域管理員的五大方法
1.5億 MyFitnessPal 賬戶信息遭泄露

TAG:安全客資訊平台 |