前言
sql注入在很早很早以前是很常見的一個漏洞。后來隨著安全水平的提高,sql注入已經(jīng)很少能夠看到了。但是就在今天,還有很多網(wǎng)站帶著sql注入漏洞在運(yùn)行。稍微有點(diǎn)安全意識的朋友就應(yīng)該懂得要做一下sql注入過濾。
SQL注入的繞過技巧有很多,具體的繞過技巧需要看具體的環(huán)境,而且很多的繞過方法需要有一個實(shí)際的環(huán)境,最好是你在滲透測試的過程中遇到的環(huán)境,否則如果僅僅是自己憑空想,那顯然是不靠譜的。這篇文章就是總結(jié)我在遇到的CTF題目或者是滲透環(huán)境的過程中,所使用到的sql注入的繞過技巧,這篇文章隨著自己的見識和能力不斷的提升,所總結(jié)的方法也會變多。
一、引號繞過
會使用到引號的地方是在于最后的where子句中。如下面的一條sql語句,這條語句就是一個簡單的用來查選得到users表中所有字段的一條語句。
select column_name from information_schema.tables where table_name="users"
這個時(shí)候如果引號被過濾了,那么上面的where子句就無法使用了。那么遇到這樣的問題就要使用十六進(jìn)制來處理這個問題了。
users的十六進(jìn)制的字符串是7573657273。那么最后的sql語句就變?yōu)榱耍?/p>
select column_name from information_schema.tables where table_name=0x7573657273
小結(jié):使用十六進(jìn)制可以繞過引號
二、逗號繞過
在使用盲注的時(shí)候,需要使用到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
# 等價(jià)于下面這條SQL語句
select * from news limit 1 offset 0
小結(jié):使用from可以繞過逗號
三、比較符(,>)繞過
同樣是在使用盲注的時(shí)候,在使用二分查找的時(shí)候需要使用到比較操作符來進(jìn)行查找。如果無法使用比較操作符,那么就需要使用到greatest來進(jìn)行繞過了。
最常見的一個盲注的sql語句。
select * from users where id=1 and ascii(substr(database(),0,1))>64
此時(shí)如果比較操作符被過濾,上面的盲注語句則無法使用,那么就可以使用greatest來代替比較操作符了。greatest(n1,n2,n3,等)
函數(shù)返回輸入?yún)?shù)(n1,n2,n3,等)
的最大值。
那么上面的這條sql語句可以使用greatest變?yōu)槿缦碌淖泳?
select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64
小結(jié):使用greatest()繞過比較操作符。
總結(jié)
好了,以上就是關(guān)于SQL注入繞過技巧的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- 防止xss和sql注入:JS特殊字符過濾正則
- 一個過濾重復(fù)數(shù)據(jù)的 SQL 語句
- MySQL注入繞開過濾的技巧總結(jié)
- SQL注入中繞過 單引號 限制繼續(xù)注入
- 多列復(fù)合索引的使用 繞過微軟sql server的一個缺陷
- 關(guān)于SQL注入繞過的一些知識點(diǎn)
- SQL Server簡單模式下誤刪除堆表記錄恢復(fù)方法(繞過頁眉校驗(yàn))
- Mysql如何巧妙的繞過未知字段名詳解
- SQL注入技巧之顯注與盲注中過濾逗號繞過詳析