page1
Less-1 GET - Error based - Single quotes - String(基于錯誤的GET單引號字符型注入)
首先輸入引數?id=1,這時頁面正常顯示,并不報錯,

這時我們輸入?id=1‘時出現報錯,可以判斷它是單引號注入
常規注入,判斷欄位數,當我們order by10時,發生錯誤,然后我們用二分法判斷有幾個欄位(向上取整),

當我們到order by 3 時沒有報錯,這時候我們試試order by 4,發現報錯,說明只有三個欄位,

然后我們看回顯,用陳述句 union select 1,2,3發現顯示的還是用戶名和密碼,這就需要讓前面的陳述句報錯才可以將此陳述句注入進去,這時我們往1前面加一個-就可以報錯,從而執行我們注入的陳述句,發現2,3,可以回顯,
現在我們就可以進行注入了,但是如何獲取用戶名資料庫名等等呢,我總結了出來:
查看用戶名:union select 1,2,user()--+
查看資料庫名:union select 1,2,database()--+
查看資料庫版本: union select 1,2,version()--+
我們查看資料庫名,是security資料庫
然后我們就可以進行對security資料庫的查看了,
查看表:union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
查欄位:union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()--+
查表中的資料:union select 1,2,group_concat(username,0x3a,password) from users--+
LESS2 GET - Error based - Intiger based (基于錯誤的GET整型注入)

根據報錯資訊我們可以知道為數字型注入,其余與第一題一致,
Less-3 GET - Error based - Single quotes with twist string (基于錯誤的GET單引號變形字符型注入)

根據報錯資訊我們發現它是字符型注入,且閉合方式為’)
當我們發現這樣寫時,就可以閉合,之后的與上面兩個一致,
http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,3 --+
Less-4 GET - Error based - Double Quotes - String (基于錯誤的GET雙引號字符型注入)

當我們輸入單引號是,發現不報錯,雙引號時報錯,根據報錯資訊我們可以推斷是字符型注入,閉合方式為”),
當我們發現這樣寫時,就可以閉合,之后的與上面兩個一致,
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,3 --+
Less-5 GET - Double Injection - Single Quotes - String (雙注入GET單引號字符型注入)
在這一關我們會發現無論id值如何變化,永遠顯示的都是you are in,顯然我們不能采用聯合查詢的方法,因為沒有回顯,看到這里,我們就可以用left函式來嘗試一下
http://127.0.0.1/sqli/Less-5/?id=1' and left((select database()),1)='a'--+
這里的意思是如果第一個字符是a的話就證明正確,就會回傳you are in
很明顯沒有回傳,第一個字母不是a,因為我們已經知道了是security,我們試試s
http://127.0.0.1/sqli/Less-5/?id=1' and left((select database()),1)='s'--+
s正確,回傳了you are in,然后我們更改1為2,因為第一位已經確定了是s,就來確定第二位 
以此類推,就能得到我們想要的資料庫名,但是這種方法顯然特別繁瑣,這時候就要用到我們的burp暴力破解了,
首先用burp抓包,發送到破解模塊
設定暴力破解

在爆破出來的資料中我們發現s的長度不同,下面也正常回傳了you are in,說明第一位為s

然后我們猜解第二位,與上面只有這里不同,下面已經標記,以此類推
Less-6 GET - Double Injection - Double Quotes - String (雙注入GET雙引號字符型注入)
當我們輸入單引號是,發現不報錯,雙引號時報錯,根據報錯資訊我們可以推斷是字符型注入,閉合方式為”,
剩余的與第五關一致,
Less-7 GET - Dump into outfile - String (匯出檔案GET字符型注入)
在我們準備閉合陳述句是,發現到了'))時可以閉合
之后的就跟之前的相同了,
Less-8 GET - Blind - Boolian Based - Single Quotes (布爾型單引號GET盲注)
當我們試用‘時,它閉合
沒有回顯,我們可以試試盲注
延遲了5s,且第一個字符是s,
如果試用其他字符,可以看到有明顯差別

