pwn常用工具快捷键学习
glibc换源
pwn技术分享——使用patchelf和glibc-all-in-one替换程序依赖的libc文件_哔哩哔哩_bilibili
下载libc
python3 update_list #更新list
./download 2.23-0ubuntu11.2_amd64 #glibc为你想要下载glibc的名字
./download_old libc #list没有,可以使用./download_old libc版本号来下载
格式:
./:用的当前文件夹下文件
/:绝对路径
1.patchelf --set-interpreter
patchelf --set-interpreter ./ld-目标版本 ./运行的程序
例子
patchelf --set-interpreter ./ld-2.23.so ./pwn
2.patchelf --replace-needed libc.so.6
patchelf --replace-needed libc.so.6 新libc文件路径 运行的程序
例子
patchelf --replace-needed libc.so.6 ./libc-2.23.so ./pwn
vim
普通模式 | |
---|---|
G(普通模式) | 来的文本最下方 |
g+g(普通模式下) | 回到文本的开头 |
f+目标单词的首字母(find普通模式) | 移动到目标单词 |
d(delete) | 删除当前行 |
u(undo) | 撤销 |
文本模式 | |
I | 从当前行开头进行输入 |
A | 当前行文末输入 |
ida
F7 | 单步执行,遇到call或者函数调用就进入 |
---|---|
F8 | 单步执行,遇到call或者函数调用就跳过 |
F9 | 开始调试一直运行 |
F2 | 下一个0xCC的软件断点 |
F4 | 运行到光标初 |
U | 取消函数,代码,数据的定义 |
C | 把字节码翻译为汇编语句 |
p | 定义函数 |
D | 数据长度类型转化,1/2/4/8 |
H | 数字->16进制 |
a | (数据)->字符串 |
R | 数字->字符(‘120’打了单引号是个字符y,要ask码转换) |
y | 修改数据类型声明 |
n | 对函数或者变量重命名(函数名为sub_234875) |
g | 去往某一个地址 |
CTRL F7 | 一直运行 |
shift +f12 | 找出所有字符串 |
/ | 在反汇编后界面写注释,汇编语言界面也可用 |
ctrl+x | 查看函数或变量的交叉引用(通过flag.txt字符串找函数) |
tab | 汇编代码与c代码视角转换 |
ctrl+s | 段表信息 |
telescope+0x地址 | 用stack段的形式查看内存中地址信息 |
ctrl+t | 查找特定指令和字符串 |
shift+e | 导出数据 |
gdb
n | 不进入函数的单步执行 |
---|---|
s | 进入被调用(call)函数 |
finish | s步入函数后用会执行完此函数 |
c | 直接执行到下一个断点。 |
k(kill) | kill当前进程 |
r(run) | 运行程序 |
gdb+文件 | 动态调试文件 |
vmmap | 查看虚拟内存映射,包括代码段、数据段、堆、栈和共享库等区域。 |
b *0x地址 | 打断点 |
ni | 下一条汇编指令 |
disable b +数字 | 去掉第几个断点 |
info b | 查看当前断点 |
bt | 查看函数调用栈 |
info r | 查看所有寄存器的值。 |
list | 查看源代码。 |
vis | 查看堆块 |
tel +地址 | 类似查看stack信息的格式 |
x/20gx +地址 | x是16进制显示,w读4字节是32位程序,g是8字节对应64位,b是1字节,h2字节 |
tmux
ctrl+b +c | 打开新窗口 |
---|---|
ctrl+b +% | 分左右屏幕 |
ctrl+b +“ | 上下分屏 |
ctrl+b +方向 | 换屏幕 |
ctrl+d | 关屏 |
其他工具快捷键
快捷键 | 效果 |
---|---|
ROPgadget --binary 文件 --only 'pop|ret' | grep 'eax' | 在正常终端下即可 |
ROPgadget --binary 文件 --string '/bin/sh' | 找字符串地址 |
ROPgadget --binary=动态链接库 --only 'pop|ret' |grep '' | 在库中找 |
cyclic(数字) | 生成垃圾数据 |
strings 文件名 | grep 字符串 | |
fmtarg 地址 | 显示此处是格式化字符串函数的第几个参数 |
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other | 显示共享文件夹 |
print("stack"+hex(flg)) | exp脚本打印信息 |
seccomp-tools dump ./文件名 | 查看函数禁用 |
gdb.attach(p,"b *0x函数地址\nc") | gdb直接定位在目标地址 |
shellcode编写 | shellcode=shellcraft.open("./flag") shellcode+=shellcraft.read(3,0xcafe0000+0x100,0x50) shellcode+=shellcraft.write(1,0xcafe0000+0x100,0x50) shellcode=asm(shellcode) |
找libc版本 | strings libc.so.6 | grep ubuntu |
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space | 临时禁用 Linux 内核中的地址空间布局随机化 |