狗儿

热爱的话就坚持吧~

0%

一些pwn相关的命令

遇到的就记录在这里,不定期更新。

逆向手转PWN进度

第一日(2020.9.13)

学习了ROPgadget,做了一道x86-64的ROP。

学习了GDB动调。

命令笔记

查segment

objdump -h welpwn

readelf -S welpwn

复制libc

cp /lib/i386-linux-gnu/libc.so.6 ./libc.so.6

ldd

ldd welpwn

查相关链接库

objdump

objdump -d ./level5

反汇编

objdump -h welpwn

查segment

ROPgadget

安装:
ROPgadget在Pwn中用于搜索汇编指令和字符串,安装方法:
1.安装python-capstone:apt-get install python-capstone
2.下载安装文件:git clone https://github.com/JonathanSalwan/ROPgadget.git
3.进入目录 :cd ROPgadget
4.运行安装脚本: python setup.py develop

使用方法:
1.搜索/bin/sh:
ROPgadget –binary intoverflow “/bin/sh”

ROPgadget --binary libc.so.6 --only "pop|ret" | grep rdi

ROPgadget --binary 3fb1a4283 --string 'sh'

pwndbg

rebase

image-20200921133035873

image-20200921132939823

对偏移处下断点,使用前需要将程序跑起来,否则:

image-20200921133105016

GCC编译安全选项

ASLR

ASLR等级与说明
等级 说明
0 关闭
1 保留 共享库 栈 mmap vdso随机化
2 完全 1 基础上 brk() 分配的内存空间也将被随机化
ASLR等级查看
1
2
3
4
sysctl -n kernel.randomize_va_space

cat /proc/sys/kernel/randomize_va_space
123
ASLR修改
1
2
3
sysctl -w kernel.randomize_va_space=0

echo 0 > /proc/sys/kernel/randomize_va_space

权限不够可以sudo -s后再输入上面的指令。

PIE(代码段和数据段的随机)

效果 编译选项
关闭 低版本默认关闭 高版本-fno-pie -no-pie
可执行文件等级1 -fpie -pie
可执行文件等级2 fPIE -pie
共享库文件等级1 -fpic
共享库文件等级2 -fPIC

DEP/NX(数据不可执行保护)

效果 编译选项
开启 默认开启 -z noexecstack
关闭 -z execstack

canary(栈溢出保护)

效果 编译选项
禁止 -fno-stack-protector
启用 针对部分char数组函数 -fstack-protector
启用 全部函数 -fstack-protector-all

FORTIFY(缓冲区溢出检查)

效果 编译选项
关闭 默认
开启 较弱检查 编译时检查 -D_FORTIFY_SOURCE=1
开启 较强检查 运行时也检查 -D_FORTIFY_SOURCE=2

RELRO(只读保护)

效果 编译选项
关闭 -z norelro
部分 Partial RELRO 默认 -z lazy
全部 -z now

安装笔记

ROPgadget

1
2
3
4
1.安装python-capstone:  apt-get install python-capstone
2.下载安装文件:git clone https://github.com/JonathanSalwan/ROPgadget.git
3.进入目录 :cd ROPgadget
4.运行安装脚本: python3 setup.py develop
  • 依赖于capstone

  • python2还是python3需要自己改。

gdb-peda安装

1
2
git clone https://github.com/longld/peda.git
echo "source ~/Program/peda/peda.py" >> ~/.gdbinit

记得将~/Program/peda改成你的peda下载路径。

知识点

一张图快速了解fastcall x86-64的调用约定:

image-20200913025751663

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int f(int a,int b,int c,int d,int e,int f,int g,int h){
return a+b+c+d+e+f+g+h;
}

int main(){
f(1,2,3,4,5,6,7,8);
}