2011-02-08 54 views

回答

1

通常,可以對SQL代碼結構進行有根據的猜測,以允許注入。

例如,對於一個脆弱的用戶名/密碼,驗證碼,這將是在大多數情況下是這樣的:

select count(*) from users where [email protected] and [email protected]; 

所以黑客會嘗試注入是這樣的:

@username=" 'blabla' or 1=1 " 
@password=" 'blabla' or 1=1 " 

所以結果將是計數(*)將> 0,因此登錄接受。

+0

但是漏洞發現工具(不是人)不能直接運行SQL,它只能向Web服務器發送請求,如何知道注入是否失敗? – jxu 2011-02-08 07:22:19

+0

黑客必須具有創造性。例如,如果在響應頁面中不再有「登錄」文本框,則表示黑客已成功。「漏洞發現工具」的工作原理類似於黑客,並且無法覆蓋所有場景。 – 2011-02-08 07:31:35

+0

但作爲一個工具,它永遠不知道一個頁面是否是一個登錄頁面。 – jxu 2011-02-08 07:32:12

0

一個簡單的測試可以是在輸入字段中放一個單引號,然後查看是否收到mysql錯誤消息。

如果您得到類似'您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行''''附近使用正確的語法'

或者如果您得到一個php/mysql錯誤(可能通過其格式編程識別常見的錯誤信息),那麼你也知道你有一個注入漏洞。

如果你只是得到一個通用的「沒有這樣的用戶名」或有效的空結果集,那麼你很可能沒有注入漏洞。

0

很多這些工具都有已知會中斷網頁的參數列表。他們在多個requestsm解僱這些參數關中插入參數:

  1. 表單字段
  2. 的GET URL
  3. HTTP頭

他們的工具通常會蜘蛛網站,以確保它們打儘可能多的網站。

其中一個棘手的問題是確定您何時找到可利用的網頁。在某些情況下,Web服務器可能需要較長時間才能重新啓動頁面,或者頁面的某些部分可能會略有不同。要檢查的事項:

  1. HTTP響應代碼(500服務器錯誤可能意味着SQL無效)
  2. 尺寸返回頁面
  3. 採取的頁面時返回

說了這麼多,如果您實際上有權訪問網站的源代碼,則可以使用靜態分析技術來查找漏洞。