pwn学习总结(一) —— kali linux终端常用命令

pwn学习总结(一) —— kali linux终端常用命令

文件

  • 查看文件属性file 文件名
    file
  • 查看程序防护checksec 文件名

checksec
Arch:文件属性
RELRO:开启后,符号重定向表格属性为只读,或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击,图中Partial RELRO表示我们对GOT表具有写的权限
Stack:Canary Stack保护(俗称金丝雀),开启后,程序在函数返回前会设置好的金丝雀值进行检查,从而达到堆栈保护的目的
NX:即No-eXecute(不可执行)的意思,开启后,就算溢出到shellcode位置也不可执行,cpu会抛出异常
PIE:地址随机化

  • 查看文件头信息readelf -h 文件名
    readelf
  • 查看文件二进制数据
  1. 完整显示:xxd 文件名 | od -A x -t x1z 文件名
  2. 显示部分:od --skip bytes=偏移地址 --read-bytes=字节数 -A x -t x1z 文件名
    x1z表示每显示一个十六进制数输出一个空格;x2z表示每显示两个十六进制数输出一个空格
    od
  • 查看GOT表objdump -g 文件名
  • 下载远程目录中的程序scp -P 端口号 -p IP地址:路径/* ./
  • 将文件内容作为输入并执行文件cat payload文件 -| ./文件名

函数

  • 检索程序导入的函数objdump -R 文件名
    objdump
  • 查看程序所有函数及反汇编objdump -d 文件名
    反汇编单个函数 – 脚本:
    #!/bin/bash
    
    vmlinux=$1 
    symbol=$2 
     
    if [ -z "$vmlinux" ]; then 
        echo "usage : $0 vmlinux symbol"
        exit 
    fi 
     
    startaddress=$(nm -n $vmlinux | grep "\w\s$symbol" | awk '{print "0x"$1;exit}') 
    endaddress=$(nm -n $vmlinux | grep -A1 "\w\s$symbol" | awk '{getline; print "0x"$1;exit}') 
      
    if [ -z "$symbol" ]; then 
        echo "dump all symbol"
        objdump -d $vmlinux 
    else 
        echo "start-address: $startaddress, end-address: $endaddress" 
        objdump -d $vmlinux --start-address=$startaddress --stop-address=$endaddress
    fi
    
    objdump.sh

python

  • 执行文件,并将payload作为输入python -c 'print "payload"' | ./文件名
  • 将payload写入文件python -c 'print [payload]' > payload
    python

反汇编

  • 查找可存储寄存器的代码,用于构造ROP链
  1. ROPgadget --binary 文件名 | grep 指令
  2. ROPgadget --binary 文件名 --only 指令
    ROPgadget
  • 自动生成ROP链(若存在),只适用于静态链接ROPgadget --binary 文件名 --ropchain
  • 对文件二进制进行反汇编ndisasm -u 文件名

其它

  • 生成字符串队列cyclic 字符数
    cyclic
  • 计算字符串偏移cyclic -l 四个字母
    cyclic -l
发布了45 篇原创文章 · 获赞 2 · 访问量 1838

猜你喜欢

转载自blog.csdn.net/qq_41988448/article/details/103124339