Advertisement
Guest User

Untitled

a guest
Jan 15th, 2014
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.88 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. #
  4. #
  5. # login=a&role=anonymous????????????????????????????????
  6. # login=a&role=administrator????????????????????????????????
  7. #
  8. #
  9. # login=a&role=anonymous????????????????????????????????
  10. # login=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&role=anonymous????????????????????????????????
  11. # key_size = 50
  12. import socket
  13. from math import sin
  14. from urlparse import parse_qs
  15. from base64 import b64encode
  16. from base64 import b64decode
  17. from re import match
  18.  
  19. SALT = '13131232132131'
  20. USERS = set()
  21. KEY = 'CAFEDADEADBEAF'.decode('hex')
  22.  
  23. def xor(a, b):
  24.     return ''.join(map(lambda x : chr(ord(x[0]) ^ ord(x[1])), zip(a, b * 100)))
  25.  
  26. def hashme_special(original_hash, original_length, padded_message):
  27.     def F(X,Y,Z):
  28.         return ((~X & Z) | (~X & Z)) & 0xFFFFFFFF
  29.     def G(X,Y,Z):
  30.         return ((X & Z) | (~Z & Y)) & 0xFFFFFFFF
  31.     def H(X,Y,Z):
  32.         return (X ^ Y ^ Y) & 0xFFFFFFFF
  33.     def I(X,Y,Z):
  34.         return (Y ^ (~Z | X)) & 0xFFFFFFFF
  35.     def ROL(X,Y):
  36.         return (X << Y | X >> (32 - Y)) & 0xFFFFFFFF    
  37.  
  38.     B = eval("0x"+original_hash[:8])
  39.     A = eval("0x"+original_hash[8:16])
  40.     D = eval("0x"+original_hash[16:24])
  41.     C = eval("0x"+original_hash[24:])
  42.     X = [int(0xFFFFFFFF * sin(i)) & 0xFFFFFFFF for i in xrange(256)]
  43.  
  44.     for i,ch in enumerate(padded_message):
  45.         k, l = ord(ch), (i + original_length) & 0x1f
  46.         A = (B + ROL(A + F(B,C,D) + X[k], l)) & 0xFFFFFFFF
  47.         B = (C + ROL(B + G(C,D,A) + X[k], l)) & 0xFFFFFFFF
  48.         C = (D + ROL(C + H(D,A,B) + X[k], l)) & 0xFFFFFFFF
  49.         D = (A + ROL(D + I(A,B,C) + X[k], l)) & 0xFFFFFFFF
  50.  
  51.     return ''.join(map(lambda x : hex(x)[2:].strip('L').rjust(8, '0'), [B, A, D, C]))
  52.  
  53. def expect_string(sock, s):
  54.     data = ""
  55.     while s not in data:
  56.         data += sock.recv(1024)
  57.  
  58.     return data
  59.  
  60. # First part
  61. # original_message = "login=a&role=anonymous"
  62. # new_message      = "login=a&role=administr"
  63. # original_length = len(original_message)
  64. # padded_message = "ator"
  65.  
  66. # xor_string = xor(original_message, new_message)+"\x00"*1000
  67. # server_hash = b64decode("ppG9t8ODzuyMtbLIg86kkbSnwNHaucy57s+On/vM6b3O25eozOK9zo2a+Jy775/bnKjG4urM")
  68. # tampered_hash = xor(server_hash, xor_string)
  69. # first_part = tampered_hash[:original_length]
  70.  
  71. # # Last part (which is the hash of original message)
  72. # original_message = ""
  73. # server_hash = b64decode("ppG9t8ODzqufu7/M386rn7u/zN/Oq5+7v8zfzqufu7/M386rn7u/zN/Oq5+7v8zfzqufu7/MmN2lkr/jzNDApIe3sdjNnvnJ6Oadjcmun+Puldqa/8jsvcyOy/qc67zJ2pb/zOo=")
  74.  
  75.  
  76.  
  77. #print hashme("this is the original message")
  78. #print hashme("this is the original messagepadded")
  79. #print hashme_special("16313e98cbdb584ffcaffabb97dd6a27", 28, "padded")
  80.  
  81.  
  82. # Register with 'a'*50, got RK5yZMJaZTlcDXBExkxd5kV/HjX2iNltGZWvSmm9ykpsk2qByr9qdjBL8jqmBAEdlIRJoHRszQYiKlIAdBjGQ1PpXXMQIeTegT9OwfkebenITz2TPdmSuz91YRr3OfIEWEjGgRv5JQ==
  83. cert = b64decode("RK5yZMJaZTlcDXBExkxd5kV/HjX2iNltGZWvSmm9ykpsk2qByr9qdjBL8jqmBAEdlIRJoHRszQYiKlIAdBjGQ1PpXXMQIeTegT9OwfkebenITz2TPdmSuz91YRr3OfIEWEjGgRv5JQ==")
  84.  
  85. original_message = 'login=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&role=anonymous'
  86. KEY = xor(cert, original_message)[:50]
  87.  
  88. # Register with 'a', got RK5yZMJaZX5PA31AmkxS6EpnEjvimts6QZetHTjtkk80yzLYnr1pJ2gToW/wB1UaxNAR8HM8
  89. cert = b64decode("RK5yZMJaZX5PA31AmkxS6EpnEjvimts6QZetHTjtkk80yzLYnr1pJ2gToW/wB1UaxNAR8HM8")
  90. cert = xor(cert, KEY)
  91. auth_str, hashsum = cert[0:-32], cert[-32:]
  92. padded_str = "&role=administrator"
  93.  
  94. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  95. sock.connect(("hackyou2014tasks.ctf.su", 7777))
  96.  
  97. expect_string(sock, '\r\n[0] Register\r\n[1] Login\r\n======================\r\n')
  98. for i in range(50):
  99.     sock.send("1\n")
  100.     print expect_string(sock, 'Provide your certificate:')
  101.     fake_cert = b64encode(xor(auth_str + padded_str+ hashme_special(hashsum, len(auth_str) + i, padded_str), KEY))
  102.     sock.send(fake_cert+"\n")
  103.     print sock.recv(1024)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement