mysql資料庫爆庫爆表爆欄位,mysql資料庫爆破

本文目錄一覽:

Java前提下, MySQL資料庫,一次性存儲大量數據導致內存溢出

內存溢出導致程序崩潰,也分是java層崩了,還是mysql崩了。

如果是java層崩了,注意不要一次性載入太多的數據到內存,並且不在使用的數據要徹底放棄引用關係。java雖然是自動回收,回收的原則就是一個對象不再被持有,即引用計數為零。如果數據太大,可考慮臨時文件。

如果是mysql崩了,首先增加配置緩存。一般來說mysql是不容易崩的,特別是插入操作的時候。查詢的時候如果查詢結果記錄集特別大,會導致一個查詢需要使用很大的內存空間,這種是有問題的。而插入操作都是一條一條的執行,不會導致大內存的使用。

如果僅僅是數據移植,也盡量不要用ORM框架,比如hibernate,mybatis這些東西,因為他們都有自己的緩存,直接使用JDBC比較好。

如何批量修改mysql資料庫表的欄位類型

mysql資料庫欄位內容批量更新:

利用sql中case

when結構可以根據不同的條件批量更新,舉例如下:

update

order

set

display_order

=

case

id

when

1

then

‘value’

when

2

then

‘value’

when

3

then

‘value’

end

where

id

in

(1,2,3)

這句sql的意思是,更新display_order

欄位,如果id=1

則display_order

的值為3,如果id=2

display_order

的值為4,如果id=3

display_order

的值為5。

部分sql注入總結

本人ctf選手一名,在最近做練習時遇到了一些sql注入的題目,但是sql注入一直是我的弱項之一,所以寫一篇總結記錄一下最近學到的一些sql注入漏洞的利用。

在可以聯合查詢的題目中,一般會將資料庫查詢的數據回顯到首頁面中,這是聯合注入的前提。

適用於有回顯同時資料庫軟體版本是5.0以上的MYSQL資料庫,因為MYSQL會有一個系統資料庫information_schema, information_schema 用於存儲資料庫元數據(關於數據的數據),例如資料庫名、表名、列的數據類型、訪問許可權等

聯合注入的過程:

判斷注入點可以用and 1=1/and 1=2用於判斷注入點

當注入類型為數字型時返回頁面會不同,但都能正常執行。

sql注入通常為數字型注入和字元型注入:

1、數字型注入

數字型語句:

在這種情況下直接使用and 1=1/and 1=2是都可以正常執行的但是返回的界面是不一樣的

2、字元型注入

字元型語句:

字元型語句輸入我們的輸入會被一對單引號或這雙引號閉合起來。

所以如果我們同樣輸入and 1=1/and 1=2會發現回顯畫面是並無不同的。

在我們傳入and 1=1/and 1=2時語句變為

傳入的東西變成了字元串並不會被當做命令。

所以字元型的測試方法最簡單的就是加上單引號 ‘ ,出現報錯。

加上注釋符–後正常回顯界面。

這裡還有的點就是sql語句的閉合也是有時候不同的,下面是一些常見的

這一步可以用到order by函數,order by 函數是對MySQL中查詢結果按照指定欄位名進行排序,除了指定字 段名還可以指定欄位的欄位進行排序,第一個查詢欄位為1,第二個為2,依次類推,所以可以利用order by就可以判斷列數。

以字元型注入為例:

在列數存在時會正常回顯

但是列數不存在時就會報錯

這步就說明了為什麼是聯合注入了,用到了UNION,UNION的作用是將兩個select查詢結果合併

但是程序在展示數據的時候通常只會取結果集的第一行數據,這就讓聯合注入有了利用的點。

當我們查詢的第一行是不存在的時候就會回顯第二行給我們。

講查詢的數據置為-1,那第一行的數據為空,第二行自然就變為了第一行

在這個基礎上進行注入

可以發現2,3都為可以利用的顯示點。

和前面一樣利用union select,加上group_concat()一次性顯示。

現在非常多的Web程序沒有正常的錯誤回顯,這樣就需要我們利用報錯注入的方式來進行SQL注入了

報錯注入的利用步驟和聯合注入一致,只是利用函數不同。

以updatexml為例。

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target: 需要操作的xml片段

xpath_expr: 需要更新的xml路徑(Xpath格式)

new_xml: 更新後的內容

此函數用來更新選定XML片段的內容,將XML標記的給定片段的單個部分替換為 xml_target 新的XML片段 new_xml ,然後返回更改的XML。xml_target替換的部分 與xpath_expr 用戶提供的XPath表達式匹配。

這個函數當xpath路徑錯誤時就會報錯,而且會將路徑內容返回,這就能在報錯內容中看到我們想要的內容。

而且以~開頭的內容不是xml格式的語法,那就可以用concat函數拼接~使其報錯,當然只要是不符合格式的都可以使其報錯。

[極客大挑戰 2019]HardSQL

登錄界面嘗試注入,測試後發現是單引號字元型注入,且對union和空格進行了過濾,不能用到聯合注入,但是有錯誤信息回顯,說明可以使用報錯注入。

利用updatexml函數的報錯原理進行注入在路徑處利用concat函數拼接~和我們的注入語句

發現xpath錯誤並執行sql語句將錯誤返回。

在進行爆表這一步發現了等號也被過濾,但是可以用到like代替等號。

爆欄位

爆數據

這裡就出現了問題flag是不完整的,因為updatexml能查詢字元串的最大長度為32,所以這裡要用到left函數和right函數進行讀取

報錯注入有很多函數可以用不止updatexml一種,以下三種也是常用函數:

堆疊注入就是多條語句一同執行。

原理就是mysql_multi_query() 支持多條sql語句同時執行,用;分隔,成堆的執行sql語句。

比如

在許可權足夠的情況下甚至可以對資料庫進行增刪改查。但是堆疊注入的限制是很大的。但是與union聯合執行不同的是它可以同時執行無數條語句而且是任何sql語句。而union執行的語句是有限的。

[強網杯 2019]隨便注

判斷完注入類型後嘗試聯合注入,發現select被過濾,且正則不區分大小寫過濾。

那麼就用堆疊注入,使用show就可以不用select了。

接下去獲取表信息和欄位信息

那一串數字十分可疑大概率flag就在裡面,查看一下

這裡的表名要加上反單引號,是資料庫的引用符。

發現flag,但是沒辦法直接讀取。再讀取words,發現裡面有個id欄位,猜測資料庫語句為

結合1’or 1=1#可以讀取全部數據可以利用改名的方法把修改1919810931114514為words,flag修改為id,就可以把flag讀取了。

最終payload:

盲注需要掌握的幾個函數

在網頁屏蔽了錯誤信息時就只能通過網頁返回True或者False判斷,本質上是一種暴力破解,這就是布爾盲注的利用點。

首先,判斷注入點和注入類型是一樣的。

但是盲注沒有判斷列數這一步和判斷顯示位這兩步,這是和可回顯注入的不同。

判斷完注入類型後就要判斷資料庫的長度,這裡就用到了length函數。

以[WUSTCTF2020]顏值成績查詢為例

輸入參數後,發現url處有個get傳入的stunum

然後用到length函數測試是否有注入點。

發現頁面有明顯變化

將傳入變為

頁面回顯此學生不存在

那麼就可以得出資料庫名長度為3

測試發現過濾了空格

然後就是要查資料庫名了,這裡有兩種方法

一、只用substr函數,直接對比

這種方法在寫腳本時可以用於直接遍歷。

二、加上ascii函數

這個payload在寫腳本時直接遍歷同樣可以,也可用於二分法查找,二分法速度更快。

接下來的步驟就和聯合注入一樣,只不過使用substr函數一個一個截取字元逐個判斷。但是這種盲注手工一個一個注十分麻煩所以要用到腳本。

直接遍歷腳本

二分法腳本

時間盲注用於代碼存在sql注入漏洞,然而頁面既不會回顯數據,也不會回顯錯誤信息

語句執行後也不提示真假,我們不能通過頁面的內容來判斷

所以有布爾盲注就必有時間盲注,但有時間盲注不一定有布爾盲注

時間盲注主要是利用sleep函數讓網頁的響應時間不同從而實現注入。

sql-lab-less8:

無論輸入什麼都只會回顯一個you are in…,這就是時間盲注的特點。

當正常輸入?id=1時時間為11毫秒

判斷為單引號字元型注入後,插入sleep語句

明顯發現響應時間為3053毫秒。

利用時間的不同就可以利用腳本跑出資料庫,後續步驟和布爾盲注一致。

爆庫

爆表

爆欄位

腳本

在進行SQL注入時,發現union,and,or被完全過濾掉了,就可以考慮使用異或注入

什麼是異或呢

異或是一種邏輯運算,運演算法則簡言之就是:兩個條件相同(同真或同假)即為假(0),兩個條件不同即為真(1),null與任何條件做異或運算都為null,如果從數學的角度理解就是,空集與任何集合的交集都為空

即 1^1=0,0^0=0,1^0=1

利用這個原理可以在union,and,or都被過濾的情況下實現注入

[極客大挑戰 2019]FinalSQL

給了五個選項但是都沒什麼用,在點擊後都會在url處出現?id。

而且union,and,or都被過濾

測試發現?id=1^1會報錯

但是?id=1^0會返回?id=1的頁面,這就是前面說的原理,當1^0時是等於1的所以返回?id=1的頁面。

根據原理寫出payload,進而寫出腳本。

爆庫

爆表

爆欄位

據此可以寫出基於異或的布爾盲註腳本

實驗推薦:課程:SQL注入初級(合天網安實驗室)

mysql資料庫怎麼查看數據表有哪些欄位?

用輔助工具,就用desc table_name;或者是show create table table_name;

show create table table_name結果如下:

desc table_name結果如下:

MySQL 是一個關係型資料庫,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。MySQL 是一種關聯資料庫管理系統,關聯資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。MySQL 所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。

MySQL 軟體採用了雙授權政策(本詞條”授權政策”),它分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。由於其社區版的性能卓越,搭配 PHP ,Linux和 Apache 可組成良好的開發環境,經過多年的web技術發展,在業內被廣泛使用的一種web伺服器解決方案之一,稱之為LAMP。

MySQL是一個開放源碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250702.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 13:29
下一篇 2024-12-13 13:30

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論