這篇是我web攻擊的隨筆,很亂,酌情參考。


Web入門

靶機介紹

OSI與DoD模型

  • 依據網路運作方式,OSI模型共切分成7個不同的層級,每級按照網路傳輸的模式,定義所屬的規範及標準。
  • DoD 模型與網路互連的關聯


    首先,使用者端會發出 HTTP 請求(裡面包含了使用者資料);然後到了傳輸層再加上 TCP 表頭;到了網路層,再加上 IP 表頭;到了網路連結層,再加上乙太表頭,整體會變成一個網路封包,再整包傳給伺服器端,一層層往上處理至 Server。

  • 那如果傳送的是含 TCP 表頭的網路封包(因為也有可能傳送的是含 UDP 表頭的封包),必須要經過「三向交握」來建立連線。三向交握簡單來說就是使用者端會發出 SYN 封包給伺服器,伺服器再回傳 SYN/ACK 封包給使用者,使用者端再傳送 ACK 封包。如此三次來回,即可開始傳輸封包
  • 完成三向交握後,就可以開始傳送 TCP 封包。而直到封包傳送完,回傳 200 OK 狀態碼,才表示資料傳送完成。傳送完封包,瀏覽器便開始渲染網頁。
    這時如果還欲傳送其他資料,就從下圖中的第 2 點至第 4 點再重複一次,直到所以資料都傳送完,進行 TCP 四次揮手,終止連線。

    (補充: 若請求的網站為 HTTPS,則表示其為加密網站,在傳輸層及應用層多了一道 SSL / TLS 憑證。此網站使用 WireShark 去監測封包,會看不到封包內容,比較安全;若為 HTTP 網站,則表示沒有加上 SSL / TLS 憑證。HTTP 是走 80 port;HTTPS 則走 443 port)

  • 瀏覽器的渲染過程

  • 總結


    參考資料
    https://medium.com/yu19941994/%E7%B6%B2%E8%B7%AF%E8%AB%8B%E6%B1%82%E8%88%87%E7%80%8F%E8%A6%BD%E5%99%A8%E6%B8%B2%E6%9F%93-2c1232c23fbf

XSS攻擊

  • 漏洞成因

    • avascript這個在前端上不可或缺的語言,不過就是因為他的方便性,也常常變成駭客拿來利用的工具
    • 駭客可能會在你瀏覽的網頁中,允許惡意的使用插入惡意的javascript,達到某種目的,簡單的可能只會瘋狂地跳alert視窗,嚴重的可能竊取別人的帳戶資訊,接下來就一一介紹XSS的各種型態
  • :::spoiler 反射型(Reflected)
    • 讓使用者發出惡意的requests(可以是網址, 奇怪的按鈕, 表單form…),後端如果沒有過濾,將結果傳給給前端,瀏覽器就有可能執行這段惡意的程式碼
    • 需要社交工程,不能做主動攻擊
      :::
  • :::spoiler DOM型(Dom-based)
    • DOM 全名為Document Object Model,能將HTML中的各個標籤形成一個樹狀結構
    • 詳細資料:DOM
    • 發生原因
      • 使用DOM的API的時候,使用innerHTML,就可能將script插入到網頁當中
      • 觸發跟反射型類似,只差在反射型把資料傳給後端,但DOM不會
        :::
  • :::spoiler 儲存型(Stored)
    • 會將惡意語法儲存到伺服器或資料庫當中
    • 通常會發生在論壇文章、留言板…等
    • 當使用者瀏覽時,就可能讀取到資料庫中的惡意語法,瀏覽器進而去執行
      :::
  • XSS攻擊偵測

  • 偷取cookie

    • Cookie是甚麼
      :::spoiler

      為了能保持server端與client端保持長久的互動與活動狀態,server會給瀏覽器一組或多組的key/value,儲存在瀏覽器當中
      一般來說cookie會用來紀錄用戶的資訊,常見狀況是用在購物網站的購物車、會員登入或瀏覽紀錄也就是為甚麼在瀏覽器登入fb, twitter…過後,下次打開不需再次登入,因為cookie已經記住你的帳戶資訊
      換句話說,當駭客想要竊取帳戶資訊,可以透過竊取別人瀏覽器留下的cookie,來偽造登入
      :::

    • 架設環境
      • 利用docker-compose, 將東西container化也方便跨平台架設
    • 工具 - Pipedream
      • 為了要將cookie彈回server,可以使用線上工具,就不需要自架server或租VPS
      • 新增一組新的workflow,接收HTTP requests
      • https://pipedream.com/workflows
    • 工具 - EditThisCookie

