頁面攻擊可以分為兩大類
一種是以利用瀏覽器漏洞在訪問頁面里編寫惡意代碼對訪問者的攻擊。這里我們可以理解為服務端對客戶端的攻擊。另一種剛好相反,是訪問者利用頁面的漏洞對服務器的攻擊。我們這里主要講的是對服務器的攻擊。
現在網站程序的編寫里為了豐富站點的內容和功能,大面積的采用了動態頁。在動態頁里面最大的失誤是無條件的相信用戶的輸入。如果一個用戶受到瀏覽器的限制,可以通過瀏覽器和服務器的交互來打開攻擊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代碼構造的一個特殊查詢。


