使用Golang编写一些简单的web漏洞利用工具

admin 2023年5月29日08:47:03评论61 views字数 1941阅读6分28秒阅读模式

    本文主要分享如何使用Golang编写web漏洞检测和利用工具

一.为什么用Golang?

  1. 编译执行,不需要安装其他环境依赖

      使用java或者python编写工具时,往往在需要运行的机器上需要安装响应的运行环境,如果使用的python还需要使用网络连接来安装相应的依赖来运行程序(虽然你也可以依赖下载到本地来安装)。如果碰上不出网环境,那实在是令人头疼。Golang编写的程序可以直接编译对应平台的二进制程序,所有的依赖也已经在编译时打包进程序当中。也不需要安装运行环境,直接执行就可以一把梭。

  2. 并发检测,一个字总结就是"快"

    Golang在并发编程方面比绝大多数语言要简洁不少,仅需要在需要并发执行的函数前加上Go关键字,并做好文件读写的锁,就可以快速的实现并发请求。对于批量web漏洞的检测而言,这一点十分有用

  3. 学习成本相对较低,如果你是一个编程小白的话

  以作者的角度看来,Golang的学习成本和Python差不太多,如果你只是用来编写一些小工具,做一些简单的http请求,甚至是写一个web服务器。本身Golang的使用人群也比较多,碰到的一些问题基本上使用搜索引擎都可以解决(实在搜索不到的不是还有万能的ChatGPT嘛)。它的语法也跟Python一类的动态语言比较类似。

.一些编写用到的前置知识。

1.go mod

它类似于python当中的pip(java当中的maven?),是golang的一个包管理工具。安装完golang之后,在命令行运行以下命令。

go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct

他们分别是用于开启go mod功能以及添加go mod的下载代理。这样在我们后期编写代码过程中需要引入其他依赖时,只需要运行

go get github.com/xxxxx

就可将依赖添加进来

2.推荐的IDE

作者本人使用的是Goland,我也推荐使用Goland,因为不管从项目的管理,代码的编写,依赖管理等方面,他都比vscode要好用很多。使用vscode编写的话,你还要进行一系列的配置。

3.一些名词

结构体:你可以把它类比为面向对象当中的对象

函数:具体功能的实现都是放在函数当中,函数有两种形式,一种是带接收者的,一种是不带接收者的。收者的函数一般接收者就是你定义的结构体,所以你可以把他类比为面向对象中类的方法。且当接收者为结构体指针时才可以对接收者的属性进行修改。

三.编写Web漏洞检测工具目录结构以及实现

已作者之前编写的ivms文件上传漏洞工具举例

ivms文件上传漏洞

Xsafe,公众号:Xsafe海康威视ivms文件上传漏洞检测利用工具

使用Golang编写一些简单的web漏洞利用工具

modules目录主要存放漏洞利用的一些具体方法和漏洞利用实体。

    module.go 主要存放漏洞结构体的定义,我一般会定义注入检测目标,多个目标的文件,是否存在漏洞,shell相关参数,请求超时时间等参数,后面我的函数编写也以这个结构体作为接收者进行编写。可以理解面向对象编程中的类

使用Golang编写一些简单的web漏洞利用工具

    init.go主要负责在实例化漏洞实体之后,通过对命令行参数进行解析来对一些实体参数进行初始化。其中还需要处理一些诸如参数错误,文件不存在错误的问题。同时该文件还会定义漏洞实体以及之后并发扫描会用到的并发控制参数。

使用Golang编写一些简单的web漏洞利用工具

utils.go中主要是定义一些定义一些扫描检测过程中会用的函数,例如上图的多个文件载入,漏洞检测后提取相关关键字来确定漏洞是否存在。对给与的扫描目标的合法性检测等。

使用Golang编写一些简单的web漏洞利用工具

ivms.go中主要定义的就是具体的检测和利用函数,以及单个执行和批量执行的函数。在golang中函数名的第一个字母大写代表这个函数对外可访问,小写时不可访问。类似于面向对象编程里的私有和公共属性。所以为了我们最后main函数的简洁。我们只对外暴露Run函数,所有的初始化和检测利用函数都写在这个Run函数里面。

使用Golang编写一些简单的web漏洞利用工具

使用Golang编写一些简单的web漏洞利用工具

  main.go是我们的入口函数,定义的就是程序的执行。由于我们都在modules里面进行了封装。所以我们的main函数十分的简单。

使用Golang编写一些简单的web漏洞利用工具

  剩下来的build.sh和readme.md,分别是编译脚本和使用文档,其中编译脚本我这里只写了shell脚本,没有编写windows的批处理。

使用Golang编写一些简单的web漏洞利用工具

.总结

    以上就是作者在使用golang编写web漏洞检测利用工具会使用的目录结构以及编写方法。大体上对于web漏洞利用工具的编写套用这个模板都差不多,无非就是在定义结构体和初始哈参数的时候需要做一些针对性的调整。读者可以把ivms这个项目克隆下来作为模板来完成一些其他web漏洞工具的编写来更好地理解。

原文始发于微信公众号(Xsafe):使用Golang编写一些简单的web漏洞利用工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月29日08:47:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Golang编写一些简单的web漏洞利用工具http://cn-sec.com/archives/1769260.html

发表评论

匿名网友 填写信息