# Web Security ## CSRF(Cross-Site Request Forgery) ### 概念 當我們登入一個惡意網站時,惡意網站送過來的網站中可能藏有javascript或 img 、iframe tag的執行,可能會讓我們的瀏覽器發送請求到另一個網站中(像銀行網站),而假設我們已經登入此網站,那麼我們所發出的請求就會帶著cookie,那此網站就以為是我們所做的操作 ### 防禦 - Refer header:當送出請求時會附上目前所發出請求的網站,只有當網站是被信任的才能夠通過,但因為這要人為所寫與維護,還是容易產生漏洞,且有些情況為了保護隱私,Proxy會將此東西移出,而不送出。 - Smae-site Cookies:在附上cookies時除了原本的亂數,會再增加一些設定,像只能接受smae site request或不接受cross site subrequest(像img 或 iframe tag) - Secret Token:在填寫要填的form中除了原本要填的資料,再加上一個由server或前端所生成的亂碼,而當server收到時便會比對是否相同。 ## XSS(Cross-Site Scripting) ### 概念 與前面需要受害者點入惡意網站不同,這個主要是把惡意的程式碼安插在正常的網站中,不論是web server送來的或使用者送給server的,而會成功的原因主要是因為瀏覽器無法分辨script的來源,或著沒有過濾使用者上傳的資料,會認為這就是網站的功能,XSS主要分為兩種 - Stored XSS Attack:把惡意的代碼注入web server的資料庫中,當其他用戶提取資料時就會提取道惡意的script - 攻擊者會做出惡意的URL,像可能某個網站用GET request 所回傳的東西會拼接在url上,並用html顯示在畫面上,但攻擊者把惡意的script接上,網站便以為這是要運作的東西,便直接執行。或著利用\r\n 這個是http在回應時用來分別header 跟body的東西,可以把我們要注入的惡意script用\r\n接在後面,讓瀏覽器以為這個是body,並執行。 - 會需要考慮到同源政策 ### 防禦 - filter:把使用者的input來過濾javascript或html - encoding approach:把html的mark改成html的entities - WAF:用防火牆來過濾 ## SSRF(Server-Side Request Forgery) 對資料庫提出請求,藉此注入惡意的script或獲取資料,可能會因為有些url沒有封鎖權限 ### 防禦 - 避免用到危險函數 ● file_get_contents() ● fsockopen() ● curl_exec() ● 過濾回應的訊息 ● 統一錯誤訊息 ● 限制請求的port ● 禁止不常用的協議 ● 對DNS Rebinding,考慮使用DNS cache或者Host白名單 ## XXE ### 概念 XML是一個用來傳遞資料與儲存資料的語法,其優點主要兩個,不會壓縮資料,故非常通用,且寫法容易讓人看得懂。但這也是它會產生的問題,因為攻擊者也容易看懂,因為攻擊者就容易把惡意的檔案差在XML檔中回傳,藉此得到資料 - Exploiting XXE to retrive files:把傳回伺服器的封包攔截,並在上面修改external entity藉此得到內部的敏感資料 - Exploiting XXE to perform SSRF attacks:因為有時我們的請求沒有權限,故我們透過修改XML讓server自己發請求 - XXE attacks via file upload:有時web會要我們上傳圖片,然後他會存在資料庫中在取出來顯示,所以我們可以將上傳的圖片用寫成xml的svg檔上傳,讓web server把機密的內容寫在圖片後,在展示出來 - Finding hidden attack surface for XXE injection:有時看不出來是用xml寫的,但我們可以應改成xml格式來傳遞,達到取得資料的效果 ### 防禦 將XML的external entities and Xinclude功能關掉 ## Unsecure Deserialization ### 概念 在傳輸資訊時,我們會把傳輸的東西壓縮成像string 或 byte形式來傳送,後面再將其解壓縮回去,而很多語言都有內建的序列化,故如果我們知道網站是用哪種語言,且序列化是在我們本地端的話,我們便能改變序列化的訊息在傳遞給SERVER - 可能1是登入,0是沒有登入,則我們便能將0改成1傳回server,來欺騙server - 一些語言有弱比較:像假設把兩個不同型態的東西比較,那其可能會自動轉化型態像php的0==任意字串都匯回傳true,那假設php的伺服器判斷是字串的話,我們已0輸入,那麼便會視為true - 還有可以利用網站內部可用的功能,那麼我們就可以透過更改序列話的內容來讓目標改變 - injecting arbitrary objects:如果我們知道source code的話,就能透過了解source code來透過序列化時來呼叫一些function來進行攻擊 ### 防禦 不要讓使用者的輸入有序列化與反序列化 ## SQL Injection ### 概念 當設計的程式忽略了檢查,那麼就有機會利用輸入的字串中帶有SQL的指令來做攻擊,因為資料庫可能以為這是正常的指令。像用"1' OR '1'='1" ### Union Based 先找到表格的名稱,再找出欄位名稱,最後找到資料,利用union select就有機會找出所有資料 ### Error Based SQL injection 透過塞入錯誤的資訊,來看其反應,可以透過網站的回應來猜測裡面的可能表格或資料的名稱 ### Command injection 當web server拼接系統命令時而造成的漏洞 可以用DNS傳資料,因為通常防火牆會擋住HTTP但不會擋住DNS的資料傳輸 ### Template injection ## Web Cache 因為web為了降低流量,當有人存取某個網頁時,會在中途存放網站讓別人拿取,故攻擊者可能對Cache動手腳,讓其他使用者存取時出問題,像我們能用XSS來注入一些惡意的script來讓拿到這個cache的人會出問題 ## 工具 ### Burp 在我們與web server中間作為轉寄站,不論是我們送給web server 或web server送給我們的資料都會先被其攔截,我們可以看封包的內容與修改 - Cluter bomb:可以大量傳書送出的請求,而每次請求的內容可以更改,像暴力猜帳號密碼 ### DirBuster 可以用來暴力搜尋網站的文件 ### TOR(The Onion Router) 多層次的VPN,VPN是用來隱藏自己的IP工具,類似Burp是一個中繼站,但VPN是會賦予其一個新的IP address,讓別人以為你是從VPN的IP發出訊息的。而其可能會有DNS LEAK,主要是因為輸入的網址可能是local的ip 只有local的DNS SERVER認識 ### sqlmap 可以用來自動檢測SQL的injection的漏洞 ### Password Crackers - John THE Ripper MPI Patch - Cain & Abel - hashcat(推薦因為可以利用顯卡加速) - RainbowCrack ### 漏洞資料庫(Exploit Database) 可以來看目前使用的框架是否有甚麼漏洞存在 ## 協定-robot.txt 一些網站會放robot.txt,因為一些搜尋引擎會去爬各個網站的內容,但有些網站不希望因此增加流量,就會希望他們不要爬,不過有時雖然沒有直接的連結,但只要我們打對網址還是能夠搜尋到網站隱藏的內容(可以利用DirBuster) - Disallow的目錄常常是對方不希望被爬蟲的地方,可以嘗試從這裡看看有什麼被隱藏的資訊 - sitemap.xml:與robot.txt相似,描述網站的架構 - DS_Store:會洩漏目錄 - .git : 類似 ## 學習資源 https://skills.bugbank.cn/ (技能樹)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up