CTF-pwn pwntools用法探索_usage pwn checksec [-h] [--file [elf (1)

A. 控制台实用命令——commandline

pwntools提供了一系列实用的控制台命令工具,源码相对路径:/pwnlib/commandline。

1. asm

命令用法:pwn asm [-h] [-f {raw,hex,string,elf}] [-o file] [-c context] [-v AVOID] [-n] [-z] [-d] [-e ENCODER] [-i INFILE] [-r] [line ...]
选项:

options:
  -h, --help            show this help message and exit
  -f {raw,hex,string,elf}, --format {raw,hex,string,elf}
                        Output format (defaults to hex for ttys, otherwise raw)
  -o file, --output file
                        Output file (defaults to stdout)
  -c context, --context context
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']
  -v AVOID, --avoid AVOID
                        Encode the shellcode to avoid the listed bytes (provided as hex)
  -n, --newline         Encode the shellcode to avoid newlines
  -z, --zero            Encode the shellcode to avoid NULL bytes
  -d, --debug           Debug the shellcode with GDB
  -e ENCODER, --encoder ENCODER
                        Specific encoder to use
  -i INFILE, --infile INFILE
                        Specify input file
  -r, --run             Run output

这里的asm命令有一个-z选项和-n选项,可以通过修改原本的指令来避免指令中出现换行和空字符。但是经过实际测试发现,这个功能转换出来的汇编指令并不是很好看。因此asm的这两个选项谨慎使用。

2. checksec

usage: pwn checksec [-h] [--file [elf ...]] [elf ...]

Check binary security settings

positional arguments:
  elf               Files to check

options:
  -h, --help        show this help message and exit
  --file [elf ...]  File to check (for compatibility with checksec.sh)

这个命令就不必多言了,检查ELF的安全选项,常用的命令。

3. constgrep

usage: pwn constgrep [-h] [-e] [-i] [-m] [-c arch_or_os] regex [constant]

Looking up constants from header files.

Example: constgrep -c freebsd -m  ^PROT_ '3 + 4'

positional arguments:
  regex                 The regex matching constant you want to find
  constant              The constant to find

options:
  -h, --help            show this help message and exit
  -e, --exact           Do an exact match for a constant instead of searching for a regex
  -i, --case-insensitive
                        Search case insensitive
  -m, --mask-mode       Instead of searching for a specific constant value, search for values not containing strictly less bits that the given value.
  -c arch_or_os, --context arch_or_os
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']

这个命令的功能有点意思。我们都知道在C语言标准库中有很多的宏定义常量,如mmap中的映射选项、读写权限选项等,有的时候,这种常量可能很多,在IDA中查看源码的时候,IDA当然是不可能会将函数传入的常数转换为这种宏定义的,这就会让我们阅读代码带来一定的困难,还需要去查阅源码才能知道传入常量的具体含义。而constgrep命令则允许我们通过一定的正则匹配筛选出源码中的常量,然后根据我们给出的值自动进行或操作拼接,最终给出原本的宏定义含义。如输入命令constgrep -c amd64 -m ^PROT_ 7,其输出如下:

#define PROT_NONE  0x0
#define PROT_READ  0x1
#define PROT_WRITE 0x2
#define PROT_EXEC  0x4

(PROT_WRITE | PROT_READ | PROT_EXEC) == 7

上面命令的功能是:找到amd64架构下所有以"PROT_"开头的宏定义,并通过或操作获得值7,输出中给出了或操作的具体项。如果不传入具体的数值而是添加-m选项,则会输出所有与正则匹配的宏定义。这个小工具有助于我们更容易理解IDA反编译出来的C代码。

4. cyclic

usage: pwn cyclic [-h] [-a alphabet] [-n length] [-c context] [-l lookup_value | count]

Cyclic pattern creator/finder

positional arguments:
  count                 Number of characters to print

options:
  -h, --help            show this help message and exit
  -a alphabet, --alphabet alphabet
                        The alphabet to use in the cyclic pattern (defaults to all lower case letters)
  -n length, --length length
                        Size of the unique subsequences (defaults to 4).
  -c context, --context context
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']
  -l lookup_value, -o lookup_value, --offset lookup_value, --lookup lookup_value
                        Do a lookup instead printing the alphabet

这个工具可以生成指定长度的缓冲数据,可通过-a选项指定缓冲数据可以使用的字符。

5. debug

usage: pwn debug [-h] [-x GDBSCRIPT] [--pid PID] [-c context] [--exec EXECUTABLE] [--process PROCESS_NAME] [--sysroot SYSROOT]

Debug a binary in GDB

options:
  -h, --help            show this help message and exit
  -x GDBSCRIPT          Execute GDB commands from this file.
  --pid PID             PID to attach to
  -c context, --context context
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']
  --exec EXECUTABLE     File to debug
  --process PROCESS_NAME
                        Name of the process to attach to (e.g. "bash")
  --sysroot SYSROOT     GDB sysroot path

这个指令和gdb的功能类似,可以通过–pid参数对某个进程进行调试,可以通过–process参数根据进程名对进程进行调试等。

6. disablenx

后面跟上ELF文件名即可,可以让该ELF文件执行时关闭NX栈不可执行保护。

7. disasm

usage: pwn disasm [-h] [-c arch_or_os] [-a address] [--color] [--no-color] [hex ...]

Disassemble bytes into text format

positional arguments:
  hex                   Hex-string to disassemble. If none are supplied, then it uses stdin in non-hex mode.

options:
  -h, --help            show this help message and exit
  -c arch_or_os, --context arch_or_os
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']
  -a address, --address address
                        Base address
  --color               Color output
  --no-color            Disable color output

反汇编命令,传入的数据是以16进制bytes的形式,如需要传入字符串’aa’则应该写成6161。

8. elfdiff

传入两个ELF文件,比较两个文件。

9. elfpatch

usage: pwn elfpatch [-h] elf offset bytes

Patch an ELF file

positional arguments:
  elf         File to patch
  offset      Offset to patch in virtual address (hex encoded)
  bytes       Bytes to patch (hex encoded)

options:
  -h, --help  show this help message and exit

修改ELF文件中的几个字节。

10. errno

传入一个整数或者errno的宏定义,获取其errno宏定义或值。

11. hex

将传入字符串转换为16进制字符串。

12. libcdb

libc相关信息查询。
pwn libcdb file [LIBC]:通过给定libc打印其哈希、关键函数偏移等
pwn libcdb lookup [FUNC] [OFFSET]:通过给定函数和偏移查询候选libc,推测是使用LibcSearcher引擎,较新的libc可能搜不到
pwn libcdb hash [HASH_VALUE]:通过给定哈希值获取libc,不常用

13. phd

与hexdump功能类似,以pretty形式打印二进制文件的每个字节。

14. pwnstrip

和strip功能类似,去除程序符号表增加逆向难度。

15. scramble

usage: pwn scramble [-h] [-f {raw,hex,string,elf}] [-o file] [-c context] [-p] [-v AVOID] [-n] [-z] [-d]

Shellcode encoder

options:
  -h, --help            show this help message and exit
  -f {raw,hex,string,elf}, --format {raw,hex,string,elf}
                        Output format (defaults to hex for ttys, otherwise raw)
  -o file, --output file
                        Output file (defaults to stdout)
  -c context, --context context
                        The os/architecture/endianness/bits the shellcode will run in (default: linux/i386), choose from: ['16', '32', '64', 'android', 'baremetal', 'cgc', 'freebsd', 'linux',
                        'windows', 'powerpc64', 'aarch64', 'powerpc', 'sparc64', 'mips64', 'msp430', 'alpha', 'amd64', 'riscv', 'sparc', 'thumb', 'cris', 'i386', 'ia64', 'm68k', 'mips', 's390',
                        'none', 'avr', 'arm', 'vax', 'little', 'big', 'be', 'eb', 'le', 'el']
  -p, --alphanumeric    Encode the shellcode with an alphanumeric encoder
  -v AVOID, --avoid AVOID
                        Encode the shellcode to avoid the listed bytes
  -n, --newline         Encode the shellcode to avoid newlines
  -z, --zero            Encode the shellcode to avoid NULL bytes
  -d, --debug           Debug the shellcode with GDB

这个命令看上去应该是一个shellcode的解码器,支持将shellcode解码成全字母,允许定义黑名单等,但是笔者在全网都没有搜到这个命令的一个使用的例子,试了各种方法命令运行都报错,甚至连new bing返回的结果都是错的。不过想要实现全字母shellcode还能用AE64。若有读者知道这个命令到底是怎么用的,还请不吝赐教。

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值