首页
社区
课程
招聘
[分享]pwnable.kr bof day3
发表于: 2021-1-4 22:43 9618

[分享]pwnable.kr bof day3

2021-1-4 22:43
9618

bof.c 源码如下

我们的目标是执行 system("/bin/sh");
需令 key == 0xcafebabe,key 的初始值为 0xdeadbeef
已知 overflowme 是一个局部数组变量,长度为 32,且通过 gets 获取,没有边界检查,所以可以考虑在执行 gets(overflowme); 把 key 的值覆盖为 0xcafebabe


与源码对照着看
a1 即 key,地址在 ebp + 8h 处
s 即 overflowme[32]; 首地址在 ebp - 2C 处
所以 s 填充 2Ch + 8h = 34h = 52 个字符后,可以覆盖 key 值


注 cat - 是为了与 shell 保持连接

#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;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
    char overflowme[32];
    printf("overflow me : ");
    gets(overflowme);    // smash me!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (6)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
小pwn   pwn
2021-1-5 13:01
0
雪    币: 47
活跃值: (3673)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
我慢慢就不那么菜了。。。
2021-1-5 20:09
0
雪    币: 33
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这题的canary居然只是个摆设。。。我还想了半天。。。
2021-1-10 22:00
0
雪    币: 47
活跃值: (3673)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
tfire 这题的canary居然只是个摆设。。。我还想了半天。。。
源码里没有验证 canary 的语句。。。
2021-1-10 22:10
0
雪    币: 33
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
i乂 源码里没有验证 canary 的语句。。。
readgsdword就是验证canary的,前面是设置,后面ret的时候是验证,而且用checksec也可以看到是有canary的
2021-1-10 23:12
0
雪    币: 47
活跃值: (3673)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
嗷嗷嗷,我做题的步骤有问题,没有考虑 canary
2021-1-12 18:59
0
游客
登录 | 注册 方可回帖
返回
//