Buffer Overflow CheatSheets
Shellcode library
General tricks
Dissasemble the binary
1
objdump -d [FILE]
Print the headers
1
objdump -x [FILE]
Printing Libraries from the binary
1
ltrace
Printing syscalls and signals from the binary
1
strace
Radare 2 Cheat sheets
radare2
load without any analysis (file header at offset 0x0): r2 -n /path/to/file
- analyze all:
aa - show sections:
iS - list functions:
afl - list imports:
ii - list entrypoints:
ie - seek to function:
s sym.main
project management
- open project:
Po <name> - save project:
Ps <name> - edit project notes:
Pn -
inspecting a function
- show basic block disassembly:
pdb - show function disassembly:
pdf - show function arguments:
afa - show function variables:
afv - rename function variable:
afvn - set function variable type:
afvt - add/analyze function:
af
comments:
by default, these get displayed in disassembly listings to the right of a line. disable them in V visual mode using ‘ (single quote).
multiline comments are not rendered handled well. they don’t look pretty.
- add comment (using editor):
CC!- note: multiline comments are not formatted nicely
- append comment:
CC <text> - overwrite comment:
CCu <text> - show comment:
CC. - show comment in this function:
CCf
visual mode
- enter visual mode:
V - select function, variable, xref:
v - quick command/seek:
_ <search string> - custom quick command list:
??- you can update the list of commands shown here by changing
$R2HOME/hud. - ref: http://radare.today/posts/visual-mode/
- you can update the list of commands shown here by changing
- show cursor:
c - set function name:
d - add comment:
; - remove comment:
;-
“flag” means give something a type. like function or symbol.
graph mode
graph mode is not visual mode!
- enter graph modes:
VV - cycle types of graphs:
- forward:
p - backwards:
P
- forward:
- types of graphs:
- graph view
- graph view + opcode bytes
- esil
- esil + comments
- overview
- seek to function:
g<identifier> - undo seek:
u - define new function at cursor:
df - rename function at cursor:
dr - show comments:
' - add comment:
/ - add comment (complex):
:CC! - select bb:
??? - seek to next bb:
tab - seek to previous bb:
TAB - if bb has conditional branch:
- seek to True target:
t - seek to False target:
f
- seek to True target:
pipe,grep,etc
- exec multiple cmd:
; - pipeline cmd:
| - run shell cmd: ‘!’ , and give output back to r2 buffer: ‘!!’
- grep:
<cmd>~<string>grep string from command output<cmd>~[n]grep also the ‘n’ column<cmd>~:ngrep also the ‘n’ row
analysis, assembly, memory
- analyze functions:
af - analyze stack:
ad@rsporad@esp - search for opcode:
/a - search for rop/jop/etc:
/R - search for bytes:
/x - get offset for the actual seek point address:
?p
configuration
recommended contents of ~/.radare2rc:
1
2
3
4
5
6
7
8
9
10
11
# Show comments at right of disassembly if they fit in screen
e asm.cmt.right=true
# Shows pseudocode in disassembly. Eg mov eax, str.ok = > eax = str.ok
e asm.pseudo = true
# Solarized theme
eco solarized
# Use UTF-8 to show cool arrows that do not look like crap :)
e scr.utf8 = true
Print stack
1
pxr @ esp
Show registers
1
2
drr
dr
Debug
First
1
AAA
Then
1
2
V
p (3 times to enter debug mode, this will show stack, registers and assembly code)
Finally you can create a breakpoint into main
1
db main
And continue with the execution and hit the breakpoint or F9
1
dc
Reattach the program to start again
1
do
Change stack size
1
2
: (To enter command line mode)
e stack.size=256
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[0x55673eccb5fa]> ds?
|Usage: ds Step commands
| ds Step one instruction
| ds <num> Step <num> instructions
| dsb Step back one instruction
| dsf Step until end of frame
| dsi <cond> Continue until condition matches
| dsl Step one source line
| dsl <num> Step <num> source lines
| dso <num> Step over <num> instructions
| dsp Step into program (skip libs)
| dss <num> Skip <num> step instructions
| dsu[?]<address> Step until address
| dsui[r] <instr> Step until an instruction that matches `instr`, use dsuir for regex match
| dsue <esil> Step until esil expression matches
| dsuf <flag> Step until pc == flag matching name
F7 is step into, or ds
F8 is step over, or dso
Are you lost?
Hit the period .
You step into a function a want to get out?
1
dsf
Input
1
2
3
4
python -c "print(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)" > p.text
r2 -d program
dor stdin=p.text
doo # Reopen in debugger mode
Now the input will send AAAAAA…
Print local variables
1
afvd
Restart radare2
To restart radare2 with the binary
1
ood
To restart the binary
1
oo
0x7ffd91c300bc