SQL注入學習總結(一):SQL注入的分類


CTF中的SQL注入的思路總結

1.拿到題目之后一般是一個登陸框(大概率盲注或者是報錯,寫腳本跑):

1.png

嘗試輸入用戶名(admin)和密碼(隨意)查看其返回結果這里一般又分為兩種:

  1. 有返回是密碼錯誤還是用戶名錯誤
  2. 只是單一的返回登陸失敗

對於第一種情況就可以直接嘗試在username之后輸入payload的了

  • 判斷注入點
  • 按照執行效果判斷sql注入類型
  • 利用字典跑一下被過濾的特殊符號和關鍵字(判斷語句一般使用regexp或length(),and或者異或,再或者就是直接輸入)

payload and length('關鍵字')>0
^length('關鍵字')>0

  • 最后利用information_schema爆出庫名,表名,字段名以及flag

對於第二種情況就稍微要復雜一些了

  • 可以用burp抓個包,查看一下數據包中是否存在着一些提示內容
  • 嘗試一些萬能的登陸密碼:假設sql語句是:
    select * from user where username=’$username’ and password=’$password’
    而我們我發送的數據包中是 username= &password=
  1. username=reborn'='&password=reborn'=' => select * from user where username='reborn'=' and password='reborn'='=>select * from user where 1 and 1

  2. username=' or 1=1 %23&password=123456

  3. username=admicsfn' union select '25d55ad283aa400af464c76d713c07ad'%23&password=12345678利用不存在的用戶再去構造一個密碼來進行登陸

  • 查看一下(利用字典)試一試哪一個特殊符號會報錯之類的,如果有報錯,則考慮報錯注入
  • 如果報錯的是一些不常見的字符串,那可能就涉及了某些漏洞,比如%報錯,就可能是sprintf格式化字符串漏洞
  • 題外話:平時多瀏覽一些安全網站,去找新出現的漏洞,及時去做一些漏洞復現,與時俱進

2.題目是GET注入(大概率是回顯注入)

  1. 判斷注入點
  2. 利用order by判斷字段數
  3. union select 1,2,3,...%23判斷具體哪個字段存在回顯
  4. 利用字典跑一下被過濾的特殊符號和關鍵字(判斷語句一般使用length(),and或者異或,再或者就是直接輸入)
  5. 最后利用information_schema爆出庫名,表名,字段名以及flag
  • 如果回顯的內容一直不存在變化那就需要考慮盲注了

3.頁面直接返回注入結果(insert等其他類型的注入,考慮時間盲注)

可以使用' and sleep(5)='1'='1' and sleep(5)='1'='1' %23來判斷sleep()能否執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM