萬丈高樓平地起,樓能蓋多高,主要看地基打的好很差。學習任何知識都是同樣的,打好基礎是關鍵,經過本課的學習,你將瞭解一些常見的Web漏洞,以及這些漏洞的原理和危害,打好地基,爲後面建設高樓大廈作好準備。php
第一章.無處不在的安全問題 linux
第一節.常見的安全事件git
第二章.常見Web漏洞解析github
第一節.XSSweb
第二節.CSRFshell
第三節.點擊劫持數據庫
第四節.URL跳轉windows
第五節.SQL注入後端
第六節.命令注入瀏覽器
第七節.文件操做漏洞
「釣魚」:利用各類手段,仿冒真實網站的URL地址以及頁面內容,或利用真實網站服務器程序上的漏洞在站點的某些網頁中插入危險的HTML代碼,以此來騙取用戶銀行或信用卡帳號、密碼等私人資料。
「篡改」網頁:谷歌搜索intitle:hacked by能夠搜索出曾經被黑過的網站,搜索引擎語法還有:Intext/Site等
「暗鏈」:一種是你主動隱藏於別人網站的連接,或許你是作網站的,或許你曾經擁有某個網站的後臺,可以添加上去(提升SEO);還有一種狀況是別人盜取你的模版,可是上面存在不少你的絕對地址,這樣就致使了暗鏈。
「webshell」:以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也能夠將其稱作爲一種網頁後門。黑客在入侵了一個網站後,一般會將asp或php後門文件與網站服務器WEB目錄下正常的網頁文件混在一塊兒,而後就可使用瀏覽器來訪問asp或者php後門,獲得一個命令執行環境,以達到控制網站服務器的目的。webshell能夠穿越服務器防火牆,因爲與被控制的服務器或遠程過80端口傳遞的,所以不會被防火牆攔截。而且使用webshell通常不會在系統日誌中留下記錄,只會在網站的web日誌中留下一些數據提交記錄,沒有經驗的管理員是很難看出入侵痕跡的。
這裏只要簡要介紹一些這些概念,具體的原理,案例,防護手段,會在後續中詳細說明。
2.1 XSS
Cross Site Script:跨站腳本攻擊
攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。理論上,全部可輸入的地方沒有對輸入數據進行處理的話,都會存在XSS漏洞。
存儲型 | 反射型 | DOM型 | |
觸發過程 |
1. 構造XSS(攻擊者)2. 訪問(用戶) | 訪問攜帶XSS的連接 | 訪問URL |
數據存儲 |
數據庫 | URL | URL |
誰來輸出 | 後端WEB |
後端WEB | 前段JS |
輸出位置 |
HTTP響應 | HTTP響應 | 動態構造的DOM節點 |
存儲型:持久化,代碼是存儲在服務器中的,例如黑客提交了一篇帶惡意腳本的博客,過濾不嚴時被存儲在服務器中,當其它用戶訪問時,就會觸發腳本,執行惡意操做。受害者較廣。
反射型:非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼,例如對於網站W的用戶U,不當心點擊了一個連接,暗中將他的cookie發送到由攻擊者構建的網站。受害者爲少數用戶;
DOM型:取決於輸出位置,並不取決於輸出環境,DOM XSS 是因爲瀏覽器解析機制致使的漏洞,服務器不參與,而存儲型與反射型都須要服務器響應參與。
2.2 CSRF
Cross Site Request Forgery 跨站請求僞造
假裝來自受信任用戶的請求來利用受信任的網站,或者說利用用戶已登陸的身份(cookie),假裝成用戶操做。
舉個例子:用戶A正在XX銀行的網站上進行操做,忽然收到一個誘惑的圖片連接,A隨手一點,果真看到某日本女星的誘惑寫真,但是過了一下子收到短信提醒,已經轉出1000元至B帳戶,這當中發生了什麼?可能的方法是:B構建了一個長寬都爲0的頁面,並設置隱藏,當A點擊圖片連接時,圖片加載時觸發了表單提交操做(轉帳1000元),因爲當前cookie還生效,所以提交成功。
2.3 點擊劫持
一種視覺上的欺騙手段。大概有兩種方式,一是攻擊者使用一個透明的iframe,覆蓋在一個網頁上,而後誘使用戶在該頁面上進行操做,此時用戶將在不知情的狀況下點擊透明的iframe頁面;二是攻擊者使用一張圖片覆蓋在網頁,遮擋網頁原有位置的含義;
tip:不少通關小遊戲就是利用這些方法,讓用戶在玩遊戲的過程當中,誘導用戶點擊某個區域,提交信息。
2.4 URL跳轉漏洞
利用用戶信任的網站,跳轉到惡意的網站。
例如,在一個看起來很常見的網址連接後加上惡意連接
http://mail.qq.com/......&url=http://black.com
如今不少惡意連接能夠進一步假裝成短連接的形式t.cn/black,更具迷惑性。
查看網頁源代碼,找出跳轉連接 url.php?url=......
幾種跳轉方式:
Header頭:header("location: ".$target);
JS:<script>window.location.href=\"$target\"</script>
META標籤:http-equiv="Refresh" content="5"; url=...
2.5 SQL注入
本質:數據和代碼未分離,即數據當作代碼來執行
怎麼理解呢?舉個例子,當咱們忘記一個網站的密碼時,不妨試試萬能密碼admin'--,也許就能不用密碼而登陸,這是爲何?這是由於服務器可能在驗證用戶時執行了如下語句:
select * from users where user_name = '\$NAME' and password = '\$PWD';
這就變成了:
select * from users where user_name = 'admin'-- and password = '\$PWD';
SQL注入有兩個條件:一是能夠控制輸入的數據;二是服務器拼接SQL執行;
2.6 命令注入
windows的DOS和linux的Bash有不少系統命令能夠利用
如:ipconifg/net user/dir/find等
執行過程:
a. web調用可執行系統命令的函數,如PHP中的system/exec/eval等;
b. 函數或函數的參數可控;
c. 拼接注入命令;
舉個例子:經常使用的輸入網址查看ip的網頁,若是輸入www.baidu.com && net user,則因爲&&的做用,就有可能返回系統用戶信息;
2.7 文件漏洞
不少網站提供用戶上傳頭像,附件等文件,也提供下載app或exe等操做,攻擊者可利用這些操做實現上傳webshell和木馬等,或者下載web上的任意文件和代碼等;
文件上傳:上傳php文件,在瀏覽器地址欄裏輸入執行;
文件下載:解析下載請求地址,修改並執行;
文件包含:在經過PHP的函數引入文件時,因爲傳入的文件名沒有通過合理的校驗,從而操做了預想以外的文件,就可能致使意外的文件泄露甚至惡意的代碼注入。利用include/require/fopen/allow_url_include等操做。