Web攻擊(xss與sql注入)靶場復現
0x00靶機的安裝與使用
實驗靶機采用的是owasp broken web apps靶機,這里直接給出下載鏈接
https://sourceforge.net/projects/owaspbwa/files/
我們進入網站直接選擇download latest version即可
下載后解壓可直接得到vmx虛擬機檔案
描述中給出了虛擬機的用戶與密碼,我們登入虛擬機后輸入ifconfig命令來查看IP地址
在瀏覽器輸入對應的ip即可進入靶場
到這里我們就可以選擇自己需要使用的應用了
0x01SQL注入
這里我們選擇dvwa靶場來進行我們的實驗
默認用戶名和密碼都是admin,登陸后我們可以自行復現相應的web漏洞,同時也可以自行選擇網站的安全等級
首先,我們得明白sql注入的定義:
SQL注入即是指web應用程式對用戶輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢陳述句的結尾上添加額外的SQL陳述句,在管理員不知情的情況下實作非法操作,以此來實作欺騙資料庫服務器執行非授權的任意查詢,從而進一步得到相應的資料資訊,
通常情況下,一般進行sql注入時,第一步是判斷網站是否有sql注入,再進行注入,其中Sql注入有許多的型別,我們一個一個的來進行討論與復現
- 基于錯誤的sql注入
我們用單引號來判斷,如果輸入單引號網站報錯,我們則可以判斷此網站存在注入漏洞,可以進行注入,這是因為單引號在sql中是保留字符,如果在字串中有單引號需要成對出現,我們用單引號進行閉合后,存在sql注入漏洞的網站就會報錯
我們在這里輸入單引號,網站彈出以下頁面
說明我們的輸入并入了sql查詢中,也確認了網站存在sql注入
通過靶機給出的原始碼,我們可以看到如果我們傳入了一個單引號,這個單引號會與'$id'中左邊的單引號進行閉合,那么原來右邊的單引號就空出來了,沒有與之配對的單引號,于是造成了錯誤
下面給出幾個函式的作用
這里我們進行具體的注入,陳述句如下
- 1' and updatexml(1,concat(0x7c,(select database()),0x7c),1) --'
輸入進行查詢后,可以看到爆出來了資料庫的名稱
在上面的注入陳述句中進行簡單的變形,將database改為version,可以查到版本號等等資訊
- 1' and updatexml(1,concat(0x7c,(select version()),0x7c),1) --'
所以sql注入非常的強大,也是ctf中web中考察的重要內容
2.基于布爾的注入(布爾盲注)
查看現象,能報錯,但沒有報錯資訊,正確查詢也顯示不了查詢內容就屬于布爾盲注,只存在兩種狀態,對或錯
這時候我們通過1=1以及1=2這些陳述句,觀察回傳的狀態是否不一致來進行注入
3.聯合注入(union注入)
注意:union查詢當查詢列數與資料庫列數不一致時會出現錯誤,但這樣反過來我們可以通過不斷地測驗來確定資料庫中一共有多少欄位
比如我們在靶機中鍵入下列陳述句
- 1' union select 1 --'
出現了報錯
我們查看原始碼得知有兩個欄位
于是將上述陳述句改為
- 1' union select 1,2 --'
此時再進行查詢就爆出來了相應的資料
于是,在一般的聯合注入中,我們通過不斷地嘗試和猜解最終可以得知表的列數,
另外一種聯合注入:
- ' union select version(),database() --'
查詢得到
其實就是將第一個聯合查詢陳述句中的1和2替換為我們需要查詢的資訊,本質都是一樣的,
另一種union方法
- ' union select schema_name,2 from information_schema.schemata --
與前面的原理基本相同,爆出來
需要注意的是,那個2是拿來湊數的,是為了防止列數不對發生錯誤才加上去的,我們查詢的有效資料只有schema_name
4.基于時間的盲注
原理就是在sql陳述句中呼叫sleep函式來休眠,頁面的加載會產生一定的等待時間,通過觀察頁面是否延遲加載(是不是一直轉圈圈)來判斷是否存在注入,但考慮到網速等各方面的影響,這種盲注方式判斷不一定十分精確,
示例陳述句
- 1' and sleep(5) --'
如果存在注入的話,讓頁面休眠五秒(轉五秒鐘圈圈)
這邊可以看到明顯的延遲(注意左上角轉圈)
最后其實是不會回傳任何具體資料的
5.總結
以上是一些注入方式的總結以及靶場復現實體,受限于時間,只復現了部分注入方式,還有一部分沒有講到,等后面有時間慢慢補充吧,這里給出兩篇優秀的關于sql注入的文章(感謝實驗室康爺的推送)
1https://www.jianshu.com/p/5de47d05e333
2https://www.cnblogs.com/-chenxs/p/11614129.html
0x02XSS攻擊
首先,我們還是要知道xss攻擊的定義
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載并執行攻擊者惡意制造的網頁程式,這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML,攻擊成功后,攻擊者可能得到包括但不限于更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容,
Xss是跨站腳本的意思,簡單來說,xss攻擊就是利用網站沒有對用戶提交的資料進行轉義或過濾的漏洞,將惡意代碼注入到網頁導致其被執行,
關于復現環境,我們依然采用dvwa靶場
Xss攻擊分為兩類:反射型與存盤型
反射型(又叫非持型),發生請求時,xss代碼出現在url中,作為引數提交并由服務器回應并由瀏覽器執行,在這個程序中,并不會傷害到服務器本身,因為最終惡意代碼是由瀏覽器執行的,受害者是用戶使用的機器,下面開始復現反射型xss
- 反射型xss
這里給出了一個輸入框,要輸入的是資訊,與sql注入不同的是,sql注入是進行查詢,而xss則是通過鍵入惡意代碼進行攻擊
示例
- <script>alert('xss')</script>
將上面一行代碼鍵入后,會出現一個彈窗
我們在前端彈窗進行檢查,可以看到
在檢查中標出的一行里,我們發現我們鍵入的惡意代碼已經嵌入了前端頁面,所以它會執行這段代碼
當然我們不僅僅能讓它彈出彈窗,還可以讓前端回傳相應的服務器資訊,用以下代碼
- <script>alert(document.cookie)</script>
觀察到前端回傳了安全等級和session id等等,其中session id可以用于在庫中查詢用戶名和密碼,也可以直接用于登錄,功能十分的強大
將前端已經被植入惡意代碼的url發送給其他人,這便是一部分釣魚鏈接的原理
這樣的評論框同理
這就是反射型xss的基本原理,惡意攻擊是通過前端實作的,而不是服務器,其通過篡改前端植入惡意代碼來進行攻擊,多用于釣魚鏈接
下面介紹存盤型xss
2.存盤型xss(持久型xss)
存盤型xss主要是將xss代碼發送到服務器端并保存,之后每當用戶進入相應的頁面,服務器會連帶xss代碼一起發送到前端,前端正常執行就發生了xss攻擊,存盤型xss攻擊對服務器端展開了攻擊,惡意性更高,這里我們依然以上次的代碼演示
- <script>alert(document.cookie)</script>
結果是一樣的
不同的是,我們發現每次加載這個網站都會彈出一次上面的資訊,而反射型只對特定url有效,這就是兩者的區別,因為存盤型的xss代碼已經存入了服務器,所以每次打開對應網站就會執行一次
以上便是對存盤型xss的介紹與復現,其實xss還有很多種腳本,由于時間原因,這里只做基本演示,不再過多的贅述了
3.Xss腳本的構造
關于xss的腳本構造,由于篇幅過于長,加上作者懶,給大家推薦兩篇博客吧
1https://www.cnblogs.com/hqutcy/p/5748256.html
2https://www.cnblogs.com/hqutcy/p/5750584.html
0x03總結
這次對sql注入和xss腳本攻擊進行了一些復現,原理掌握更加清晰了,現在知道方式和怎么運用了,說不上吃透但也有85%吧,web的路還長,慢慢來吧,
最后,感謝閱讀
本文來自博客園,作者:wysng,轉載請注明原文鏈接:https://www.cnblogs.com/wysngblogs/p/15832277.html

本作品采用知識共享署名-相同方式共享 4.0 國際許可協議進行許可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/418097.html
標籤:其他
