当前位置: 首页 > article >正文

Pikachu漏洞练习平台之SSRF(服务器端请求伪造)

注意区分CSRF和SSRF:

CSRF:跨站请求伪造攻击,由客户端发起;

SSRF:是服务器端请求伪造,由服务器发起。

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

数据流:攻击者----->服务器---->目标地址

PHP中下面函数的使用不当可能会导致SSRF:

file_get_contents()
fsockopen()
curl_exec()

关于第一题,curl包含了用于程序开发的libcurl,libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap协议。  

点击之后正常情况是会出来一首诗,我这里可能搭建的靶场存在点问题;

影响不大,可以看到它请求了一个参数url

那么我们尝试请求其他服务,比如MySQL所在端口3306

构造payload

/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1:3306

可以探测出3306端口是处于开放状态,并且获取到了MySQL的版本号相关信息。

接下来我们使用file协议进行文件读取:

file://协议,需要填写绝对路径,很多时候只能读取txt文件,后面直接跟绝对路径。

构造payload

(针对Linux系统)

/vul/ssrf/ssrf_curl.php?url=file:///etc/passwd

回显成功

 

接下来我们看第二个:file_get_contents函数

file_get_contents() 函数用于将文件的内容读入到一个字符串中,和file() 一样,不同的是 file_get_contents() 把文件读入到一个字符串。

这个函数就很熟悉了,因为在CTF的PHP代码中很常见;看到这个函数就该想到文件包含,利用php伪协议。

使用php://filter(用于读取源码)

比如我们尝试读取这道题目 ssrf_fgc.php 的内容

构造payload

/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf_fgc.php

回显base64编码

解码即可得到php文件的源代码内容

想第一题那样读取etc下的passwd

(用file协议同样可以读取成功)

构造payload

/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=/etc/passwd

发现也是可行的 

同理,解base64即可得到相关内容

CTF的赛题中有时候会对编码进行限制过滤,可以换用其他编码格式,比如:

/vul/ssrf/ssrf_fgc.php?file=php://filter//convert.iconv.SJIS*.UCS-4*/resource=/etc/passwd

尝试使用伪协议php://input执行php代码,但是没有成功。


http://www.kler.cn/a/131604.html

相关文章:

  • R语言绘制精美图形 | 火山图 | 学习笔记
  • WEB 自动化神器 TestCafe(一)—安装和入门篇
  • H5游戏源码分享-超级染色体小游戏
  • 【腾讯云 HAI域探秘】浅尝一番AI绘画
  • 程序员的护城河
  • LTE信令流程及业务流程
  • CSS样式穿透
  • Nacos在Windows本地安装并启动教程
  • Zookeeper Java 开发,自定义分布式锁示例
  • js:Lodash一个JavaScript 实用工具库
  • Pytorch数据集读出到transform全过程
  • 4种智慧路灯典型应用场景介绍
  • [Docker]记一次使用jenkins将镜像文件推送到Harbor遇到的问题
  • 2023年11月12日阿里云产品全面故障的启示
  • RabbitMQ多线程配置和异常解决办法
  • 常见的数据结构有哪些?
  • 【第2章 Node.js基础】2.6 Node.js 的Buffer数据类型
  • 【原创】java+swing+mysql校园活动管理系统设计与实现
  • Docker命令 常用中间件运维部署,方便构建自己服务
  • Oxygen XML Editor 26版新功能