BetaMao

pwn常用小工具

字数统计: 1k阅读时长: 4 min
2017/10/15 Share

本来是不想写,但是前两周因为一些事没写代码,现在再写发现很多东西都忘了,还是把它记下来比较好,本篇记录的工具包括readelf,peda,objdump,ROPgadget…..

ltrace/strace

跟踪用,能够轻易看出问题原因:

1
2
3
4
5
ltrace
-c count time and calls, and report a summary on exit.
-e FILTER read+execve+write
-l, --library=LIBRARY_PATTERN only trace symbols implemented by this library.
-p PID attach to the process with the process ID pid.

nasm

1
2
3
4
nasm -felf32 shell.asm -o shell.o
ld -melf_i386 shell.o -o shell
objcopy -O binary shell.o shell.bin
objdump -b binaty -m i386 -D shell.bin

*cat

用来监听的

1
2
3
socat tcp-l:6666,reuseaddr,fork exec:"./pwn"
ncat -vc ./shellcode -kl 127.0.0.1 1234
ncat -vc "strace -e trace=read ./shellcode" -kl 127.0.0.1 1234

readelf

喜欢它的格式,比较清晰~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SYNOPSIS
readelf [-a|--all] #相当于同时指定了 --file-header, --program-headers, --sections, --symbols, --relocs, --dynamic, --notes and --version-info.
[-h|--file-header] #显示elf文件头
[-l|--program-headers|--segments] #显示区段头
[-S|--section-headers|--sections] #显示节区头
[-g|--section-groups] #显示节区组
[-t|--section-details] #显示节区细节,与-S差不多,只是它会显示flag的实际值,不过不易阅读.
[-e|--headers] #显示所有头,含文件头,节区头,段头,等价于 -h -l -S.
[-s|--syms|--symbols] #显示符号表(dymsym|symtab),若符号存在版本信息一并显示,用@分隔
[--dyn-syms] #输出dynsym,动态链接时与上面一样
[-n|--notes] #显示文件的note节区
[-r|--relocs] #显示文件的重定位节区,如静态链接的.rel.text、.rel.data或动态链接的.rel.plt、.rel.dyn
[-u|--unwind]
[-d|--dynamic] #显示dynamic节区
[-V|--version-info] #显示符号版本
[-A|--arch-specific]
[-D|--use-dynamic] #显示符号时不适用symtab二十四使用.gnu.hash
[-x <number or name>|--hex-dump=<number or name>] #以16进制方式输出节区内容,后面接节区下标或者节区名
[-p <number or name>|--string-dump=<number or name>] #以字符串形式输出节区内容,后面接节区下标或者节区名
[-R <number or name>|--relocated-dump=<number or name>] #同x,输出之前会进行重定位
[-z|--decompress] #在使用上面三个参数时,若节区被压缩,使用它先解压在显示
[-c|--archive-index] #显示静态归档文件中的符号与对象文件~
[-w[lLiaprmfFsoRt]|
--debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]] #调试信息
[--dwarf-depth=n]
[--dwarf-start=n]
[-I|--histogram]
[-v|--version]
[-W|--wide] #去掉输出宽度限制,在有的是好看点
[-H|--help]
elffile...

objdump

功能要更强大丁丁~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
OBJDUMP(1)                   GNU Development Tools                  OBJDUMP(1)

NAME
objdump - display information from object files.

SYNOPSIS
objdump [-a|--archive-headers] #像ls -l一样来列出静态连接库文件里的文件
[-b bfdname|--target=bfdname]
[-C|--demangle[=style] ] #解析C++里面的符号名,使之更可读
[-d|--disassemble] #反汇编可执行的节区
[-D|--disassemble-all] #反汇编所有的节区,他们都可以可以使用--prefix-address来输出完整前缀
[-z|--disassemble-zeroes] #对零字符区域反汇编
[-EB|-EL|--endian={big | little }] #字节序
[-f|--file-headers] #显示文件头概览
[-F|--file-offsets]
[--file-start-context]
[-g|--debugging] #调试信息
[-e|--debugging-tags] #同上,格式不同
[-h|--section-headers|--headers] #显示节区头
[-i|--info] #显示可用的对象格式与处理器架构
[-j section|--section=section] #指定要显示的节区,后接节区名
[-l|--line-numbers]
[-S|--source] #当存在源码时,反汇编代码与源码混合显示
[-m machine|--architecture=machine] #指定目标架构,支持的架构可使用-i查看
[-M options|--disassembler-options=options] #一些反汇编选项
[-p|--private-headers] #输出含区段头与dynamic节区
[-P options|--private=options]
[-r|--reloc]
[-R|--dynamic-reloc] #动态重定位条目
[-s|--full-contents] #以16进制与字符串形式显示节区内容
[-W[lLiaprmfFsoRt]|
--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames]
[=aranges,=macro,=frames,=frames-interp,=str,=loc]
[=Ranges,=pubtypes,=trace_info,=trace_abbrev]
[=trace_aranges,=gdb_index]
[-G|--stabs]
[-t|--syms] #显示symtab表
[-T|--dynamic-syms] #显示dynsym表
[-x|--all-headers] #所有头,等价于-a -f -h -p -r -t
[-w|--wide] #去掉显示宽度限制
[--start-address=address] #对-d -r -s有效
[--stop-address=address]
[--[no-]show-raw-insn]
[--adjust-vma=offset]
[--dwarf-depth=n]
[--dwarf-start=n]
[--special-syms]
[--prefix=prefix]
[--prefix-strip=level]
[--insn-width=width]
[-V|--version] #版本
[-H|--help] #帮助
objfile...

参考

[1]http://www.win.tue.nl/~aeb/linux/hh/stack-layout.html

CATALOG
  1. 1. ltrace/strace
  2. 2. nasm
  3. 3. *cat
  4. 4. readelf
  5. 5. objdump
  6. 6. 参考