websec_bySplitline
Web Security (by Splitline)的整理
web 應用程式可簡易分成前端應用程式、後端應用程式、伺服器三部分,前端是以瀏覽器來解析資料並顯示給使用者的,後端是在伺服器上用來處理資料,包含伺服器軟體、資料庫系統及作業系統。
- 前端語言:HTML、CSS、JavaScript…
- 開發框架:Vue.js、React.js、Angular.js、jQuery…
- 後端語言:PHP、Python、Ruby、Go、 Node.js…
- 開發框架:Django、Flask、Laravel、Symfony…
- 伺服器:Apache、Nginx、IIS…
- 資料庫:MySQL、MariaDB、PostgreSQL、SQLite…
- 運作系統:Windows、Linux、MacOS…
註:node.js大致等於在後端運行的JavaScriptHTTP 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
- Cookie是一種把資料放在HTTP Header中的方式,用來記錄使用者的資訊,例如登入資訊、訂閱資訊等等。
- Cookie會和domain name, path綁定,所以只有綁定到domain name的cookie才會被傳送到相對應的網域。
- 像是PTT的已滿18歲資料,選擇完後會被放入Cookie,之後瀏覽需要成年的網頁時,就會被拿出來。
工具
curl
- 可以用來發送HTTP請求,並且可以接收回應。
1
2
3
4
5
6
7
8curl [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 fileBurpsuite
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
- 水平越權:使用者可存取其他人的資料
- ./
- ../
- ../../../../../../../../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