Posts List

如何写一个 burp 插件

Burp 是 web安全测试中不可或缺的神器。每一个师傅的电脑里面应该都有一个 Burp。同时 Burp 和很多其他神器一样,它也支持插件。但是目前总体来说网上 Burp 插件开发的资料不是特别特别的丰富。今天我也来讲讲自己如何从一个完全不会 Burp 插件开发的小白如何学习 Burp 插件的开发。 如何调试 其实开发一样东西,调试真的特别重要。如果没有调试,那就和瞎子摸象差不多,非常的难顶。尤其是在 Burp 插件的开发过程中,如果你不可以调试,那你就必须把 jar 包打包出来,再安装,然后通过 output 来打印调试,这样的确非常地痛苦。后来在网上找了一些资料,一开始没太明白,后来研究发现原来调试配置这么简单。这么我们以宇宙 JAVA 开发神器 IDEA 为例。 配置 DEBUG 首先是在 IDEA 里面配置调试。点击右上角里面的配置,点击 “Edit Configurations” 就可以进入对 DEBUG 的配置页面。新增一个 Remote 配置,命名可以随自己的喜好。 命令行启动 Burp 为了配合调试,需要在命令行中使用刚才新建 DEBUG 配置的参数来启动 Burp。 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community_v2.1.02.jar 部署 jar 包,打断点 可以现在程序中打一下断点。接着就是编译 jar 包,并且启动 IDE 的 DEBUG。将 jar 包部署到 Burp 中,下面就可以快乐地调试了。 Burp 开发 老是说其实 Burp 插件开发其实还是比较简单的,只要你掌握常规的套路,熟悉了基本的 API 之后,基本就可以进行插件的开发。插件开发最困难的部分其实是 GUI 的开发,不过这也属于 JAVA GUI 开发的范畴,这个暂不讨论。Burp 开发注意以下几点:

cve check

今天想检查一下 Gitlab 11.9.0 产品受哪些 cve 的影响。其实网上已经有很多网站可以查询产品的相关 cve,但就是粒度比较粗。我想在 cve 列表中筛选出特定的版本,已经特定的版本,比如是社区版还是旗舰版。找了一下,没有发现完全符合这个要求的。后来在网上我就看到了一个网站是可以提供 cve 的 API 查询的。可以通过网站 API 可以获取特定的数据。 可以通过 https://cve.circl.lu/api/ 可以看到 API 文档。可以通过 cve id 以及 product 以及其他更多信息来查询。最有用的 API 就是这一个, 可以通过 vendor 以及 product 获取指定 vendor 和 product 的 cve 列表。这个 API 返回的结果是一个 JSON 数组,我们需要在这里面过滤出相应的版本号以及 edition 版本。另外由于请求的结果一般是一个很长的 json 数据,我的做法是第一次请求,可以吧结果保存成 JSON 文件,第二次请求的时候首先检查这个 JSON 文件的最近修改时间,如果最近修改时间小于指定的天数,比如 3 天,如果 3 天内修改过的话,直接从 JSON 文件加载数据,否则重新发送请求,加载数据。 # check if file modified in the last several days def check_file_modified(filename, days): file_modify_time = getmtime(filename) return time() - file_modify_time < (days * 3600 * 1000) def write_json(filename, result): with open(filename, 'w') as f: dump(result, f, indent=2) def write_csv(filename, result, header): with open(filename, 'w', newline='') as f: writer = csv.writer(f, delimiter=',') writer.writerow(header) for ele in result: writer.writerow([ele["id"], ele["last-modified"], ele["cvss"], ele["summary"]]) def search(params, options): url = "https://cve.circl.lu/api/search/" + params print(url) filename = f"{params.replace('/', '-')}.json" try: if isfile(filename) and check_file_modified(filename, 3): with open(filename, 'r') as f: result = loads(f.read()) else: res = get(url) if res.status_code == 200: with open(filename, 'w') as f: f.write(res.text) result = loads(res.text) else: print("Request failed: %d".format(res.status_code)) cve_result = [] for ele in result: if has_cve(ele, options.vendor, options.product, options.version, options.edition): obj = { "id": ele["id"], "last-modified": ele["last-modified"], "cvss": ele["cvss"], "summary": ele["summary"] } cve_result.append(obj) else: continue print(f"{options.vendor}:{options.product}:{options.version}:{options.edition} " f"has impacted by {len(cve_result)} cve") if options.output is None or options.output == "csv": write_csv("result.csv", cve_result, ["id", "last-modified", "cvss", "summary"]) else: write_json("result.json", cve_result) except Exception as e: print(e) 完整的项目地址可以参考 https://github.com/neal1991/check-cve/blob/master/check-cve.py