0x02-逆向-执行环境变量

目录

今日目标

继续 narnia 系列。今天的目标是 narnia1。

首先,这个挑战本身很简单,但是可以细想一下背后的原理,还是有一些地方值得挖掘和理解。

这是 narnia1 的源码。

#include <stdio.h>

int main(){
    int (*ret)();

    if(getenv("EGG")==NULL){
        printf("Give me something to execute at the env-variable EGG\n");
        exit(1);
    }

    printf("Trying to execute EGG!\n");
    ret = getenv("EGG");
    ret();

    return 0;
}

源码要求要设置一个名为 EGG 的环境变量,这个环境变量被赋值给变量 ret,最后程序调用 ret 执行 EGG 中的指令。

narnia 的实现原理都是一样,每一个二进制都设置了 suid,运行时获得下一个用户的权限,从而能获取下一个用户的密码(回看上一篇)。

在这里插入图片描述

可以学到什么?

什么是 Shellcode?

Shellcode,又称 bytecode,其本质,是机器指令,其表现形式,是机器指令的 16 进制。如下图:

在这里插入图片描述

这一段 shellcode 是 execve("/bin/bash", ["/bin/bash", "-p"], NULL) 的机器指令形式。

下面我们看一下 shellcode 是如何

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值