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

逆向手转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 --binary libc.so.6 --only "pop|ret" | grep rdi

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

GCC编译安全选项

ASLR

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

cat /proc/sys/kernel/randomize_va_space
123
ASLR修改
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
可执行文件等级2fPIE -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.安装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安装

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

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

知识点

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

image-20200913025751663

#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);
}
Last modification:September 14th, 2020 at 10:45 pm