got the flag
This commit is contained in:
parent
49f38d0429
commit
914fd08d3b
BIN
__pycache__/hashcash.cpython-38.pyc
Normal file
BIN
__pycache__/hashcash.cpython-38.pyc
Normal file
Binary file not shown.
69
hashcash.py
69
hashcash.py
@ -15,24 +15,22 @@ rand_chars = ([chr(x) for x in range(ord('a'), ord('z'))] +
|
|||||||
[chr(x) for x in range(ord('0'), ord('9'))] +
|
[chr(x) for x in range(ord('0'), ord('9'))] +
|
||||||
['+', '-', '/'])
|
['+', '-', '/'])
|
||||||
|
|
||||||
|
char_map = {'0': '0000',
|
||||||
char_map = {'0' : '0000',
|
'1': '0001',
|
||||||
'1' : '0001',
|
'2': '0010',
|
||||||
'2' : '0010',
|
'3': '0011',
|
||||||
'3' : '0011',
|
'4': '0100',
|
||||||
'4' : '0100',
|
'5': '0101',
|
||||||
'5' : '0101',
|
'6': '0110',
|
||||||
'6' : '0110',
|
'7': '0111',
|
||||||
'7' : '0111',
|
'8': '1000',
|
||||||
'8' : '1000',
|
'9': '1001',
|
||||||
'9' : '1001',
|
'a': '1010',
|
||||||
'a' : '1010',
|
'b': '1011',
|
||||||
'b' : '1011',
|
'c': '1100',
|
||||||
'c' : '1100',
|
'd': '1101',
|
||||||
'd' : '1101',
|
'e': '1110',
|
||||||
'e' : '1110',
|
'f': '1111'}
|
||||||
'f' : '1111'}
|
|
||||||
|
|
||||||
|
|
||||||
rc_len = len(rand_chars)
|
rc_len = len(rand_chars)
|
||||||
|
|
||||||
@ -41,16 +39,18 @@ min_bits = 0
|
|||||||
max_bits = 160
|
max_bits = 160
|
||||||
default_bits = 15
|
default_bits = 15
|
||||||
|
|
||||||
def is_valid(stamp : str) -> bool:
|
|
||||||
|
def is_valid(stamp: str) -> bool:
|
||||||
return validate(int(stamp.split(':')[1]), stamp)
|
return validate(int(stamp.split(':')[1]), stamp)
|
||||||
|
|
||||||
def validate(nbits : int, stamp : str, encoding : str ='utf-8') -> bool:
|
|
||||||
|
def validate(nbits: int, stamp: str, encoding: str = 'utf-8') -> bool:
|
||||||
if nbits < min_bits or nbits > max_bits:
|
if nbits < min_bits or nbits > max_bits:
|
||||||
raise ValueError("Param 'nbits' must be in range [0, 160), but is {}".format(nbits))
|
raise ValueError("Param 'nbits' must be in range [0, 160), but is {}".format(nbits))
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
total = 0
|
total = 0
|
||||||
N = int(nbits/8)
|
N = int(nbits / 8)
|
||||||
hashed = sha1(stamp.encode(encoding)).digest()
|
hashed = sha1(stamp.encode(encoding)).digest()
|
||||||
|
|
||||||
while i < N:
|
while i < N:
|
||||||
@ -63,19 +63,19 @@ def validate(nbits : int, stamp : str, encoding : str ='utf-8') -> bool:
|
|||||||
|
|
||||||
return total == 0
|
return total == 0
|
||||||
|
|
||||||
def generate(nbits : int, resource : str, encoding : str ='utf-8') -> str:
|
|
||||||
|
def generate(nbits: int, resource: str, encoding: str = 'utf-8') -> str:
|
||||||
# ver:bits:date:resource:[ext]:rand:counter
|
# ver:bits:date:resource:[ext]:rand:counter
|
||||||
ver = 1
|
ver = 1
|
||||||
bits = nbits
|
bits = nbits
|
||||||
date_str = datetime.utcnow().strftime("%Y%m%d%H%M%S")
|
date_str = datetime.utcnow().strftime("%Y%m%d%H%M%S")
|
||||||
ext = ''
|
ext = ''
|
||||||
rand = ''.join(rand_chars[randint(0, rc_len-1)] for x in range(0, 10))
|
rand = ''.join(rand_chars[randint(0, rc_len - 1)] for x in range(0, 10))
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
||||||
result = None
|
result = None
|
||||||
while result is None:
|
while result is None:
|
||||||
#stamp = ":".join(str(elem) for elem in [ver, bits, date_str, resource, ext, rand, counter])
|
stamp = "{}{}".format(resource, counter)
|
||||||
stamp = "{}{}".format(resource,counter)
|
|
||||||
|
|
||||||
if validate(nbits, stamp, encoding=encoding):
|
if validate(nbits, stamp, encoding=encoding):
|
||||||
result = stamp
|
result = stamp
|
||||||
@ -84,22 +84,3 @@ def generate(nbits : int, resource : str, encoding : str ='utf-8') -> str:
|
|||||||
counter += 1
|
counter += 1
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
from argparse import ArgumentParser
|
|
||||||
parser = ArgumentParser()
|
|
||||||
|
|
||||||
parser.add_argument("NBITS", type=int, default=default_bits, help="Number of leading zeroes in a stamp", choices=range(max_bits+1))
|
|
||||||
parser.add_argument("RESOURCE", help="The resource string to use in the stamp. Ex: email address, ip address, etc")
|
|
||||||
parser.add_argument('-v', '--validate', action='store_true', help="Validate RESOURCE as a HashCash stamp")
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
func = generate
|
|
||||||
|
|
||||||
if args.validate:
|
|
||||||
func = validate
|
|
||||||
|
|
||||||
print(func(args.NBITS, args.RESOURCE))
|
|
14
netsec.py
14
netsec.py
@ -6,6 +6,7 @@ import socket
|
|||||||
import hashlib
|
import hashlib
|
||||||
import requests
|
import requests
|
||||||
import sympy
|
import sympy
|
||||||
|
import hashcash
|
||||||
"""
|
"""
|
||||||
requirements:
|
requirements:
|
||||||
sympy
|
sympy
|
||||||
@ -54,6 +55,11 @@ def sha1_magic(s, last_solution):
|
|||||||
print(digest)
|
print(digest)
|
||||||
s.send(digest.encode())
|
s.send(digest.encode())
|
||||||
print(s.recv(1024).decode())
|
print(s.recv(1024).decode())
|
||||||
|
newstring = hashcash.generate(16, 'Y8O353{}'.format(last_solution))
|
||||||
|
print(s.recv(1024).decode())
|
||||||
|
print(newstring)
|
||||||
|
s.send(newstring.encode())
|
||||||
|
print(s.recv(1024).decode())
|
||||||
|
|
||||||
|
|
||||||
def http_comm():
|
def http_comm():
|
||||||
@ -69,7 +75,7 @@ def http_comm():
|
|||||||
def https_comm():
|
def https_comm():
|
||||||
sess = requests.Session()
|
sess = requests.Session()
|
||||||
url = "https://152.66.249.144/"
|
url = "https://152.66.249.144/"
|
||||||
flag = sess.get(url, cert=("/tmp/clientcert.pem", "/tmp/clientkey.pem"), verify=False)
|
flag = sess.get(url, cert=("/tmp/clientcert.pem", "/tmp/clientkey.pem"), verify=False, headers={'User-Agent': 'CrySyS'})
|
||||||
print(flag.content)
|
print(flag.content)
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +96,7 @@ def numbre_crunch(s):
|
|||||||
solution = sympy.sympify(problem_statement_for.split('.')[1].split('=')[0])
|
solution = sympy.sympify(problem_statement_for.split('.')[1].split('=')[0])
|
||||||
print(solution)
|
print(solution)
|
||||||
s.send(str(solution).encode())
|
s.send(str(solution).encode())
|
||||||
last_solution=solution
|
last_solution = solution
|
||||||
|
|
||||||
return last_solution
|
return last_solution
|
||||||
|
|
||||||
@ -99,4 +105,6 @@ if __name__ == '__main__':
|
|||||||
knock()
|
knock()
|
||||||
server_communicate()
|
server_communicate()
|
||||||
http_comm()
|
http_comm()
|
||||||
#https_comm()
|
https_comm()
|
||||||
|
|
||||||
|
# FLAG: YouCanHandleNetworking-Y8O353-1d66de
|
||||||
|
Loading…
Reference in New Issue
Block a user