System.Text.StringBuilder
  query = new System.Text.StringBuilder(
  "SELECT * from Users WHERE login = "")
  .Append(txtLogin.Text)
  .Append("" AND passWord="")
  .Append(txtPassword.Text).Append(""");

⑶ 攻擊者在用戶名字和密碼輸入框中輸入""或"1"="1"之類的內(nèi)容。

⑷ 用戶輸入的內(nèi)容提交給服務(wù)器之后,服務(wù)器運(yùn)行上面的ASP.NET代碼構(gòu)造出查詢用戶的SQL命令,但由于攻擊者輸入的內(nèi)容非常特殊,所以最后得到的SQL命令變成:

以下是代碼片段:
    SELECT * from Users WHERE
  login = "" or "1"="1" AND
  password = "" or "1"="1"

⑸ 服務(wù)器執(zhí)行查詢或存儲(chǔ)過程,將用戶輸入的身份信息和服務(wù)器中保存的身份信息進(jìn)行對(duì)比。

⑹ 由于SQL命令實(shí)際上已被注入式攻擊修改,已經(jīng)不能真正驗(yàn)證用戶身份,所以系統(tǒng)會(huì)錯(cuò)誤地授權(quán)給攻擊者。

如果攻擊者知道應(yīng)用會(huì)將表單中輸入的內(nèi)容直接用于驗(yàn)證身份的查詢,他就會(huì)嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統(tǒng)授予訪問權(quán)限。

系統(tǒng)環(huán)境不同,攻擊者可能造成的損害也不同,這主要由應(yīng)用訪問數(shù)據(jù)庫(kù)的安全權(quán)限決定。如果用戶的帳戶具有管理員或其他比較高級(jí)的權(quán)限,攻擊者就可能對(duì)數(shù)據(jù)庫(kù)的表執(zhí)行各種他想要做的操作,包括添加、刪除或更新數(shù)據(jù),甚至可能直接刪除表。

分享到

wangyao

相關(guān)推薦