什么是 shellcode

来源:互联网 发布:js radio赋值 编辑:程序博客网 时间:2024/05/16 07:39


缓冲区溢出的攻击思路已经很清晰了:首次是找到对准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攻击方法绕过数据执行保护
0 0