pwn学习-手动生成shellcode
汇编手动dump生成
elf32
首先sh.asm
内容如下
[section .data]
global _start
_start:
jmp sh
se:
pop ebx
mov eax,11
mov ecx,0
mov edx,0
int 0x80
sh:
call se
db '/bin/sh',0
使用nasm
和ld
编译并链接
$ nasm -f elf32 sh.asm -o sh.o
$ ld -m elf_i386 sh.o sh
接着使用objdump
就可以得到对应的shellcode
$ objdump -D sh
但是这样一个一个字符提取过于麻烦,可以使用xxd
命令获取
xxd sh
上述中显示的数据也是过多,可以使用objcopy
命令提取可执行代码段,这时提取就方便很多
$ objcopy -O binary sh.o sh.bin
注意上述中sh.bin
文件是从sh.o
可可重定向文件中读取
sh.bin
文件是一个二进制文件,同样可以使用objdump
等二进制分析文件分析,由于缺少文件头信息等因素,需要手动指定该文件类型和架构
$ objdump -b binary -m i386 -D sh.bin
elf64
x64的和x32的基本一样,只不过汇编语法有些不同
sh.asm内容如下
section .text
global _start
_start:
xor rdx,rdx
mov qword rbx, '//bin/sh'
shr rbx, 0x8
push rbx
mov rdi, rsp
push rax
push rdi
mov rsi, rsp
mov al, 0x3b
syscall
编译链接和执行
$ nasm -f elf64 sh.asm -o sh.o
$ ld sh.o -o sh
$ ./sh
$ exit
使用objcopy
提取可执行代码,使用xxd
分析
pwntools自带功能生成
带入pwntools
模块,使用shellcraft
类中的sh
方法生成shellcode
,接着使用asm()
方法转换为shellcode代码
一般我们在脚本中使用变量存储shellcode
,例如:
from pwn import *
shellcode = asm(shellcraft.sh())
上述中默认使用是x32
的shellcode,生成x64
的只需要在第二行加入context(arch="amd64")
即可
在线网站
分类:
CTF相关题目 / CTF-PWN相关
, pwn学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2022-05-30 DVWA-SQL Injection(SQL注入)
2022-05-30 DVWA-Insecure CAPTCHA(不安全的验证码)