GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got -...

18
GOT/PLT Presented by Justin Zhu

Transcript of GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got -...

Page 1: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

GOT/PLTPresented by Justin Zhu

Page 2: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

What is the Global Offset Table (GOT)?

It's a table of offsets!

Offsets to what?

Dynamically linked libraries.

Like functions in libc.

Page 3: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

What's PLT?

Page 4: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

What's the Procedure Linkage Table?

It's like the interface the actual program uses.

It's what uses the GOT to give the program the function it wants.

Everything makes more sense with examples.

Page 5: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work?

Diagram Credits:

https://nuc13us.wordpress.com/2015/12/25/hack-using-global-offset-table/

Page 6: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo)

demo.c

Page 7: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd)

readelf -S demo

.plt - 0x00400420

.got - 0x00600ff0

.got.plt - 00x601000

Page 8: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd)

gdb demo

.plt - 0x00400420

.got - 0x00600ff0

.got.plt - 00x601000

Page 9: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000

Page 10: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000

Page 11: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000

Page 12: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000

Page 13: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

Your Mission

Overwrite entries in the GOT to call the function you want to call.

Page 14: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

Mitigations

RELRO - Relocation Read-Only

ASLR - Address Space Layout Randomization

PIE - Position Independent Execution

Page 15: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

PleaseLeave (but actually stay for help and questions), Then

GoOnlineTo_SIGPwny_CTF_And_Solve_Challenges

Page 16: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

n

Presentation

--------------------------

Now

Page 17: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

GOT Overwrite 2

Walkthrough

(hey Justin, open up your terminal)

Page 18: GOT/PLT · 2021. 4. 23. · How does GOT/PLT Work? (demo) (cont'd) gdb demo.plt - 0x00400420.got - 0x00600ff0.got.plt - 00x601000. How does GOT/PLT Work? (demo) (cont'd).plt - 0x00400420

Format String Vulns

%s - print random string

%x - print hex word

%n - write number of printed chars

[num]$ - use the [num]-th parameter

%[num][format specifier] - use for padding

Arbitrary write: Put [addr] onto stack and printf("%[value]n")