日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用redis写webshell

發布時間:2024/9/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用redis写webshell 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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://redis.io/commands 進行查閱。各個客戶端基本也就是依照這個命令去增刪改查。

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

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

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

利用redis寫webshell

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

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

?

dir,指定的是redis的“工作路徑”,之后生成的RDB和AOF文件都會存儲在這里。dbfilename,RDB文件名,默認為“dump.rdb”appendonly,是否開啟AOFappendfilename,AOF文件名,默認為“appendonly.aof”appendfsync,AOF備份方式:always、everysec、no

?

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

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

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

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

?

當我們隨便set一個變量webshell的值為"<?php phpinfo(); ?>"后,即可對服務器進行getshell。可見已寫入:

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

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

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

所以,以后如果掃到redis未授權訪問,先別急著提交烏云。看看服務器有沒有web服務,如果有,不妨試試能不能拿下webshell。

安全脈搏姿勢

redis權限其實很高的,一般都是root
利用前提:
1.redis未授權 能redis-cli連上
2.開了web并且知道路徑(如利用phpinfo)
如果沒執行成功 檢查看看:1.shell可讀權限 2.shell內容是否前面有<?這種字符把shell弄壞了(主要原因可能是shell寫的有問題)

redis基礎技巧參見:Trying to hack Redis via HTTP requests

【作者:phithon?安全脈搏首發】

【本文版權歸安全脈搏所有,未經許可不得轉載。文章僅代表作者看法,如有不同觀點,歡迎添加安全脈搏微信號:SecPulse,進行交流。】

總結

以上是生活随笔為你收集整理的利用redis写webshell的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。