Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #
- #
- # login=a&role=anonymous????????????????????????????????
- # login=a&role=administrator????????????????????????????????
- #
- #
- # login=a&role=anonymous????????????????????????????????
- # login=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&role=anonymous????????????????????????????????
- # key_size = 50
- import socket
- from math import sin
- from urlparse import parse_qs
- from base64 import b64encode
- from base64 import b64decode
- from re import match
- SALT = '13131232132131'
- USERS = set()
- KEY = 'CAFEDADEADBEAF'.decode('hex')
- def xor(a, b):
- return ''.join(map(lambda x : chr(ord(x[0]) ^ ord(x[1])), zip(a, b * 100)))
- def hashme_special(original_hash, original_length, padded_message):
- def F(X,Y,Z):
- return ((~X & Z) | (~X & Z)) & 0xFFFFFFFF
- def G(X,Y,Z):
- return ((X & Z) | (~Z & Y)) & 0xFFFFFFFF
- def H(X,Y,Z):
- return (X ^ Y ^ Y) & 0xFFFFFFFF
- def I(X,Y,Z):
- return (Y ^ (~Z | X)) & 0xFFFFFFFF
- def ROL(X,Y):
- return (X << Y | X >> (32 - Y)) & 0xFFFFFFFF
- B = eval("0x"+original_hash[:8])
- A = eval("0x"+original_hash[8:16])
- D = eval("0x"+original_hash[16:24])
- C = eval("0x"+original_hash[24:])
- X = [int(0xFFFFFFFF * sin(i)) & 0xFFFFFFFF for i in xrange(256)]
- for i,ch in enumerate(padded_message):
- k, l = ord(ch), (i + original_length) & 0x1f
- A = (B + ROL(A + F(B,C,D) + X[k], l)) & 0xFFFFFFFF
- B = (C + ROL(B + G(C,D,A) + X[k], l)) & 0xFFFFFFFF
- C = (D + ROL(C + H(D,A,B) + X[k], l)) & 0xFFFFFFFF
- D = (A + ROL(D + I(A,B,C) + X[k], l)) & 0xFFFFFFFF
- return ''.join(map(lambda x : hex(x)[2:].strip('L').rjust(8, '0'), [B, A, D, C]))
- def expect_string(sock, s):
- data = ""
- while s not in data:
- data += sock.recv(1024)
- return data
- # First part
- # original_message = "login=a&role=anonymous"
- # new_message = "login=a&role=administr"
- # original_length = len(original_message)
- # padded_message = "ator"
- # xor_string = xor(original_message, new_message)+"\x00"*1000
- # server_hash = b64decode("ppG9t8ODzuyMtbLIg86kkbSnwNHaucy57s+On/vM6b3O25eozOK9zo2a+Jy775/bnKjG4urM")
- # tampered_hash = xor(server_hash, xor_string)
- # first_part = tampered_hash[:original_length]
- # # Last part (which is the hash of original message)
- # original_message = ""
- # server_hash = b64decode("ppG9t8ODzqufu7/M386rn7u/zN/Oq5+7v8zfzqufu7/M386rn7u/zN/Oq5+7v8zfzqufu7/MmN2lkr/jzNDApIe3sdjNnvnJ6Oadjcmun+Puldqa/8jsvcyOy/qc67zJ2pb/zOo=")
- #print hashme("this is the original message")
- #print hashme("this is the original messagepadded")
- #print hashme_special("16313e98cbdb584ffcaffabb97dd6a27", 28, "padded")
- # Register with 'a'*50, got RK5yZMJaZTlcDXBExkxd5kV/HjX2iNltGZWvSmm9ykpsk2qByr9qdjBL8jqmBAEdlIRJoHRszQYiKlIAdBjGQ1PpXXMQIeTegT9OwfkebenITz2TPdmSuz91YRr3OfIEWEjGgRv5JQ==
- cert = b64decode("RK5yZMJaZTlcDXBExkxd5kV/HjX2iNltGZWvSmm9ykpsk2qByr9qdjBL8jqmBAEdlIRJoHRszQYiKlIAdBjGQ1PpXXMQIeTegT9OwfkebenITz2TPdmSuz91YRr3OfIEWEjGgRv5JQ==")
- original_message = 'login=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&role=anonymous'
- KEY = xor(cert, original_message)[:50]
- # Register with 'a', got RK5yZMJaZX5PA31AmkxS6EpnEjvimts6QZetHTjtkk80yzLYnr1pJ2gToW/wB1UaxNAR8HM8
- cert = b64decode("RK5yZMJaZX5PA31AmkxS6EpnEjvimts6QZetHTjtkk80yzLYnr1pJ2gToW/wB1UaxNAR8HM8")
- cert = xor(cert, KEY)
- auth_str, hashsum = cert[0:-32], cert[-32:]
- padded_str = "&role=administrator"
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.connect(("hackyou2014tasks.ctf.su", 7777))
- expect_string(sock, '\r\n[0] Register\r\n[1] Login\r\n======================\r\n')
- for i in range(50):
- sock.send("1\n")
- print expect_string(sock, 'Provide your certificate:')
- fake_cert = b64encode(xor(auth_str + padded_str+ hashme_special(hashsum, len(auth_str) + i, padded_str), KEY))
- sock.send(fake_cert+"\n")
- print sock.recv(1024)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement