start_collect_mtask_result_webshell.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #-*-coding:utf-8 -*-
  2. import json
  3. import os,sys
  4. import django
  5. sys.path.append(os.path.join("..",os.path.dirname(__file__)))
  6. os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
  7. django.setup()
  8. import common.models as cm
  9. import webray_service.control_wshellpoc as cwsp
  10. def get_available_tasks():
  11. """
  12. """
  13. wrtask = cm.WebRayTasks.objects.filter(type=3)
  14. return wrtask
  15. def collect_results_webshell():
  16. tasks = get_available_tasks()
  17. for task in tasks:
  18. siteid = task.siteid
  19. task_id = str(task.id)
  20. website_id = task.website_id
  21. wstrobj = cm.WebShellTasksResult.objects.filter(task_id=task.id).order_by("-jobid").first()
  22. jobid = wstrobj.jobid if wstrobj else -1
  23. if task.excute_type == "once":
  24. if jobid > -1:
  25. continue
  26. else:
  27. jobid = 0
  28. else:
  29. jobid = jobid + 1
  30. wajob_res = cwsp.get_webshellpoc_results([{"task_id":task_id,"job_id":jobid}])
  31. print wajob_res,2222222222
  32. if wajob_res.get("message") == "ok":
  33. if wajob_res.get("data"):
  34. data = wajob_res.get("data")[0]
  35. trobj,flag = cm.WebShellTasksResult.objects.get_or_create(
  36. task_type = 4,
  37. task_id = task.id,
  38. website_id = website_id,
  39. taskid = task.id,
  40. jobid = jobid,
  41. task_status = data.get("task_status"),
  42. starttime = data.get("task_begintime"),
  43. endtime = data.get("task_endtime"),
  44. task_executing_engine_id = data.get("task_executing_engine_id"),
  45. task_executing_enginevendor_id = data.get("task_executing_enginevendor_id"),
  46. task_result = json.dumps(data.get("task_result")),
  47. total = len(data.get("task_result",[]))
  48. )
  49. trobj.save()
  50. #生成webshell告警事件
  51. if json.loads(trobj.task_result):
  52. cm.WarningEvent.objects.create(**{"event_type":"webshell",
  53. "task_type":1,
  54. "task_id":task_id,
  55. "taskid":task_id,
  56. "jobid":jobid,
  57. "taskname":task.name,
  58. "domain":task.site.split("//")[1].split(":")[0],
  59. "label":task.website_name,
  60. "organization":cm.WebSite.objects.filter(id=website_id).first().organization_name,
  61. "result":trobj.task_result
  62. })
  63. def main():
  64. collect_results_webshell()
  65. if __name__ == "__main__":
  66. main()