SQL隱碼攻擊總結

Heck1ng發表於2024-08-31

一、萬能密碼:

什麼是萬能密碼?

  使用者進行使用者名稱和密碼驗證時,網站需要查詢資料庫。查詢資料庫就是執行SQL語句。使用者登入時,後臺執行的資料庫查詢操作(SQL語句)是:

  【Select user_id,user_type,email From users Where user_id=’使用者名稱’ And password=’密碼’】

  這裡我們沒有對單引號進行過濾,當輸入使用者名稱【admin】和萬能密碼【2’or’1】時,執行的SQL語句為:

  【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’or’1’】。

3.由於SQL語句中邏輯運算子具有優先順序,【=】優先於【and】,【and】優先於【or】,且適用傳遞性。因此,此SQL語句在後臺解析時,分成兩句:

  【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’】和【’1’】,兩句bool值進行邏輯or運算,恆為TRUE。

SQL語句的查詢結果為TRUE,就意味著認證成功,也可以登入到系統中。

1’ or 1 = 1--+

1'or'1'='1'%23

二、waf繞過 sql注入

空格:/**/ %0a,%0b,%0c,%0d,%09都可以表示空格

註釋符 : --+ %23 # 都可以表示註釋符

還有很多繞過參考ctfshow web178-186

web187 md5繞過

mysql中,or 語句後面只要是一個1開頭的,那就整個結果就是true

所以本質就是要構造or ‘number'

$username = $_POST['username'];
    $password = md5($_POST['password'],true);

md5類的password繞過

萬能md5:ffifdyop

$sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'";

構造的ffifdyop即可實現下述程式碼 其中or 一側存在6 非0即為真滿足條件即可登入

SELECT * FROM admin WHERE pass=’ ‘or ’ 6’

web188 只能為數字 弱型別比較

mysql弱型別比較

如 ‘4ad’=4
字串與數字進行比較的時候,mysql會自動將字串轉為數字
而當數字為0,且字串開頭不為其他數字時,弱型別恆成立

那麼我們就可以使password = 0 這樣對於所有的密碼以字元開頭的 都是可以匹配的

全部傳0即可

web189

相關文章