一次踩坑无数的栈溢出实验 | 技术精选0139

admin 2022年7月27日19:58:49评论45 views字数 1315阅读4分23秒阅读模式
一次踩坑无数的栈溢出实验 | 技术精选0139

一次踩坑无数的栈溢出实验 | 技术精选0139
本文约1300字,阅读约需3分钟。

由于不想做点鼠标的猴子,于是就自己尝试了一下利用,结果拐弯就是大坑——不是在踩坑的路上,就是在坑里摸爬滚打。幸亏有大佬指点,不然还在坑里。

1

栈溢出原理

程序内存栈是从高地址往低地址分配内存的,正因如此,当程序在栈中,某个变量写入的字节超过了这个变量本身所申请的字节数时,会改变其他相邻变量的值,轻则可以使程序崩溃,重则可以使攻击者控制程序执行流程。

利用

下面是栈溢出实验的代码:

#include <stdio.h>void success() { printf("You Hava already controlled it."); }void vulnerable(){  int val = 0;  char s[10];  gets(s);  if (val == 1)    printf("hunzin");}int main(int argc, char **argv){  vulnerable();  return 0;}

编译生成exe后进行计算偏移。

od分析

使用od打开该exe文件,下面为主要汇编代码,在主函数打断点后运行:

一次踩坑无数的栈溢出实验 | 技术精选0139

在输入字符串后暂停,可以看到0060FEFC对应的00401400为vulnerable函数结束时跳转的地址。

0060FEEC对应的是变量val的值,0060FEF8为vulnerable函数的基地址(EBP),从0060FEE2后存入用户输入的字符串,由于gets没有限制用户输入长度,所以可以构造输入来达到覆盖变量的值和函数返回地址。

012345678916进制字符串为30313233 34353637 3839。

一次踩坑无数的栈溢出实验 | 技术精选0139

一次踩坑无数的栈溢出实验 | 技术精选0139

2

实验

由于在终端输入,x等字符都会算作一个单独字符,所以我们使用重定向来解决,先用c写一个简单payload程序:

#include<stdio.h>int main(){    int index = ; //填充字符    int i;    for (i = 0; i < index; ++i)    {        printf("A");    }    char a[100] = ""; //填充数据    printf("%s", a);    return 0;}

修改变量

由于上面的代码有一个变量val,我们就修改该变量。通过上面的内存栈图可以看到,用户输入的字符串后面就是val变量的值。也就是说,我们需要先填充10个字符,随后紧跟上我们要改的数值。

内存中采用的是小端存储,所以00000001在内存的形式为x01x00x00x00。

一次踩坑无数的栈溢出实验 | 技术精选0139

根据上面的计算,到返回地址需要填充26个字符,success函数的地址为004013B0,修改payload代码数据,生成exe:

一次踩坑无数的栈溢出实验 | 技术精选0139

3

总结

刚开始用vs搞,怎么也无法成功,后来发现需要用gcc编译器,vs的编译器似乎有某种机制,不按正常套路出牌。还有一些保护机制也要进行关闭,否则也没有办法成功,建议大家在linux上尝试。

另外,还有strcpy、strcmp等函数也存在这样的漏洞。

- END -


往期推荐

一次踩坑无数的栈溢出实验 | 技术精选0139

Fake dnSpy - 这鸡汤里下了毒!

一次踩坑无数的栈溢出实验 | 技术精选0139

ADCS攻击面挖掘与利用

一次踩坑无数的栈溢出实验 | 技术精选0139

安全认证相关漏洞挖掘

长按下方图片即可关注
一次踩坑无数的栈溢出实验 | 技术精选0139

点击下方阅读原文,加入社群,读者作者无障碍交流
读完有话想说?点击留言按钮,让上万读者听到你的声音!

原文始发于微信公众号(酒仙桥六号部队):一次踩坑无数的栈溢出实验 | 技术精选0139

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月27日19:58:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次踩坑无数的栈溢出实验 | 技术精选0139https://cn-sec.com/archives/1204735.html

发表评论

匿名网友 填写信息