SQL injection

  • 介紹

    • 發生在後端與資料庫之間的安全漏洞。駭客在輸入的字串中能夠夾帶SQL指令,並沒有過濾字串
    • 通常是使用字串串聯方式來構成SQL的指令,若又在連線的時候使用權限過大的帳戶(工程師偷懶使用root或sa連接資料庫XD),甚至可以Get Shell
    • SQL-injection最經典的一部漫畫
      • 媽媽接到電話,你好,我這邊是你兒子的學校,我們電腦出了點狀況oh, 他用壞了甚麼東西嗎,媽媽問。 校方說: 可以這麼說
      • 校方說: 你真的把你兒子取名為 Robert’); DROP TABLE Students; – 嗎?媽媽說: 是的,我們都叫他寶貝table
      • 校方回說: 我們今年的學生資料都不見了,希望你覺得滿意。媽媽說: 希望你以後會記得把寫進Table的資料清掉
  • 例子

    • 網站的登入驗證
      sql = "SELECT * FROM users WHERE (name = '" + username+ "') and (pw = '"+ password +"');";
      db->execute(sql);
  • 這時駭客輸入在登入介面分別輸入
    • username: ‘ OR 1=1 –
    • password: ‘ OR 1=1 –
  • 組合完會像這樣
    • name = ‘1’ OR 1=1
      • 前面的語句就算邏輯錯誤,後面的1=1條件恆為True,False or True = True
      • 因此,後面兩個OR條件後的句子,都恆為True,進而達到沒有帳號密碼就能登入網站的尷尬情況
    • –為註解,目的是將無用的語句去掉
      • MySQL還有其他註解像是 #, /*
        sql = "SELECT * FROM users WHERE (name = '' OR 1=1--') and (pw = '' OR 1=1 --');";
        db->execute(sql);
  • 搭配漫畫的例子
    • 將password改成: ‘ OR 1=1; DROP TABLE Students; –
    • 很恭喜,你的整張表就直接不見囉
      sql = "SELECT * FROM users WHERE (name = '' OR 1=1 --') and (pw = '' OR 1=1; DROP TABLE users --');";
      db->execute(sql);
  • 如何避免?
    • 單純的過濾輸入,但駭客的手法百百種,他們能在有限的狀況下,又找出新的方法可以繞過恩,後面講的靶場就是模擬駭客在受限的各種字元過濾下,盡情的絞盡腦汁繞過
    • 比較安全的作法:
      • 使用prepared statements(預先準備SQL語句)搭配parameterized queries(參數化的查詢)
      • 透過預先準備SQL語句與參數化查詢,能讓資料庫知道說要插入甚麼值作為甚麼功用,就不會對甚麼OR 1=1 –和空的密碼做query,或是用;截斷語句做其他事情

1.資料收集的分類

  • 敏感目錄洩露

      1. git洩露
      • 正常git洩漏

        工具: https://github.com/denny0223/scrabble
        ./scrabble http://example.coom/
        執行工具即可取得原始程式碼 -> flag

      • git回覆

        git 是一個版本控制工具,會記錄每次提交(commit)的修改,所以當題目存在git洩漏之時,flag檔案可能在修改中被刪除或被覆蓋了。

        • 使用git的git reset來回覆到之前的版本,回到上一個檔案 “git reset –hard HEAD^”
        • 或是使用 “git log -stat” 來檢視每一個commit修改了甚麼檔案,再用 “git diff HEAD commit-id” 比較在目前版本與想檢視的commit之間的變化
      • git分支

        在每次提交時,git都會自動把他們串成一條時間線,就是分支。git允許使用多條分支,讓使用者從開發主線中抽離。因此,我們要找的flag可能不在目前的分支中,這時使用

        $ git log

        GitHacker(https://github.com/WangYihang/GitHacker)

        $ python GitHacker.py http://127.0.0.1:800/.git/ 
        //執行指令 進入資料夾
        $ git log --all or $ git branch -v //只能看到master分支資訊
        $ git reflog //checkout的紀錄 除了master還有一個secret分支

        但自動化工具只還原了master的資訊,secrat的head資訊需手動下載。

        $ wger http://127.0.0.1:8000/.git/refs/head/secret
        //恢復head資訊
      1. SVN洩漏
  • 敏感備份檔案

  • Banner識別