小编典典

注入此shellcode时,您不知道位置message:

mov ecx, message

在注入的过程中,它可以是任何东西,但不会如此,"Hello

world!\r\n"因为仅转储文本部分时它位于数据部分。您可以看到您的shellcode没有"Hello world!\r\n":

"\xb8\x04\x00\x00\x00"

"\xbb\x01\x00\x00\x00"

"\xb9\x00\x00\x00\x00"

"\xba\x0f\x00\x00\x00"

"\xcd\x80\xb8\x01\x00"

"\x00\x00\xbb\x00\x00"

"\x00\x00\xcd\x80";

这是Shellcode开发中的常见问题,解决方法是这样的:

global _start

section .text

_start:

jmp MESSAGE ; 1) lets jump to MESSAGE

GOBACK:

mov eax, 0x4

mov ebx, 0x1

pop ecx ; 3) we are poping into `ecx`, now we have the

; address of "Hello, World!\r\n"

mov edx, 0xF

int 0x80

mov eax, 0x1

mov ebx, 0x0

int 0x80

MESSAGE:

call GOBACK ; 2) we are going back, since we used `call`, that means

; the return address, which is in this case the address

; of "Hello, World!\r\n", is pushed into the stack.

db "Hello, World!", 0dh, 0ah

section .data

现在转储文本部分:

$ nasm -f elf shellcode.asm

$ ld shellcode.o -o shellcode

$ ./shellcode

Hello, World!

$ objdump -d shellcode

shellcode: file format elf32-i386

Disassembly of section .text:

08048060 <_start>:

8048060: e9 1e 00 00 00 jmp 8048083

08048065 :

8048065: b8 04 00 00 00 mov $0x4,%eax

804806a: bb 01 00 00 00 mov $0x1,%ebx

804806f: 59 pop %ecx

8048070: ba 0f 00 00 00 mov $0xf,%edx

8048075: cd 80 int $0x80

8048077: b8 01 00 00 00 mov $0x1,%eax

804807c: bb 00 00 00 00 mov $0x0,%ebx

8048081: cd 80 int $0x80

08048083 :

8048083: e8 dd ff ff ff call 8048065

8048088: 48 dec %eax

8048089: 65 gs |

804808a: 6c insb (%dx),%es:(%edi) |

804808b: 6c insb (%dx),%es:(%edi) |

804808c: 6f outsl %ds:(%esi),(%dx) |

804808d: 2c 20 sub $0x20,%al |

804808f: 57 push %edi |

8048090: 6f outsl %ds:(%esi),(%dx) |

8048091: 72 6c jb 80480ff |

8048093: 64 fs |

8048094: 21 .byte 0x21 |

8048095: 0d .byte 0xd |

8048096: 0a .byte 0xa

$

我标记的行是我们的"Hello, World!\r\n"字符串:

$ printf "\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x0d\x0a"

Hello, World!

$

因此,我们的C包装器将是:

char code[] =

"\xe9\x1e\x00\x00\x00" // jmp 8048083

"\xb8\x04\x00\x00\x00" // mov $0x4,%eax

"\xbb\x01\x00\x00\x00" // mov $0x1,%ebx

"\x59" // pop %ecx

"\xba\x0f\x00\x00\x00" // mov $0xf,%edx

"\xcd\x80" // int $0x80

"\xb8\x01\x00\x00\x00" // mov $0x1,%eax

"\xbb\x00\x00\x00\x00" // mov $0x0,%ebx

"\xcd\x80" // int $0x80

"\xe8\xdd\xff\xff\xff" // call 8048065

"Hello wolrd!\r\n"; // OR "\x48\x65\x6c\x6c\x6f\x2c\x20\x57"

// "\x6f\x72\x6c\x64\x21\x0d\x0a"

int main(int argc, char **argv)

{

(*(void(*)())code)();

return 0;

}

让我们测试一下:

$ gcc test.c -o test

$ ./test

Hello wolrd!

$

有用。

2020-06-02

linux 64位 shellcode,Linux Shellcode“你好,世界!”相关推荐

  1. linux 64位 objdump,linux objdump

    linux objdump概述: objdump有点象那个快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息.对于一般只想让自己程序跑起来的程序 员,这个命令没有更多 ...

  2. linux 64位 可移植性,linux – #!/ bin / sh vs#!/ bin / bash,实现最大的可移植性

    shell脚本大致有四个级别的可移植性(就shebang行而言): >大多数可移植:使用#!/ bin / sh shebang并仅使用POSIX standard中指定的基本shell语法.这 ...

  3. 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享

    [Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...

  4. linux的tomcat下载,tomcat linux 64位下载

    tomcat 8发布了,这里为大家带来了 linux版本下载,此版本为8.0.32 tomcat linux 64位下载,它是由Apache 所开发的一个核心项目,由于Tomcat 产品的技术先进.性 ...

  5. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...

    第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...

  6. Kali Linux 64位架构安装Veil-Evasion

    Kali Linux 64位架构安装Veil-Evasion Veil-Evasion是一种生成有效载荷可执行文件的工具,可绕过常见的防病毒软件.由于技术的发展,大部分人都选择安装的Linux系统架构 ...

  7. LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8

    标签: 第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署  2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elastic ...

  8. linux卸载minicoda2,MiniConda2下载 MiniConda python 2.7 v4.3.30.2 Linux 64位 官方免费版(附安装步骤) 下载-脚本之家...

    MiniConda python 2.7 Linux版是一款可以在Linux系统下使用的Python 环境管理工具,同时MiniConda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软 ...

  9. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

  10. Linux 64位进程地址空间分布概况

    对于Linux 64位系统,理论上,64bit内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的空间,Linux实际 ...

最新文章

  1. jenkins不能启用端口_基于K8s的Jenkins持续集成实战(上)
  2. python loading_MXNet Python Data Loading API
  3. 写给 Android 应用工程师的 Binder 原理剖析
  4. Winform中自定义xml配置文件,并配置获取文件路径
  5. (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
  6. UIScrollView事件拦截
  7. php 导出excel类,php 导出excel类
  8. 阿里云:linux 一键安装web环境
  9. ORACLE PL/SQL编程之八: 把触发器说透 |来自cnblogs的EricHu|
  10. 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
  11. java旅游管理系统(带文档
  12. eclipse字体大小怎么设置
  13. 计算机毕业设计 SSM+Vue音乐播放网站系统 云音乐播放系统 付费音乐播放系统Java Vue MySQL数据库 远程调试 代码讲解
  14. 400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了
  15. c语言计算标准体重作业,c语言/* 已知成人标准体重粗算公式:
  16. TI DSP 5502定时器使用
  17. r语言中大小写c的区别吗,R语言和C语言哪个难?
  18. 云梦四时歌服务器维护,《云梦四时歌》服务器已满怎么解决 服务器排不了队伍解决方法...
  19. Anaconda自带python,在cmd中输入python提示不是内部命令或外部命令
  20. SIP协议学习(3)

热门文章

  1. jQuery 调用jsonp实现与原理
  2. ngx_lua module 模块安装
  3. 大数据虚拟化零起点-4基础运维第三步-部署vCenter Server Virtual Appliance 5.1
  4. 2011最有用最潮的jQuery特效教程,前端们抱走吧~
  5. [转]verilog语法学习心得
  6. 克隆Calibrui Module
  7. 定制浏览器地址栏前的小图标
  8. mysq中文编码问题
  9. 阿里云网站80端口无法访问
  10. keepalived+httpd 做web服务的高可用