天天看點

利用Burp“宏”自動化另類 SQLi

本文講的是<b>利用Burp“宏”自動化另類 SQLi</b>,有許多工具可用于Web應用程式自動化測試。最著名的工具可能是sqlmap。 通過一些簡單的指令,Sqlmap就可以輕松地識别和利用SQL注入漏洞。然而,諸如CSRF令牌或一些簡單的反自動化技術,例如在表單中包含一個唯一的隐藏字段,就可以防止自動化工具正确工作。 Burp Suite中的宏是繞過這些防護措施以便能夠執行自動化測試的好方法,盡管那些防護措施實作起來可能很複雜。

在這篇文章中,我們會使用一個示例應用程式,使用者可以在此應用程式中搜尋動物的圖檔:

利用Burp“宏”自動化另類 SQLi

這個Web應用程式使用ASP.NET開發,後端資料庫是SQL Server。 該應用程式存在一處SQL盲注漏洞。如下圖所示:

利用Burp“宏”自動化另類 SQLi

檢視頁面源代碼,我們可以看到在表單中有一個隐藏的輸入字段(token),其值為一個GUID:

伺服器每次響應時都會生成新的表單Token,并且如果在POST請求表單中該表單Token不比對,網頁就會報錯,如下圖:

利用Burp“宏”自動化另類 SQLi

是以,已知了這一切,就先讓我們看看當我們嘗試用sqlmap而不使用宏來修改請求時會發生什麼。 我們運作如下指令:

我們從sqlmap的輸出中注意到的第一件事是重定向到錯誤頁面:

不過,很明顯這對于sqlmap來說找到并利用SQLi的希望并不大。不過,還是讓我們繼續這個過程,看看會發生什麼。

Okay,sqlmap似乎認為該參數不可注入; 但我們知道這裡的确存在一處SQLi。讓我們現在建立一個Burp宏,它将用一個新的表單Token替換請求中的“token”參數,以便我們可以使用sqlmap繼續利用此SQLi漏洞。

Burp Suite中的宏實際上是一系列HTTP請求,這些請求會在由Burp代理的請求發送到伺服器之前進行請求。一旦已經執行了宏請求,則從最終的宏請求的響應中取得的參數集合就可以被傳遞到調用宏的請求中。

首先要做的是記錄我們想要的一系列HTTP請求。 在本文這種場景中,隻有一個請求:對伺服器的GET請求也就是擷取token的請求。 “宏”可用于執行複雜的操作,例如登入應用程式和檢索Cookie。 在Burp Suite中,轉到“項目選項”頁籤和“會話”子頁籤。如下圖:

利用Burp“宏”自動化另類 SQLi

向下滾動到“Macros”(宏)部分,然後單擊添加。

利用Burp“宏”自動化另類 SQLi

将彈出兩個對話框。 第一個是宏編輯器,第二個是宏記錄器。 為了确定我們想要執行的一系列請求,我們需要“記錄”我們想要建立的宏。可以通過兩種方式完成:我們現在可以執行我們想要做為宏的一部分的操作(即浏覽登入頁面,發送特定的GET請求等),然後從清單中選擇登入和特定操作的HTTP請求; 或者直接在“代理曆史清單”(Proxy –&gt; HTTP History)中選擇已經存在的HTTP請求。在本文的示例中,我們隻需要找到一個請求,如下圖:

利用Burp“宏”自動化另類 SQLi

一旦選中我們所需的請求(高亮顯示的那一個),點選ok,然後我們進入了宏編輯器。

利用Burp“宏”自動化另類 SQLi

從這裡,我們将需要對截獲的請求進行一個小的更改。 選中請求,單擊右側的“配置項目”(Configure item),将顯示“配置宏項目”的對話框。 然後,點選“自定義響應的參數位置”中的添加按鈕。

利用Burp“宏”自動化另類 SQLi

然後,我們需要在HTTP響應體中定位我們要的參數——token,Burp會高亮顯示我們要提取的值,設定參數的名稱,以便在宏完成後可以将其傳遞給最終的HTTP請求。

利用Burp“宏”自動化另類 SQLi

當我們在響應中高亮顯示我們所需的值的時候,“定義開始和結束”這一部分會自動完成。 所有其他設定可以保留為預設值。 單擊确定關閉“定義自定義參數”的對話框,單擊确定關閉“配置宏項目”的對話框,最後再次單擊确定以關閉宏編輯器。

現在我們建立了我們想要的宏,但是我們仍然需要實作會話處理規則,以允許宏對所需的請求進行操作。 在“會話”頁籤上,轉到“會話處理規則”部分,然後單擊添加按鈕。如下圖:

利用Burp“宏”自動化另類 SQLi

當對話框彈出時,單擊“規則操作”下的添加,然後從下拉菜單中選擇“運作宏”。

利用Burp“宏”自動化另類 SQLi

之後會打開“會話處理操作編輯器”。 在這裡我們選擇我們之前添加的宏,然後選擇“僅更新以下參數”,并将我們的參數添加到清單中。 如果我們需要根據宏的最終請求修改cookie,那麼我們也可以在這裡進行添加。本文的示範示例不需要設定cookie。

利用Burp“宏”自動化另類 SQLi

單擊OK關閉此對話框,然後單擊會話處理規則編輯器的“範圍(Scope)”标簽頁。

利用Burp“宏”自動化另類 SQLi

這裡我們需要定義受規則影響的請求的範圍。在“Tools Scope”下,預設情況下不會選擇代理(因為如果沒有正确配置的話,可能會影響通過Burp代理的每一個請求)。為了使用此規則與sqlmap一起工作,我們必須選中“Proxy”。為了限制範圍,我們使用“Use suite scope”選項,本文的示範僅包括示例站點。最後,我們将“參數範圍”限制為僅影響包含“token”參數的請求,因為這是我們真正需要修改的請求。單擊“OK”關閉對話框。

上述設定就是我們需要配置的一個宏來自動修改sqlmap的請求。現在,當sqlmap的請求通過代理時,Burp将首先向伺服器發出GET請求,并使用從GET請求中提取的token參數的值替換sqlmap的POST請求中的“token”參數的值。

N.B:Burp不會在“代理曆史記錄”清單中顯示被宏修改過的HTTP請求,是以如果你想确認你添加的宏是否按預期工作,那麼你可以打開 “項目選項”标簽頁中的“會話”頁籤中的會話跟蹤器來進行觀察。在會話跟蹤器裡可以按照請求順序挨個檢視通過會話處理規則的處理過的每一個請求,是以,你将能夠觀察對請求所做的任何更改。

一旦啟用了我們添加的宏,sqlmap應該就能夠正确地識别我們示例網站中的SQL注入漏洞了,并能夠成功利用此漏洞:

可以看到,sqlmap發現參數是易受攻擊的,我們現在可以使用sqlmap來提取資料,如使用者和表:

原文釋出時間為:2017年3月13日

本文作者:李白

本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。

<a href="http://www.4hou.com/technology/3664.html" target="_blank">原文連結</a>