南京邮电大学网络信息安全——软件漏洞分析与防范(实验一——栈溢出)

  • 前言
  • 实验环境
  • 实验代码
  • 实验过程
    • 示例一
      • 编译
      • 分析程序
      • 尝试payload

前言

这个实验的示例2的代码没有给出,所以暂时没有做,如果以后要做的话会补上,包括GS保护部分也是如此

实验环境

由于实验需要有Windows和Ubuntu环境,所以我这里准备了两个环境。

  • Windows:Visual Studio+Win10+IDA+Ollydbg+gcc
  • Ubuntu:Ubuntu 18.04+Vmware+IDA

实验代码

示例一(用于Windows环境测试)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void function2() {printf("Get Flags!");
}
void function1(char* str) {char buffer[5];strcpy(buffer, str);
}
int main(int argc, char* argv[]) {function1(argv[1]);printf("Wrong!");
}

示例2

实验过程

示例一

编译

这里我的建议是直接使用GCC编译器进行编译,我尝试过使用Visual Studio编译,但是编译效果不是很好。原因如下:

  • Visual对未使用代码进行了优化,直接将Function的代码优化掉了
  • GS保护是默认开启的

我尝试过将GS保护和优化选项去掉,但是并没有起到效果,为了方便起见还是直接使用GCC编译吧。GCC编译的命令如下

gcc -m32 -fno-stack-protector 源.cpp

其中参数作用为

  • m32:强制gcc编译32位的可执行文件
  • -fno-stack-protector:关闭GS保护机制

分析程序

打开我们的静态分析工具IDA,找到对应的function1的地址
这里尝试在不进行动态调试的情况下确认padding的大小。
通过反汇编看到的信息:

  • 整个程序栈大小为0x28
  • GCC编译程序将buffer局部变量分配在了EBP-0D的这个地方
  • EBP下的4个字节储存返回地址(小端存放)

综合以上信息,可以画出栈的构造图

通过栈的保护机制可以知道。
padding的大小为:d+4=11H字节
所以整个payload的结构为:
按照这样的结构进行构造就可以劫持程序流程了,需要注意的有两个地方

  • 像0x15这种字节是没办法通过键盘打出来的,解决办法是通过程序打印出来并进行复制。
  • Function2这个地址是我自己本地编译出来的地址,不同的人可能不会一样。

尝试payload

我这里给出我自己的payload(0x21字符不在CSDN的字符集支持范围里面),不同的人有不同的答案,条条大路通罗马。

11111111111112222`0x21@

事实证明,我们的推测是正确的。

南京邮电大学网络信息安全——软件漏洞分析与防范(实验一——栈溢出和gs保护机制)相关推荐

  1. 南京邮电大学网络信息安全——网络数据包捕获WireShark(实验一)

    南京邮电大学网络信息安全课程实验:网络数据包捕获WireShark(实验一) 系列前言 实验目标 实验环境 实验一过程记录 目标一:使用正确的姿势打开WireShark 目标二:只捕获TCP的流量包 ...

  2. 《0day安全-软件漏洞分析技术》实验笔记2

    实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...

  3. 【逆向】《0day安全-软件漏洞分析技术》实验笔记2

    实验 3.4 通用shellcode 工具 Windows XP SP3 Visual C++ 6.0 OD IDA 源代码 见随书代码,参考:https://github.com/jas502n/0 ...

  4. NCTF 南京邮电大学网络攻防训练平台 WriteUp

    NCTF 南京邮电大学网络攻防训练平台 WriteUp 不说什么直接上题解 WEB 1.签到题(50) 直接查看网页源码 Flag:nctf{flag_admiaanaaaaaaaaaaa} 2.md ...

  5. 《漏洞战争——软件漏洞分析精要》读后感(一)

    特别推荐看<漏洞战争--软件漏洞分析精要>,一定要上手实战.(感觉这也是在讲pwn的方向) 一.漏洞的定义 漏洞----1个最常见的名词,百度所得到的解释是:漏洞是在硬件.软件.协议的具体 ...

  6. 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》

    本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...

  7. 南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup

    南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup 题目描述 文件下载地址 很明显,文件之间进行亦或就可得到flag,不再多说,直接上脚本 1 #coding:utf-8 2 file ...

  8. 0day安全:软件漏洞分析技术(第2版)

    0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清   张东辉   周浩   王继刚   赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...

  9. 机器学习:软件漏洞分析

    Software Vulnerability Analysis and Discovery Using Machine-Learning and Data-Mining Techniques: A S ...

  10. 南京邮电大学网络攻防平台WriteUP——WEB(上)

    前言 南京邮电大学网络攻防平台(http://ctf.nuptsast.com/)是一个集合了WEB.MISC.密码学.PWN.逆向的一个CTF训练平台,对于初次涉及ctf小伙伴来说是非常不错的一个训 ...

最新文章

  1. 【组队学习】【29期】Datawhale组队学习内容介绍
  2. MQTT初始篇笔记整理
  3. mysql主从复制原理 简书_mysql主从复制,从原理讲到安装配置,全干货
  4. spring aop源码实现分析
  5. 普211标准三维EE零基础转CS申
  6. 怎样取消Windows 2003 server 意外关机提示
  7. 【2】Docker数据卷
  8. Selenium爬虫 -- 图片视频的src绝对地址链接分析
  9. 洛谷oj刷题记录----数组篇
  10. 基于单片机的智能饮水机控制系统设计(毕业设计资料)
  11. Android 分析ANR和死锁(3)
  12. 0基础学Java(2)
  13. matlab失明的小猫,如何正确判断猫咪眼睛是否失明
  14. Hadoop(yarn)集群安装
  15. 电视显示正在接入或无法接入认证服务器,长虹网络电视无法连接服务器,怎么回事?-长虹电视接入网络障碍...
  16. ROS机器人开发实践 [胡春旭] 学习笔记与资料
  17. 【算法-面试】区间专题
  18. autojs注入webview
  19. C语言时间动态密码算法,GMT 0021-2012 动态口令密码应用技术规范.pdf
  20. FTP服务器的搭建与使用FTP软件进行文件上传

热门文章

  1. 关于内存条的知识要点⑴
  2. 超级加粗大标题Mogrt免费PR动态图形模板
  3. Java编程学习指南(带学习经验)
  4. 扩展欧几里得算法(Python)
  5. NBU备份vmware虚机创建静默快照失败
  6. 银河麒麟ARM64 飞腾FT2000 linuxdeployqt linux打包qt
  7. Pycharm 远程连接服务器(ssh)运行深度学习代码 | 详细步骤
  8. C#读写ISO15693协议ICODE2标签源码
  9. 程序员PDF书籍下载
  10. 4G知识总结(LTE网络架构、关键技术、物理层、移动性管理)