也可以用ascii碼來查找
http://127.0.0.1/sqli-labs/Less-8/?id=1' and if(ascii(substr(database(),1,1))>1,sleep(5),sleep(1)) --+
Less-9 GET - Blind - Time based. - Single Quotes (基于時間的GET單引號盲注)
我們查看原始碼,發現是單引號閉合
我們試試時間盲注
這樣仍然可行,其余同less5
Less-10 GET - Blind - Time based - double quotes (基于時間的雙引號盲注)
查看原始碼,閉合方式為“
其余同less9.
Less-11 POST - Error Based - Single quotes- String (基于錯誤的POST型單引號字符型注入)
嘗試用admin登錄,發現回顯
post:
發現order by2可以 3不可以
我們查看回顯,發現回顯1,2
接下來我們正常查詢即可 
這樣就可以查出自己想要的資料了
Less-12 POST - Error Based - Double quotes- String-with twist (基于錯誤的雙引號POST型字符型變形的注入)
在我們嘗試找出閉合是發現其閉合方式為“)
在對其進行post注入時改一下閉合方式即可,其余同less11
Less-13 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)
當我們加上’是發現報錯,根據報錯提示我們發現閉合形式為‘)
在我們登錄成功后發現沒有回顯

直接基于時間的盲注即可,同1-10關,只是在burp里面修改即可
Less-14 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)

他沒有任何回顯,就只能盲注了,
less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/時間延遲單引號POST型盲注)
查看原始碼我們發現他是’閉合
我們使用admin and sleep(10)#進行盲注,然后用if,其余同上,
Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/時間延遲的雙引號POST型盲注)
當測驗到admin“)#時登錄成功,閉合方式為”),依舊是進行布爾盲注和時間盲注
Less-17 POST - Update Query- Error Based - String (基于錯誤的更新查詢POST注入)
我們可以看到用戶名被check_input包裹了,而passwd沒有

這是它的檢查函式,傳入的值只會檢查前15位
Less-18 POST - Header Injection - Uagent field - Error based (基于錯誤的用戶代理,頭部POST注入)
我們嘗試直接burp,在我們burp并且登錄成功后,發現UA可以注入并且回顯
但是沒有我們想要的東西,嘗試報錯注入后就可以得到我們想要的東西
Less-19 POST - Header Injection - Referer field - Error based (基于頭部的Referer POST報錯注入)
這里和上面比較相似,只是在referer處的回顯,查看界面,我們發現它將ip和referer進行了輸出
輸入單引號,發生了報錯
我們使用報錯注入:1' and extractvalue(1,concat(0x7e,(database()),0x7e)) and '
這樣就能拿到我們所需要的資料
Less-20 POST - Cookie injections - Uagent field - Error based (基于錯誤的cookie頭部POST注入)
在我們登錄成功后,發現回傳了很多資料
這里有一個按鈕,發現可以點擊delete your cookie,所以用的使我們的cookie進行了資料庫的查詢,所以我們應該在這里入手,
輸入單引號,發生報錯
我們正常進行,輸入order by 3發現可以,4不可以
我沒讓查詢失敗,查看1,2,3的位置
然后就跟正常查詢一樣即可
page2
Less-21 Cookie Injection- Error Based- complex - string
查看原始碼我們發現這里的cookie使用了base64的加密,用')閉合

給大家分享一個解密網站:在線加密解密 (oschina.net)
在我們進行注入時,要將代碼進行加密,否則會報錯,舉例如下

在進行注入時就要用base64的進行注入了
這里成功回顯,接下來就是正常注入了,只不過需要用base64加密一下,
Less-22 Cookie Injection- Error Based- Double Quotes - string (基于錯誤的雙引號字符型Cookie注入)
根據原始碼我們發現使用的是雙引號閉合
接下來就跟less21一樣了,只不過閉合方式變成了“
明文:-admin" union select 1,2,database()#
base64:LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

