广州睿东网络科技有限公司是国内最专业的香港空间,云主机,香港VPS,香港服务器租用提供商,专注为国内站长提供高速且稳定的香港空间,云主机,香港VPS,香港服务器租用,欢迎您的选购!
当前位置:首页 -> 香港主机 -> 香港空间

如何用golang实现一个简单的socks代理服务器

云服务器 34℃ 1892评论

如何用golang实现一个简单的socks代理服务器

前言

在渗透测试的时候,burp是传说中的神,也一直是大家所喜欢的工具之一。不过由于它的功能繁多,对我们来说就不太适合做更多调整。今天小编带大家来实现一个小型的代理服务器,大家在此基础上稍微做一下修改,也可以成为很美好的神器哦。看着下面短短的代码,你是不是也特别想跟小编一起学习学习golang带来的乐趣呢。

实现

小编在这里使用的时golang来实现一个简单的代理服务器,首先看主要的代码如下:

//Proxy
func Proxy(w http.ResponseWriter, r *http.Request) {
    var (
        resp *http.Response
        data []byte
        err  error
    )
    r.RequestURI = ""
    r.ParseForm()
    Regselect(r.URL.String())
    resp, err = http.DefaultClient.Do(r)
    if err != nil {
        http.NotFound(w, r)
        return
    }
    //fmt.Println(resp.Request.URL.String())
    data, err = ioutil.ReadAll(resp.Body)
    if err != nil && err != io.EOF {
        http.NotFound(w, r)
        return
    }
    //Regselect(resp.Request.URL.String())
    for i, j := range resp.Header {
        for _, k := range j {
            w.Header().Add(i, k)
        }
    }
    _, ok := resp.Header["Content-Length"]
    if !ok && resp.ContentLength > 0 {
        w.Header().Add("Content-Length", fmt.Sprint(resp.ContentLength))
    }
    w.WriteHeader(resp.StatusCode)
    w.Write(data)

}

在这里小编做一次简单的过滤,为了之后更好的做渗透测试

func Regselect(url string) {
    exti["gif"] = "gif"
    exti["jpg"] = "jpg"
    exti["js"] = "js"
    exti["png"] = "png"
    exti["css"] = "css"
    exti["html"] = "html"
    exti["htm"] = "htm"
    exti["ico"] = "ico"
    exti["swf"] = "swf"
    exti["shtml"] = "shtml"
    exti["json"] = "json"
    exti["webp"] = "webp"
    exti["ttf"] = "ttf"
    exti["jpeg"] = "jpeg"
    exti["PNG"] = "PNG"
    exti["txt"] = "txt"
    weburl := strings.Split(url, "?")
    shuju := strings.Split(weburl[0], ".")
    if len(shuju) > 0 {
        i := len(shuju) - 1
        if len(shuju[i]) < 6 {
            if _, ok := exti[shuju[i]]; ok {//过滤文件后缀

            } else {
                if len(weburl)>0{
                    if k, ok := Urlchongfi[weburl[0]]; ok {//过滤已经扫描的信息
                        if len(weburl)>1{
                            if len(k)<3{
                                Urlchongfi[weburl[0]]=weburl[1]//保存要扫描的信息
                                fmt.Println(url)//打印要扫描的信息
                            }
                        }
                    } else {
                        if len(weburl)>1{
                            Urlchongfi[weburl[0]]=weburl[1]//保存要扫描的信息
                            fmt.Println(url)//打印要扫描的信息
                        }else{
                            Urlchongfi[weburl[0]]=""
                            fmt.Println(url)
                        }
                    }        
                }                

            }

        }
    }

具体的效果如下图:


总结

渗透测试不仅仅只是工具的使用,我们同样也可以慢慢的去动手一步一步的实现我们想要的功能。虽然这些功能看起来很简单,但是却非常实用。在此代理的基础上我们可以添加sqlmap api来进行sql注入检测,也可以直接抓出可疑的存在sql注入的url进行awvs来检测。

这里仅仅只是开始,让我们一起踏上漫漫征程。。。

喜欢我们,就长按下面的二维码关注我们吧。


投诉
喜欢 (1892)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: