萌新学习缓冲区溢出漏洞(2.基础题)

admin 2022年4月2日08:35:24评论97 views字数 3248阅读10分49秒阅读模式

点击蓝字

关注我们




环境准备




需要一个vulnhub的靶机安装比较简单装好之后需要台kali

萌新学习缓冲区溢出漏洞(2.基础题)

萌新学习缓冲区溢出漏洞(2.基础题)
安装好以后可以用netdiscover扫出IP出来
萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)
然后用给定账号user user进行波SSH登录
萌新学习缓冲区溢出漏洞(2.基础题)

萌新学习缓冲区溢出漏洞(2.基础题)
所有的关卡都设置在/opt/protostar/bin这里
萌新学习缓冲区溢出漏洞(2.基础题)

                        第一关 Stack0


第一关的代码如下所示:

简单理解第一关就是程序可以输入一些值,假如没超过64个字节返回Try again?超出缓冲区容量会返回you have changed the ‘modified’ variable我们的目标就是让程序溢出返回you have changed the modified variable

#include#include
int main(int argc, char **argv){ volatile int modified; //设置关键词 int也许会被某种方式修改 char buffer[64]; //设置缓冲区空间字节容量为64 modified = 0 ;//初始化modified的值 gets(buffer); //允许我们输入”buffer”的值可以理解我们输入的值会顺便丢到缓冲区中 if(modified != 0) { printf("you have changed the 'modified' variablen"); } else { printf("Try again?n"); }}



正常运行是这样的。
萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)


那想让程序返回另外一个结果我们就要让它溢出生产超过64个字节让其溢出即可
萌新学习缓冲区溢出漏洞(2.基础题)



                        第二关 Stack1


源代码如下:

#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <string.h>
int main(int argc, char **argv){ volatile int modified; char buffer[64]; if(argc == 1) { errx(1, "please specify an argumentn"); } modified = 0; strcpy(buffer, argv[1]); if(modified == 0x61626364) { printf("you have correctly got the variable to the right valuen"); } else { printf("Try again, you got 0x%08xn", modified); }}



代码重上到下拆解一波

1.先看main函数这里,创建一个关键词int 变量叫modified,并且给buffer分配64字节的缓冲区空间

volatile int modified;char buffer[64];


2.检测我们是否有输入一个值
if(argc == 1) {    errx(1, "please specify an argumentn");}


3.首先初始化modified这个值,然后使用strcpy 复制功能把argv[1]的值复制到modified的缓冲区空间中

modified = 0;strcpy(buffer, argv[1]);



4.最后就是检测变量的值是否等于0x61626364(dcba的16进制的值)

if(modified == 0x61626364) {    printf("you have correctly got the variable to the right valuen");}else{    printf("Try again, you got 0x%08xn", modified);}



如果我们想要得到答案you have correctly got the variable to the right value,

我们要把值设置成0x61626364(由于是0x开头可以确认是16进制)。然后由于有strcpy函数会把我们输入的功能丢到buffer缓冲区里面。假如我们不把数据冲出buffer以外,modified会默认为0不会显示答案。所以要先溢出再添加dcba


正常执行由于没有参数会提示请输入参数

萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)



随便输入点东西由于输入的字节在缓冲区容量之类没溢出,所以modified的值没改变

萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)



那么先利用python生成64个a然后再末尾处添加dcba

然后运行即可

萌新学习缓冲区溢出漏洞(2.基础题)


                        第三关 Stack2



#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <string.h>
int main(int argc, char **argv){ volatile int modified; char buffer[64]; char *variable; variable = getenv("GREENIE"); if(variable == NULL) { errx(1, "please set the GREENIE environment variablen"); } modified = 0; strcpy(buffer, variable); if(modified == 0x0d0a0d0a) { printf("you have correctly modified the variablen");
} else { printf("Try again, you got 0x%08xn", modified); }}

继续拆分

1.还是一样先定义一个关键词int modified,然后分配给buffer缓冲区空间64个字节。这次还多了一个新的变量叫variable,从一个名为GREENIE的环境变量获取值

Volatile int modified;Char buffer[64]Variable = getenv(“GREENIE”)


2.检查variable是否为空

if(variable == NULL){       Errx(1, “please set the GREENIE environment variablen”)

3.设置modified初始值为0

Modified = 0;

4.利用strcpy复制功能把variable赋值给buffer

Strcpy(buffer, variable)

5.检测modified的值是否为0x0d0a0d0a


if(modified == 0x0d0a0d0a) {       printf(“you have correctly modified the variablen”);} else {       printf(“Try again, you got 0x%08xn”, modified);



首先需要理解一下什么是环境变量值(environment variable)。简单的理解就是环境变量是用来存储某些东西的值的变量,系统可以使用这些东西同时服务也可以访问这些变量


比如说打印波 环境变量$BASH的值会返回/bin/bash

萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)



如果我们想要运行bash的话直接在终端输入bash而不是/bin/bash因为系统会自己找到变量$BASH并直接读取/找到它的路径。

但系统不会给每个二进制文件存储一个变量,所以一个新的变量PATH诞生了,它是用来解决这个问题的。该变量会包含bin或者是dir。当我们在终端敲python的时候它会在这些目录中查找然后执行python

萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)



不输入任何东西直接运行是这样的直接走第二条语句检测是否为空

萌新学习缓冲区溢出漏洞(2.基础题)


萌新学习缓冲区溢出漏洞(2.基础题)


那么这里就需要设置环境变量为GREENIE(也没有环境变量叫GREENIE)才能继续往下走。同时要得到答案还需要满足modified的值为0x0d0a0d0a,这题跟上题比较类似也是需要先溢出覆盖才可。


这次无法直接使用ASCII码的值由于0x0d还有r的意思 0x0a=另起一行n的意思。所以只能直接打16进制的值进去然后执行


GREENIE = `python -c “print(‘a’ * 64 + ‘0xa0xbx0ax0b’)”`

先创建一个环境变量GREENIE,然后导入最后执行就可


萌新学习缓冲区溢出漏洞(2.基础题)



萌新学习缓冲区溢出漏洞(2.基础题)

微信公众号|神隐攻防实验室

  关注我们 |  获取更多精彩

 神隐攻防 · 



萌新学习缓冲区溢出漏洞(2.基础题)



萌新学习缓冲区溢出漏洞(2.基础题)

点个

萌新学习缓冲区溢出漏洞(2.基础题)

在看

你最好看



原文始发于微信公众号(神隐攻防实验室):萌新学习缓冲区溢出漏洞(2.基础题)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月2日08:35:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   萌新学习缓冲区溢出漏洞(2.基础题)https://cn-sec.com/archives/788154.html

发表评论

匿名网友 填写信息