Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. import os
  2. from pwn import *
  3.  
  4. # context.log_level = 'debug'
  5.  
  6. # copy and paste
  7.  
  8. def sha(my_string):
  9. m = hashlib.new('sha')
  10. m.update(my_string)
  11. return m.digest()
  12.  
  13. def sha1(my_string):
  14. m = hashlib.new('sha1')
  15. m.update(my_string)
  16. return m.digest()
  17.  
  18. def sha256(my_string):
  19. m = hashlib.new('sha256')
  20. m.update(my_string)
  21. return m.digest()
  22.  
  23. def ripemd160(my_string):
  24. m = hashlib.new('ripemd160')
  25. m.update(my_string)
  26. return m.digest()
  27.  
  28. def xor(s1,s2):
  29. return ''.join([chr(ord(s1[i]) ^ ord(s2[i % len(s2)])) for i in range(len(s1))])
  30.  
  31. h_list = [sha, sha1, ripemd160, sha256]
  32.  
  33.  
  34. def combo_hash(salt, password, h_list, no_rounds):
  35. salted_pass = password + salt + password
  36. l_pass = salted_pass[:32]
  37. r_pass = salted_pass[32:]
  38. for i in range(no_rounds):
  39. l_index = ord(l_pass[31]) % len(h_list)
  40. r_index = ord(r_pass[0]) % len(h_list)
  41. l_hash = h_list[l_index](l_pass)
  42. r_hash = h_list[r_index](r_pass)
  43. l_pass = xor(l_pass,r_hash)
  44. r_pass = xor(r_pass,l_hash)
  45. return l_pass + r_pass
  46.  
  47. # functions for exploit
  48.  
  49. def solve(m, h):
  50. a0, a1, a2, a3 = m[0:8], m[8:12], m[12:16], m[16:24]
  51.  
  52. v0, v1, v2, v3, v4 = h[0:8], h[8:12], h[12:20], h[20:28], h[28:32]
  53. v5, v6, v7, v8, v9 = h[32:36], h[36:44], h[44:52], h[52:56], h[56:64]
  54.  
  55. x0 = xor(xor(v0, v3), a0)
  56. x1 = xor(xor(v1, v4), a1)
  57. _x1 = xor(xor(v5, v8), a2)
  58. x2 = xor(xor(v6, v9), a3)
  59.  
  60. if x1 != _x1: return None
  61. return x0 + x1 + x2
  62.  
  63. while True:
  64. r = remote('52.142.217.130', 13374)
  65. # r = process(['python', 'ph.py'])
  66.  
  67. r.recvline()
  68.  
  69. ms = []
  70. for i in range(1023):
  71. m = os.urandom(11) + '\x00\x00' + os.urandom(11)
  72. ms.append(m)
  73. r.sendline(m.encode('hex'))
  74. for m in ms:
  75. h = r.recvline().strip().decode('hex')
  76. p = solve(m, h)
  77. if p != None: break
  78.  
  79. if p == None:
  80. r.close()
  81. continue
  82.  
  83. r.sendline('')
  84. r.recvuntil('Here is the challenge salt:\n')
  85. s = r.recvline().strip().decode('hex')
  86. h = combo_hash(s, p, h_list, 16)
  87. r.sendline(h.encode('hex'))
  88.  
  89. r.interactive()
  90. break
  91.  
  92. '''
  93. Congrats. Here's a flag for you:
  94. PTBCTF{420199e572e685af8e1782fde58fd0e9}
  95. '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement