1. 程式人生 > >SQL盲注(1)

SQL盲注(1)

簡介

Web應用訪問資料庫的目的有很多。常見目的就是訪問資料並呈現給使用者。在這種情況下,攻擊者就有可能會修改SQL語句並顯示資料庫中的任意資訊,並將這些資訊寫入到Web伺服器對HTTP請求的響應之中。有時不顯示資料庫的資訊,但並不表示程式碼不會受到SQL注入攻擊。

列如,使用者輸入任意使用者名稱及密碼時,會顯示“Invalid username or password”,但如果將user' or '1'='1作為使用者名稱的話,輸入任意密碼,會顯示“Invalid password”。顯然username欄位更容易受到SQL注入攻擊

在輸入永假條件(user' or '1'='2)檢查返回值的差異,進一步核實username欄位更易受到攻擊。

做完測試後可以得知,username欄位更易受到SQL注入攻擊,但password欄位不易受到攻擊,且無法繞開身份驗證。

該情況下,並沒有顯示任何資料,我們只知道兩件事。

  • 在username欄位為真時,表單顯示“Invalid password”
  • 在username欄位為假時,表單顯示“Invalid username or password”

這種情況,稱為SQL盲注。

舉例

假設本地的show.php頁面接受一個id的get引數,返回相應id的商品資訊,可以按下列請求來檢視商品資訊

http://127.0.0.1/show.php?id=1  --返回第一件商品資訊

http://127.0.0.1/show.php?id=2  --返回第二件商品資訊

http://127.0.0.1/show.php?id=3  --返回三件商品資訊

http://127.0.0.1/show.php?id=4  --返回第四件商品資訊

且本地做了部分安全考慮,在監測到錯誤輸入時,會返回第一件商品資訊。所以下列請求會返回第一件商品資訊

http://127.0.0.1/show.php?id=attacker

http://127.0.0.1/show.php?id=attacker’

http://127.0.0.1/show.php?id=

http://127.0.0.1/show.php?id=999999999999999999999999999(不存在的產品id)

http://127.0.0.1/show.php?id=-1

減法測試

下列請求會返回第二件商品資訊

http://127.0.0.1/show.php?id=3-1

http://127.0.0.1/show.php?id=4-2

http://127.0.0.1/show.php?id=5-3

由此可知,已將get引數傳遞給SQL語句並按下列方式執行:

select * from products where id=3-1

資料庫計算減法的值並返回第二件商品資訊

加法測試

如果要測試加法的話,因為加號(+)時URI的保留字,所以要對其進行編碼,%2B代表對加號的URL編碼.

http://127.0.0.1/show.php?id=2%2B3(對id=2+3進行URL編碼)

http://127.0.0.1/show.php?id=1%2B4(對id=1+4進行URL編碼)

利用永真及永假條件進行測試

or運算子

http://127.0.0.1/show.php?id=2 or 1=1  --返回第一件商品資訊

http://127.0.0.1/show.php?id=2 or 1=2  --返回第二件商品資訊

第一條請求中 or 1=1 要求返回所有商品資訊,資料庫監測到錯誤時,返回第一件商品資訊

第二條請求中 and 1=1 對結果無影響

and運算子

http://127.0.0.1/show.php?id=2 and 1=1  --返回第二件商品資訊

http://127.0.0.1/show.php?id=2 and 1=2  --返回第一件商品資訊