Web攻擊(xss與sql注入)靶場復現


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注入有許多的類型,我們一個一個的來進行討論與復現

 

  1. 基於錯誤的sql注入

我們用單引號來判斷,如果輸入單引號網站報錯,我們則可以判斷此網站存在注入漏洞,可以進行注入,這是因為單引號在sql中是保留字符,如果在字符串中有單引號需要成對出現。我們用單引號進行閉合后,存在sql注入漏洞的網站就會報錯

我們在這里輸入單引號,網站彈出以下頁面

說明我們的輸入並入了sql查詢中,也確認了網站存在sql注入

通過靶機給出的源碼,我們可以看到如果我們傳入了一個單引號,這個單引號會與'$id'中左邊的單引號進行閉合,那么原來右邊的單引號就空出來了,沒有與之配對的單引號,於是造成了錯誤

下面給出幾個函數的作用

這里我們進行具體的注入,語句如下

  1. 1' and updatexml(1,concat(0x7c,(select database()),0x7c),1--'

輸入進行查詢后,可以看到爆出來了數據庫的名稱

在上面的注入語句中進行簡單的變形,將database改為version,可以查到版本號等等信息

  1. 1' and updatexml(1,concat(0x7c,(select version()),0x7c),1--'

所以sql注入非常的強大,也是ctf中web中考察的重要內容

 

2.基於布爾的注入(布爾盲注)

查看現象,能報錯,但沒有報錯信息,正確查詢也顯示不了查詢內容就屬於布爾盲注,只存在兩種狀態,對或錯

這時候我們通過1=1以及1=2這些語句,觀察返回的狀態是否不一致來進行注入

 

3.聯合注入(union注入)

注意:union查詢當查詢列數與數據庫列數不一致時會出現錯誤,但這樣反過來我們可以通過不斷地測試來確定數據庫中一共有多少字段

比如我們在靶機中鍵入下列語句

  1. 1union select 1 --'

出現了報錯

我們查看源碼得知有兩個字段

於是將上述語句改為

  1. 1union select 1,2 --'

此時再進行查詢就爆出來了相應的數據

於是,在一般的聯合注入中,我們通過不斷地嘗試和猜解最終可以得知表的列數。

另外一種聯合注入:

  1. ' union select version(),database() --' 

查詢得到

其實就是將第一個聯合查詢語句中的1和2替換為我們需要查詢的信息,本質都是一樣的。

另一種union方法

  1. ' union select schema_name,2 from information_schema.schemata  -- 

與前面的原理基本相同,爆出來

需要注意的是,那個2是拿來湊數的,是為了防止列數不對發生錯誤才加上去的,我們查詢的有效數據只有schema_name

 

4.基於時間的盲注

原理就是在sql語句中調用sleep函數來休眠,頁面的加載會產生一定的等待時間,通過觀察頁面是否延遲加載(是不是一直轉圈圈)來判斷是否存在注入。但考慮到網速等各方面的影響,這種盲注方式判斷不一定十分精確。

示例語句

  1. 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

 

  1. 反射型xss

這里給出了一個輸入框,要輸入的是信息,與sql注入不同的是,sql注入是進行查詢,而xss則是通過鍵入惡意代碼進行攻擊

示例

  1. <script>alert('xss')</script>

將上面一行代碼鍵入后,會出現一個彈窗

我們在前端彈窗進行檢查,可以看到

在檢查中標出的一行里,我們發現我們鍵入的惡意代碼已經嵌入了前端頁面,所以它會執行這段代碼

當然我們不僅僅能讓它彈出彈窗,還可以讓前端返回相應的服務器信息,用以下代碼

  1.  <script>alert(document.cookie)</script>

觀察到前端返回了安全等級和session id等等,其中session id可以用於在庫中查詢用戶名和密碼,也可以直接用於登錄,功能十分的強大

將前端已經被植入惡意代碼的url發送給其他人,這便是一部分釣魚鏈接的原理

這樣的評論框同理

這就是反射型xss的基本原理,惡意攻擊是通過前端實現的,而不是服務器,其通過篡改前端植入惡意代碼來進行攻擊,多用於釣魚鏈接

下面介紹存儲型xss

 

2.存儲型xss(持久型xss)

存儲型xss主要是將xss代碼發送到服務器端並保存,之后每當用戶進入相應的頁面,服務器會連帶xss代碼一起發送到前端,前端正常執行就發生了xss攻擊,存儲型xss攻擊對服務器端展開了攻擊,惡意性更高,這里我們依然以上次的代碼演示

  1.  <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的路還長,慢慢來吧。

 

最后,感謝閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM