缓冲区溢出的攻击思路已经很清晰了:首次是找到对准EIP的位置,然后覆盖 EIP跳到注入的shellcode 里执行。

前面例子只是简单展示了shellcode长什么样子,事实上shellcode是攻击的核心所在。漏洞触发后执行的操作完全由shellcode来决定,因此学会编写shellcode是黑客的基本功。

下面从Wiki摘录这来的定义:

In computer security, a shellcode is a small piece of code used as the payload in the exploitation of a software vulnerability. It is called "shellcode" because it typically starts a command shell from which the attacker can control the compromised machine, but any piece of code that performs a similar task can be called shellcode.

翻译过来大意是:shellcode通常是软件漏洞利用过程中使用一小段机器代码,之所以称为shellcode,是因为它启动一个命令界面,让攻击控制整个机器。

在前面攻击实践中,已出现了一份shellcode,样子长得如下:

\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb3\x01\x83\xc4\x1d\x89\xe1\xb2\x05\xb0\x04\xcd\x80\xb0\x01\xb3\x01\xfe\xcb\xcd\x80\x46\x55\x43\x4b\x0a

shellcode表面看起来是一种能起死回生的神秘数字,实际它只是一段机器码而已。那如何编写shellcode呢,通常有下面几个过程:

1)  使用c语言描述shellcode要完成的逻辑功能

2) 将C语言翻译成汇编语言

3) 编译和测试

4) 测试通过后提取机器码

由于很多缓冲区漏洞是由于使用无长度限定的字符串函数(如strcpy, sprintf等)造成的,所以shellcode不能有0字节,否则会出现填充失败;另外由于不同漏洞的溢出长度是不同的,因此shellcode尽量短小。

实际上,当攻击客利用漏洞之后,利用shellcode的事情主要有如下几大类:

1)提升权限为root,即调用suid(0)

2)  启开bash,全面控制系统,即调用execve("/bin/bash, NULL, NULL);

3)  打开网络端口,让攻击者连接该端口进行控制

4)反向连接攻击者提供的端口,进行反向控制。

============= 回顾一下本系列文章 ==============
  • 缓冲区溢出攻击实践
  • 缓冲区溢出攻击原理分析
  • 初识shellcode
  • 如何编写本地shellcode
  • 编写shellcode测试工具
  • 使用ret2reg攻击绕过地址混淆
  • 使用ret2libc攻击方法绕过数据执行保护

初识shellcode相关推荐

  1. 什么是 shellcode

    缓冲区溢出的攻击思路已经很清晰了:首次是找到对准EIP的位置,然后覆盖 EIP跳到注入的shellcode 里执行. 前面例子只是简单展示了shellcode长什么样子,事实上shellcode是攻击 ...

  2. 如何编写本地shellcode

    好,我们正式开始一步步来编写shellcode,结合之前的示例程序,写个打开一个新shell的shellcode. 在写之前,先介绍编写shellcode的一些技巧,特别有用. shellcode编写 ...

  3. 缓冲区溢出攻击原理分析

    <缓冲区溢出攻击实践>以实践者角度介绍了初级缓冲区溢出攻击方法,本文从原理上对该方法做原理性介绍. 函数帧结构 现在高级语言C(或者C++),在函数开头的几指令要建立好函数帧结构,而函数返 ...

  4. [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. 从后渗透分析应急响应的那些事儿(二)免杀初识篇

    从后渗透分析应急响应的那些事儿(二)免杀初识篇 文章首发于freebuf Tidesec专栏 https://www.freebuf.com/column/204005.html,转载到个人博客记录, ...

  6. 第一章 魔鬼训练营--初识Metasploit

    第一章 魔鬼训练营–初识Metasploit 课程 渗透测试就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法.一 ...

  7. day3----编码-集合-深浅copy-文件操作-函数初识

    day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...

  8. ⑥python模块初识、pyc和PyCodeObject

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  9. 初识java类的接口实现

    初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...

最新文章

  1. echarts树图节点垂直间距_矿棉板吊顶标准工艺节点
  2. 我们真的需要那么多功能吗? - 国外主流开源 CMS 功能评点
  3. linux下挂载U盘过程
  4. linux 低功耗运行,关于Linux的快速启动(fastboot)和低功耗(low power)的学习记录...
  5. c mysql web开发实例教程_Web开发(六)MySql
  6. [Ext JS6]Ext.Template
  7. WPF 与 摄像头资料
  8. oracle 查询判断语句
  9. 产品配件类目税目分类_2017年商品税收分类编码明细表
  10. 缺陷管理工具JIRA和禅道对比
  11. 查看MySQL初始密码并修改
  12. 多兰大陆怎么在电脑上玩 多兰大陆模拟器玩法教程
  13. mysql strtolower_自己写的mysql类_PHP教程 - strtolower
  14. bash shell 命令 - linux
  15. InnoDB存储引擎中有页(Page)的概念
  16. 设计模式(三):旅行的角度理解抽象工厂模式
  17. mysql中的 isnull(exper)、ifnull(exper1,exper2)、nullif(exper1,exper2)函数
  18. 沪江 AOP 切片 API使用说明
  19. jquery datatable sDom(自定义布局)
  20. 如何解决c++文件读写流无法读取中文的问题(vc6.0)

热门文章

  1. Leetcode-Longest Turbulent Subarray
  2. 自定义模板、自定义打印机、自动打印:grid++ report自动打印、clodop预览和自动打印(electron+vue)
  3. linux日志系统介绍 —— syslog(),openlog(),closelog()
  4. Redis ~ 数据库的几种常见用法(主从复制、高可用、集群)
  5. oracle11g 在azure云中使用rman进行实例迁移
  6. 大学各专业计算机专属表情包,萌翻!中国计量大学女生给7个高校做了专属表情包...
  7. 【饭谈】领导问你:如何保证质量? 你要怎么回答? (第二篇)
  8. linux下libnng的移植
  9. 写给看着题干着急的学生
  10. emoji 为什么叫 emoji