linux 64位 shellcode,Linux Shellcode“你好,世界!”
小编典典
注入此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“你好,世界!”相关推荐
- linux 64位 objdump,linux objdump
linux objdump概述: objdump有点象那个快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息.对于一般只想让自己程序跑起来的程序 员,这个命令没有更多 ...
- linux 64位 可移植性,linux – #!/ bin / sh vs#!/ bin / bash,实现最大的可移植性
shell脚本大致有四个级别的可移植性(就shebang行而言): >大多数可移植:使用#!/ bin / sh shebang并仅使用POSIX standard中指定的基本shell语法.这 ...
- 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享
[Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...
- linux的tomcat下载,tomcat linux 64位下载
tomcat 8发布了,这里为大家带来了 linux版本下载,此版本为8.0.32 tomcat linux 64位下载,它是由Apache 所开发的一个核心项目,由于Tomcat 产品的技术先进.性 ...
- linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...
第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...
- Kali Linux 64位架构安装Veil-Evasion
Kali Linux 64位架构安装Veil-Evasion Veil-Evasion是一种生成有效载荷可执行文件的工具,可绕过常见的防病毒软件.由于技术的发展,大部分人都选择安装的Linux系统架构 ...
- LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8
标签: 第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elastic ...
- linux卸载minicoda2,MiniConda2下载 MiniConda python 2.7 v4.3.30.2 Linux 64位 官方免费版(附安装步骤) 下载-脚本之家...
MiniConda python 2.7 Linux版是一款可以在Linux系统下使用的Python 环境管理工具,同时MiniConda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软 ...
- linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...
- Linux 64位进程地址空间分布概况
对于Linux 64位系统,理论上,64bit内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的空间,Linux实际 ...
最新文章
- jenkins不能启用端口_基于K8s的Jenkins持续集成实战(上)
- python loading_MXNet Python Data Loading API
- 写给 Android 应用工程师的 Binder 原理剖析
- Winform中自定义xml配置文件,并配置获取文件路径
- (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
- UIScrollView事件拦截
- php 导出excel类,php 导出excel类
- 阿里云:linux 一键安装web环境
- ORACLE PL/SQL编程之八: 把触发器说透 |来自cnblogs的EricHu|
- 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
- java旅游管理系统(带文档
- eclipse字体大小怎么设置
- 计算机毕业设计 SSM+Vue音乐播放网站系统 云音乐播放系统 付费音乐播放系统Java Vue MySQL数据库 远程调试 代码讲解
- 400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了
- c语言计算标准体重作业,c语言/* 已知成人标准体重粗算公式:
- TI DSP 5502定时器使用
- r语言中大小写c的区别吗,R语言和C语言哪个难?
- 云梦四时歌服务器维护,《云梦四时歌》服务器已满怎么解决 服务器排不了队伍解决方法...
- Anaconda自带python,在cmd中输入python提示不是内部命令或外部命令
- SIP协议学习(3)