websec_bySplitline

Web Security (by Splitline)的整理

web 應用程式可簡易分成前端應用程式、後端應用程式、伺服器三部分,前端是以瀏覽器來解析資料並顯示給使用者的,後端是在伺服器上用來處理資料,包含伺服器軟體、資料庫系統及作業系統。

  • 前端語言:HTML、CSS、JavaScript
    • 開發框架:Vue.js、React.js、Angular.js、jQuery…
  • 後端語言:PHP、Python、Ruby、GoNode.js
    • 開發框架:Django、Flask、Laravel、Symfony…
  • 伺服器:ApacheNginxIIS
  • 資料庫:MySQLMariaDBPostgreSQLSQLite
  • 運作系統:WindowsLinuxMacOS
    註:node.js大致等於在後端運行的JavaScript

    HTTP protocol = HyperText Transfer Protocol

  • HTTP是一種文件傳輸協定,用來傳送資料,並且提供一個資料交換的標準。

    HTTP Header

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Method] [URL] [HTTP Version]
    [Header]
    Host: [Server]
    Referer: [Referer] (來源網址)
    User-Agent: [Browser]
    ...
    [Body]
    Content-Length: [Content-Length]
    ...
  • HTTP的請求方法是用來告訴伺服器要做什麼,例如GET、POST、PUT、DELETE等等。
  • SNI
  • Cookie是一種把資料放在HTTP Header中的方式,用來記錄使用者的資訊,例如登入資訊、訂閱資訊等等。
  • Cookie會和domain name, path綁定,所以只有綁定到domain name的cookie才會被傳送到相對應的網域。
  • 像是PTT的已滿18歲資料,選擇完後會被放入Cookie,之後瀏覽需要成年的網頁時,就會被拿出來。

工具

curl

  • 可以用來發送HTTP請求,並且可以接收回應。
    1
    2
    3
    4
    5
    6
    7
    8
    curl [domain_with_protocol]
    - -i/--include # show response header
    - -v/--verbose # show verbose info
    - -d/==data [POST data] # POST data
    - -X/--request ['PATCH'] # HTTP method
    - -H/--header #Set header
    - -b/--cookie #Set Cookie
    - -o/--output #Set output file

    Burpsuite

Before Attack

Recon

在攻擊之前先觀察建制環境,如前後端的編寫語言、語言版本、伺服器軟體、伺服器版本、伺服器環境、伺服器設定、伺服器資料庫、伺服器網域、伺服器網域等等。可以透過wrapperlyzer的plugin找出以上資訊。

敏感檔案,(path traversal)

  • robots.txt
  • .htaccess
  • .git
  • .svn
  • .DS_Store
  • .gitignore
  • .gitattributes
  • .gitmodules
  • .gitkeep
  • .gitlab-ci.yml
  • 各種config檔案等

有時候

Attack

Broken Access Control => IDOR, Insecure Direct Object Reference

  • 垂直越權:在未驗證使用者身份下,普通用戶卻可以存取管理員的資料
    • /admin_panel
    • /admin
  • 水平越權:使用者可存取其他人的資料
    • /myAccount?user=5
    • /myAccount?user=6

      Path thaversal / LFI, local file inclusion

      利用相對路徑來存取其他目錄的檔案
      發生原因:路徑參數沒有做限制,導致可以遍歷任何目錄,常發生在下載、讀檔功能

  • ./
  • ../
  • ../../../../../../../../etc/passwd
  • ..\..\..\..\..\windows\win.ini
  • history files
  • config files
  • key files
    • .htaccess
    • /etc/passwd
  • source code
  • 有些網站會產生在tmp目錄,則去找有無相關的建置檔案

    LFI

  • 發生在引用功能時
  • PHP
    • include()
    • require()
    • include_once()
    • require_once()
  • phpinfo()
  • 要檢視php原始碼,可以利用 module=php://filter/convert.base64-encode/resource=index.php這個語法

    XSS, Cross Site Scripting

    因輸入未經過驗證,使使用者可以輸入攻擊性的程式碼

    CSRF

    SQL Injection

    SQL

    NoSQL

    Command Injection / RCE, Remote Code Execution

    reference:

  • https://github.com/splitline/How-to-Hack-Websites