程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> SQL注入繞過的技巧總結

SQL注入繞過的技巧總結

編輯:更多數據庫知識

前言

sql注入在很早很早以前是很常見的一個漏洞。後來隨著安全水平的提高,sql注入已經很少能夠看到了。但是就在今天,還有很多網站帶著sql注入漏洞在運行。稍微有點安全意識的朋友就應該懂得要做一下sql注入過濾。

SQL注入的繞過技巧有很多,具體的繞過技巧需要看具體的環境,而且很多的繞過方法需要有一個實際的環境,最好是你在滲透測試的過程中遇到的環境,否則如果僅僅是自己憑空想,那顯然是不靠譜的。這篇文章就是總結我在遇到的CTF題目或者是滲透環境的過程中,所使用到的sql注入的繞過技巧,這篇文章隨著自己的見識和能力不斷的提升,所總結的方法也會變多。

一、引號繞過

會使用到引號的地方是在於最後的where子句中。如下面的一條sql語句,這條語句就是一個簡單的用來查選得到users表中所有字段的一條語句。

select column_name from information_schema.tables where table_name="users"

這個時候如果引號被過濾了,那麼上面的where子句就無法使用了。那麼遇到這樣的問題就要使用十六進制來處理這個問題了。
users的十六進制的字符串是7573657273。那麼最後的sql語句就變為了:

select column_name from information_schema.tables where table_name=0x7573657273

小結:使用十六進制可以繞過引號

二、逗號繞過

在使用盲注的時候,需要使用到substr() ,mid() ,limit。這些子句方法都需要使用到逗號。對於substr()mid()這兩個方法可以使用from to的方式來解決。

select substr(database(0 from 1 for 1);
select mid(database(0 from 1 for 1);

對於limit可以使用offset來繞過。

select * from news limit 0,1
# 等價於下面這條SQL語句
select * from news limit 1 offset 0

小結:使用from可以繞過逗號

三、比較符(<,>)繞過

同樣是在使用盲注的時候,在使用二分查找的時候需要使用到比較操作符來進行查找。如果無法使用比較操作符,那麼就需要使用到greatest來進行繞過了。

最常見的一個盲注的sql語句。

select * from users where id=1 and ascii(substr(database(),0,1))>64

此時如果比較操作符被過濾,上面的盲注語句則無法使用,那麼就可以使用greatest來代替比較操作符了。greatest(n1,n2,n3,等)函數返回輸入參數(n1,n2,n3,等)的最大值。

那麼上面的這條sql語句可以使用greatest變為如下的子句:

select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64

小結:使用greatest()繞過比較操作符。

總結

好了,以上就是關於SQL注入繞過技巧的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對的支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved