頻道欄目
首頁 > 資訊 > 網站安全 > 正文

利用redis寫webshell

15-03-17        來源:[db:作者]  
收藏   我要投稿

redis和mongodb我之所見

最近自己在做一些個人的小創作、小項目,其中用到了mongodb和redis,最初可能對這二者沒有深入的認識。
都是所謂的“非關系型數據庫”,有什么區別么?

實際上,在我看來,redis的角色更接近于memcache,而mongodb是一個真正的數據庫。

redis是一個key-value型數據庫,信息以鍵對應值的關系存儲在內存中,比memcache較大的優勢就在于其數據結構的多樣性。

說它不算一個真正意義上的數據庫,因為redis是主要把數據存儲在內存中(當然可以把其存儲至硬盤上,這也是寫shell的必要條件之一),其“緩存”的性質遠大于其“數據存儲”的性質,其中數據的正刪改查也只是像變量操作一樣簡單。而mongodb卻是一個“存儲數據”的系統,增刪改查數據的時候有“與或非”條件,查詢數據的方式也能像SQL數據庫一樣靈活,這是redis所不具備的。

所以在我的項目中,redis作為session、任務隊列的存儲器,而mongodb作為數據(包括用戶信息等)的存儲器。

進入正題,昨天看到freebuf上已經說了redis可能造成的安全問題,提到了寫文件,那么我在這里把方法說明一下吧。

redis安裝完成以后有自己的命令行,也就是redis-cli,其中包含的命令可以在:http://www.kaosanakqu.com 進行查閱。各個客戶端基本也就是依照這個命令去增刪改查。

之前說了redis的數據主要保存在內存中,當與memcache不同之處在于,我們可以隨時執行“save”命令將當前redis的數據保存到硬盤上,另外redis也會根據配置自動存儲數據到硬盤上。

這不得不說到redis的持久化運作方案 http://www.kaosanakqu.com  ,其中說到的一個RDB,一個AOF。RDB更像一個數據庫備份文件,而AOF是一個log日志文件。我們可以設置讓redis再指定時間、指定更改次數時進行備份,生成RDB文件;而設置AOF,可以在操作或時間過程后將“日志”寫入一個文件的最末,當操作越來越多,則AOF文件越來越大。

 

二者是相輔相成的,通過二者的配合我們能夠穩定地持久地將數據存儲于服務器上。

 

redis5

利用redis寫webshell

而我們就是利用這些儲存數據的操作,來進行任意文件寫入。

redis的配置中,有幾個關鍵項目:

dir,指定的是redis的“工作路徑”,之后生成的RDB和AOF文件都會存儲在這里。

dbfilename,RDB文件名,默認為“dump.rdb”

appendonly,是否開啟AOF

appendfilename,AOF文件名,默認為“appendonly.aof”

appendfsync,AOF備份方式:always、everysec、no

經過我的研究發現,我們可以將dir設置為一個目錄a,而dbfilename為文件名b,再執行save或bgsave,則我們就可以寫入一個路徑為a/b的任意文件:

redis

 

當我們獲得了一個redis控制臺,我們可以調用config set/get等命令對redis的部分配置進行修改。

而恰好的是,我們可以通過config set來更改dir和dbfilename。也就是說我們可以不用修改redis.conf,也不用重啟redis服務就可以寫入任意文件:

config set dir /home/wwwroot/default/
config set dbfilename redis.php
set webshell "<?php phpinfo(); ?>"
save

redis2

當我們隨便set一個變量webshell的值為”<?php phpinfo(); ?>”后,即可對服務器進行getshell?梢娨褜懭耄

導出的RDB實際上是一個二進制文件,但因為其中包含<?php phpinfo(); ?>,所以被解析了:

redis3

在前圖中,我們可以看到其實還生成了一個appendonly.aof,這個文件名能不能自定義呢?可惜的是,appendfilename的值并不能使用config set命令定義:

redis4

但僅有的一個dbfilename已經足夠了。

所以,以后如果掃到redis未授權訪問,先別急著提交烏云?纯捶⻊掌饔袥]有web服務,如果有,不妨試試能不能拿下webshell。

相關姿勢

redis權限其實很高的,一般都是root

利用前提:

1.redis未授權 能redis-cli連上

2.開了web并且知道路徑(如利用phpinfo)

如果沒執行成功 檢查看看:1.shell可讀權限 2.shell內容是否前面有<?這種字符把shell弄壞了(主要原因可能是shell寫的有問題)

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片