iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
Security

【CTF衝衝衝 - Web篇】系列 第 21

【第二十一天 - Javascript】

Q1. 什麼是 Javascript ?

  • Javascript 是一種腳本語言,可以動態的更新頁面內容、控制多媒體...
  • 網頁前端主要由三個部分組成
    • 組織頁面的內容,並給予定義,例如標題、段落、欄位名稱、嵌入圖片名稱等 (使用 HTML 標記語言 )
    • 協助頁面內容套入樣式,例如更改背景顏色、字型,讓頁面變得更好看 (使用 CSS 樣式規則語言)
    • 動態的變動頁面內容,使用者可以與頁面進行互動 (使用 Javascript 腳本語言)

參考資料:https://developer.mozilla.org/zh-TW/docs/Learn/JavaScript/First_steps/What_is_JavaScript

Q2. 線上 JS 直譯器:

Q3. JS 手法(1):

  • JS 儲存帳密/關鍵資訊
    • 由於 JS 是在 client 端執行 (前端),若在 JS 儲存重要資料,則容易造成資料外洩
      • 程式碼/註解可能儲存帳密、一段關鍵雜湊碼(可使用 John the Ripper 進行解密)
    • 使用右鍵或 F12 檢視原始程式碼
    • view-source:<網址>檢視網頁原始碼,尤其是網頁右鍵被鎖住時
    • 關鍵資訊也有可能與其他頁面相關
      • e.g. <原本的網址>/<關鍵資訊> 可能儲存真正的 flag
  • JS 執行程式
    • 網頁進行身分驗證時,應當將驗證功能寫在後端。
    • 如果寫在前端,由於 JavaScript 會在使用者端執行,即使經過混淆,仍有被逆推的可能性。
    • CTF 中,時常出現前端驗證的題目,有些會將 Script 進行編碼,有些會混淆,常用函數如下:
      • string.substring(開頭 index, 結尾 index): 從大字串中切出小字串,例如從大字串中切取數字,經過一系列運算後得到 key。
      • escape(字串): 將特殊字元進行 url encoding 形式的編碼,但不會跳脫 @*/+ ,可用 unescape(字串) 解碼。
      • eval(字串) 會將傳入的字串當作 JavaScript 執行,是一個很危險的函式
      • jscript.encode: 將 Script 編碼,使得攻擊者難以閱讀,不過可以使用 http://the-computer-site.com/jscript-decode.php 進行解碼。
        • 此編碼方式為 Microsoft 提出,一般只能用於 IE 。
      • jsfuck: 將 JavaScript 轉換為只有符號的形式,但不須解碼仍可執行。
      • aaencode: 同上,另一種轉換為符號的混淆工具。
    • 當 JS 經過混淆後,有時逆向十分耗費心力,此時可以嘗試直接執行一小段程式碼,直接將輸出印出來查看,藉此觀察功能,可用函數如下:
      • alert(variable)
      • confirm(variable)
      • console.log(variable)

參考資料:https://introspelliam.github.io/2017/11/12/misc/CTF比赛中关于javascript的总结/

參考資料:https://www.itread01.com/p/1011168.html

參考資料:https://web2hack.org/xssee/


上一篇
【第二十天 - PHP反序列化(2)】
下一篇
【第二十二天 - XSS Lab】
系列文
【CTF衝衝衝 - Web篇】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言