頁面攻擊可以分為兩大類
一種是以利用瀏覽器漏洞在訪問頁面裡編寫惡意代碼對訪問者的攻擊。這裡我們可以理解為服務端對用戶端的攻擊。
另一種剛好相反,是訪問者利用頁面的漏洞對伺服器的攻擊。
我們這裡主要講的是對伺服器的攻擊。
現在網站程式的編寫裡為了豐富網站的內容和功能,大面積的採用了動態網頁。
在動態網頁裡面最大的失誤是無條件的相信使用者的輸入。
如果一個使用者受到瀏覽器的限制,可以通過瀏覽器和伺服器的互動來開啟攻擊WEB應用的大門。
在現在的駭客網站上攻擊和操作WEB網站的工具好多的。完全可以不受限於瀏覽器。
分析一下。程式員在編寫的使用者表單的時候大多會做這樣的假設:
在使用者名稱裡使用者會輸入的人們通常習慣的使用者名稱字。密碼欄也一樣。他們經常就不會想到使用者名稱裡要是輸入了帶有引號之類的特殊字元會怎樣。
我們來看一下這段代碼
C#代碼查詢後端SQL Server資料庫,假設user和password變數的值直接取自使用者輸入:
SqlDataAdapter my_query = new SqlDataAdapter(
"SELECT * FROM accounts WHERE acc_user='" + user + "' AND acc_password='" + password, the_connection);
這就是上面說過的使用者表單
在正常情況下這段代碼也可以達到預期的效果
如果你的使用者名稱和密碼在其資料庫裡不能對應上就不能正常的登陸。
但如果在user輸入欄位中輸入“OR 1=1”,沒這個樣的使用者吧。。。。但我們同樣能夠登陸,而且不要求輸入密碼!甚至在查詢後加上適當的調用還可以執行SHELL命令。
大名鼎鼎的SQL注入式攻擊就是是利用了篡改參數”部分描述。
我們可以在輸入處插入特殊字元來改變SQL查詢的本意,欺騙資料庫伺服器執行不正常查詢。這樣就有可能獲得後端資料庫裡儲存的所有資訊。
最後在舉例一段指令碼執行的攻擊方式
先看下面這段代碼:
<%@ Page Language="vb" %>
<asp:Label id="Label1" runat="server">
標籤文字
</asp:Label>
<form method="post" runat="server" ID="Form1">
反饋資訊輸入處<br>
<asp:Textbox ID="feedback" runat="server"/><br>
<asp:Button id="cmdSubmit" runat="server"
Text="提交!" OnClick="do_feedback">
</asp:Button>
</form>
<script runat="server">
Sub do_feedback(sender As Object, e As System.EventArgs)
Label1.Text=feedback.Text
End Sub
</script>
這也是很多頁面都使用的
但這裡面卻有一個漏洞。
我們可以把特殊的使用者嵌入到應答頁面。
<script>alert(document.cookie)
</script>
這其實也就是利用JavaScript代碼構造的一個特殊查詢。