Top Banner
GOT/PLT Presented by Justin Zhu
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

Aug 17, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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")