Less-23 GET - Error based - strip comments (基于錯誤的,過濾注釋的GET型)
經過我的網路查詢,我發現這關可以將聯合陳述句直接放入id中進行查詢
http://127.0.0.1/sqli/Less-23/?id='union select 1,2,database()'

這樣可以直接將我們想要的東西給查詢出來,剩下的就是把查詢陳述句放入id里面即可,
例如:查表:http://127.0.0.1/sqli/Less-23/?id=?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'='
Less - 24 Second Degree Injections Real treat -Store Injections (二次注入)
這里是個二次注入
其實因為我們已經知道了后臺資料庫中有admin用戶名,所以我們注冊一個admin'#,密碼設定為123456.

然后登錄我們注冊的賬號
然后把admin'#的密碼改為123
這時我們就修改了admin的密碼,
Less-25 Trick with OR & AND (過濾了or和and)
查看原始碼,單引號包裹
這里說過濾了我們所有的or和and
那么我們就可以進行雙寫,這里or雙寫但是and沒有,那我們試試把and也雙寫,
雙寫and后
Less-25a Trick with OR & AND Blind (過濾了or和and的盲注)
查看原始碼,不需要單引號包裹
也是雙寫or和and,其余同上,
Less-26 Trick with comments and space (過濾了注釋和空格的注入)
查看原始碼,是單引號閉合
這里我們發現他將空格,and都過濾了,and可以雙寫,那么空格怎么辦,
我們可以用url編碼進行繞過
%09 Tab鍵(水平)
%0a 新建一行
%0c 新的一頁
%0d return 鍵
%0b Tab鍵(垂直)
%a0 空格
() 繞過
我們嘗試使用報錯注入:

這樣就注入成功了,
less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(過濾了空格和注釋的盲注)
查看原始碼我們發現閉合方式為')

直接盲注就可以,其余同上一關,
less 27 GET - Error Based- All your UNION & SELECT belong to us (過濾了union和select的)
這一關過濾了union和select,我們用大小寫繞過即可

經過測驗我們發現%0A可以當做括號
成功回顯
less 27a GET - Blind Based- All your UNION & SELECT belong to us
這里和上一關大致相同,只是閉合方式不一樣,經過測驗,我們發現雙引號可以閉合

less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于錯誤的,有括號的單引號字符型,過濾了union和select等的注入)
這關和less25有異曲同工之妙,只不過25關是雙寫or和and,這里雙寫union和select

雙寫繞過即可,
less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括號的單引號字符型,過濾了union和select等的注入
這關與上一關一樣,直接雙寫就可以,
Less-29 基于WAF的一個錯誤
waf服務器(tomcat)只決議重復引數里面的前者,而真正的web服務器(Apache)只決議重復引數里面的后者,我們可以傳入兩個id引數,前者合法而后者為我們想注入的內容
我們的后端是apache,那么我們只要將引數放在后面即可,
Less-30 Get-Blind Havaing with WAF
這里與上一關差不多,只不過閉合方式變成了雙引號,
Less-31 Protection with WAF
與上述一致,閉合方式為"),
Less-32 Bypass addslashes()

check_addslashes函式把\\ 單引號 雙引號都進行過濾轉義
明顯的編碼gbk 寬位元組注入

Less-33 Bypass addslashes()
32關函式:
33關函式:
這關與上一關一致,只不過是換成了addslashes,
- addslashes() 函式
函式回傳在預定義字符之前添加反斜杠的字串,
單引號(’)
雙引號(")
反斜杠(\)
NULL
Less-34 Bypass Add SLASHES
這里需要抓包注入,其余同上,
Less-35 why care for addslashes()

id沒有被單引號括起來所以addslashes起不到作用,正常注入即可
Less-36 Bypass MySQL Real Escape String
在我們進行測驗后發現有轉義,寬位元組注入,
直接注入:http://127.0.0.1/sqli/Less-36/?id=-1%df' union select 1,2,3--+
Less-37- MySQL_real_escape_string
這一關用post登錄而已,用burp抓包,其余同less34

page-3
Less-38 stacked Query
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325464.html
標籤:其他
