内网基础

内网基础

前置知识

内网定义

image-20240819161432403

内网渗透分类

image-20240819161545743

简单架构

image-20240819161857880

DMZ中存放一些对外的服务

内网常用概念

工作组

image-20240819162117942

image-20240819162242979

活动目录(AD)

image-20240819164153657

域权限

image-20240819164418840

域控制器(DC)

image-20240819164915764

内网渗透的攻击目标就是DC

其他

image-20240819162602713

AGDLP策略

image-20240819164451292

image-20240819164626475

相关操作

判断工作环境

高级系统设置中–>计算机名

image-20240819163058229

看到是工作组环境

在属性里面也可以看到

添加到域

高级系统设置中–>计算机名–>更改

image-20240819163320338

渗透流程

  • 信息收集
  • 权限提升
  • 横向移动
  • 权限维持
  • 清理痕迹

信息收集

image-20240819165810565

主要就是敲命令和用工具

Windows信息收集

一、本机信息

1、系统程序

收集系统信息,包括操作系统版本,已安装补丁列表等。通常使用以下方法收集:

net config workstation # 查询简易系统信息

systeminfo # 查询全部内容

wmic qfe get Caption,Description,HotFixID,InstalledOn # 查询已安装的补丁列表

注:其中systeminfo命令查询内容最全,但如果系统更新的补丁较多,可能会导致反应反应时间过长;使用 webshell 执行此命令可能会因为超时导致无法正常回显,或回显内容长度过长,无法全部显示。

2、进程服务
a.进程查看

tasklist /v # 查询正在运行的进程

wmic product get name,version # 查询所有安装过的软件及版本

powershell “Get-WmiObject -class Win32_Product |Select-Object -Property name,version”

# 使用 powershell 查询所有安装过的软件及版本,效果和 wmic 相同

wmic service list brief # 查询当前机器的服务信息

wmic startup get command,caption # 查看启动项

schtasks /query /fo LIST /v # 查看任务计划

windows 自带防火墙及特殊过滤规则等网络访问均可使用netsh及相关命令查看。

netsh firewall show config # 查看防火墙信息,但 firewall 命令已 弃用,可使用 advfirewall 命令代替

netsh advfirewall firewall show rule name=all # 查看配置规则

netsh advfirewall set allprofiles state off\on # 关闭防火墙\开启防火墙

netsh advfirewall export\import xx.pol # 导出\导入配置文件

netsh advfirewall firewall add rule name=”deny tcp 139″ dir=in protocol=tcp localport=139 action=block # 新建规则阻止TCP协议139端口

netsh advfirewall firewall add rule name=”Remote Desktop” protocol=TCP dir=in localport=3389 action=allow # 新建规则允许3389通过防火墙

netsh advfirewall firewall delete rule name=Remote Desktop # 删除名为Remote Desktop的规则

netsh interface # 连接安全规则配置,很少配置。

b.用户信息

whoami # 当前用户

quser # 查询登录用户,同 query user

qwinsta # 查询登录用户,同 query user

query user # 查询登录用户

query session # 查询会话

query termserver # 查询远程桌面主机列表。

net accounts # 查询域密码策略

net user # 查询本地用户列表

net user “$username” # 查询指定用户

net localgroup # 查询本地用户组列表

net localgroup “$groupname” # 查询指定用户组成员

net group # 仅域控可执行,查询用户组列表

net group “$groupname” # 仅域控可执行,查询用户组成员

注:quser、qwinsta和query命令只存在于允许安装 RDP 服务的主机上,官方描述其仅存在于 server 2012 及以上版本存在。其中query termserver命令存在问题,本地测试时与描述严重不符,无法列出信息。

c.操作记录

cmd 和 powershell v3 以下的操作记录无法长时间保存,仅限当前窗口。

Get-History | Format-List -Property * # 查询 powershell 当前窗口历史操作记录

Clear-History # 删除 powershell 当前窗口历史操作记录

Clear-History -Id 3 # 删除 powershell 当前窗口指定 ID 的历史操作记录

doskey /h # 查看 cmd 的历史操作记录

doskey /reinstall # 删除 cmd 的历史操作记录

可以通过向进程发送键盘内容的方式将运行中的窗口历史操作记录导出。

powershell v5 以上的操作历史记录会直接保存在指定文件中。直接查看即可。

# 查看 powershell 历史操作记录

type %appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

powershell v3、v4 版本需要安装Get-PSReadlineOption。

msiexec /q /i PackageManagement_x64.msi

二、网络发现

内网网络发现是一个很重要的信息收集内容,一般情况下是不建议使用扫描器扫描,尤其不建议使用 nmap,当然,如果是靶场,或是甲方授权就另当别论。

for /L %I in (1.1.245) DO @ping -w l -n l 192.168.0.%l | findstr "TTL=" ping命令 探测存活主机 192.168.0.几的

1、基本信息收集

ipconfig /all # 列出当前主机详细网络信息

ipconfig /displaydns # 列出dns缓存信息

route print # 查询路由表

arp -a # 地址解析协议缓存表

netstat -ano # 端口使用情况

net share # 查看共享信息

net view # 查看共享资源列表

wmic share get name,path,status # 查看共享信息

# 查看 host 文件

type c:\Windows\system32\drivers\etc\hosts

使用 arp 命令收集最近建立过连接的 ip,但是此方法在某些时候无法收集到网段外的 ip 地址。

2、系统日志

可以使用 wevtutil.exe psloglist.exe 或者 powershell 的Get-WinEvent模块进行日志导出,server 03 的域控可使用 eventquery.vbs 导出。

wevtutil 不需要 UAC, 支持很多过滤语法,若有需要请查看官方说明。

# 查询登录日志语法

wevtutil qe security /f:text /q:*[System[(EventID=4624)]]

# 查询所有登录、注销相关的日志语法

wevtutil qe security /rd:true /f:text /q:”*[system/eventid=4624 and 4623 and 4627]”

# 远程查询时在后面加入/r:computer /u:user /p:password 比如查询dc1上的登录注销日志

wevtutil qe security /rd:true /f:text /q:”*[system/eventid=4624 and 4623 and 4672]” /r:dc1 /u:administrator /p:password

#本地使用 LogParser 日志分析工具整理导出的日志,然后去除重复数据、无效数据(以 ‘$’ 结束的用户名)

LogParser.exe -i:EVT -o txt “SELECT TO_UPPERCASE(EXTRACT_TOKEN(Strings,5,’|’)) as USERNAME,TO_UPPERCASE(EXTRACT_TOKEN(Strings,18,’|’)) as SOURCE_IP FROM C:\ProgramData\log.evtx” > C:\ProgramData\log.txt

#导出域控登录日志到域控上:

wevtutil epl Security C:\ProgramData\dc.evtx /q:”*[EventData[Data[@Name=’LogonType’]=’3’] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 2592000000]]]” /r:域控IP /u:域管 /p:域管密码

3、浏览器日志

收集浏览器访问记录。

chrome

C:\Users$username\AppData\Local\Google\Chrome\User Data\Default\History

firefox

C:\UsersUndefined control sequence \AppDataname.default\places.sqlite

IE

reg query “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs” 或C:\Users$user\AppData\Local\Microsoft\Windows\History

edge, v79+:

C:\Users$user\AppData\Local\Microsoft\Edge\User Data\Default\History

v44+

C:\Users$user\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat

浏览器的历史记录文件 history,是使用 sqlite 格式记录的,直接打开是一个二进制文件,可以下载到本地破解,或者直接替换查看。

需要注意的是,edge v44+ 版本的历史记录文件在用户登录状态下是锁定的。

4、DNS 服务器记录

如果目标机器在域内,只需要按部就班收集域信息,准备域横向渗透即可。

但其中有一点单独提一下,一般在域环境中都会有一台 DNS 服务器,小企业或内网环境较小的可能会和域控为同一台,大一些的企业,多为独立的 DNS 服务器。

由于 DNS 服务器的特性,因此,在 DNS 服务器上会存在大量内网地址解析记录,如果可以获取,会极大的方便内网拓扑展开,同时很多其他主机无法到达的地址,DNS 服务器是可以到达的。

#列出 DNS 区域中当前节点的资源记录

dnscmd . /EnumZones

#列出 test.com 的信息

dnscmd . /ZoneInfo test.com

#列出 test.com 中的详细记录

dnscmd . /ZonePrint test.com

DNS 记录有正向解析和反向解析两种。

正向解析是从域名到IP,反向解析则是从 IP 到域名。

反向隔离和正向隔离相同,都会有一个对应的区域,因此,查询方式与正向记录相同。

DNS 服务器还存在域传送漏洞。可以直接获得 DNS 记录。

nslookup -type=all_ldap._tcp.dc.greyfinger.com nslookup -type=ns domain.com cmd> nslookup server dns.domain.com ls domain.com

三、域信息查询

1、基本信息收集

域信息收集,需要当前用户为域用户。本地用户无法执行域命令查询域内容。

net config workstation # 查询当前登录域

net time # 同步时间,通常为域控服务器

net accounts /domain # 查询域密码策略

net user /domain # 列出当前域成员列表

net user username /domain # 列出域成员详细信息

net group /domain # 列出域内组列表

net group groupname /domain # 列出域内组成员列表

net view # 查询同一域内机器列表

net view /domain # 查询域列表

net view /domain:test # 查询 test 域中计算机列表

nltest /dclist:domain # 查询域内的所有DC

nltest /dsgetdc:domain # 拿到DC当前的认证信息

nltest /domain_trusts # 查询域信任信息

nltest /user:”username” # 得到用户信息

想要定位域管和域控机器,可以查询domain admin和domain controllers组,需要注意的是,组名会随系统语言变化而变化,如domain controllers会变化成domaine contrôleurs。

在域内其他机器上,查询组是net group /domain,而在域控上则是net group。

2、dsquery

dsquery 命令很少使用,而且限制较大仅能在域控上执行,所以相对而言较为鸡肋,但是在一定条件下还是具有一定的使用价值。

dsquery computer # 查询目录中的计算机

dsquery contact # 查询目录中的联系人

dsquery subnet # 查询目录中的子网

dsquery group # 查询目录中的组

dsquery site # 查询目录中的站点

dsquery user # 查询目录中的用户

3、powershell

# 查询当前Domain信息[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

# 查询域信任关系([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()

# 查询当前林信息[System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()

# 查询林信任信息([System.DirectoryServices.ActiveDirectory.Forest]::GetForest((New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(‘Forest’, ‘forest-of-interest.local’)))).GetAllTrustRelationships()

四、配置文件收集

配置文件

IIS 配置文件路径为:

%windir%\system32\inetsrv\config\applicationHost.config

使用 appcmd 的方式可以快速导出所需内容:

%windir%\system32\inetsrv\appcmd list site /config %windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml

image-20240819180117583

SecureCRT

image-20240819180131406

Xshell

image-20240819180147126

VNC

image-20240819180202863

自动化工具

wmic_info

wmic_info

把这个软件上传到目标主机

该脚本可以在目标机器上面完成服务。用户列表,用户组、网络接口、硬件信息、网络共享信息、操作系统、安装的补丁、安装的软件、自启程序、时区等信息的查询工作。其利用WMIC来收集信息。执行脚本后,会将所有结果写入一个HTML文件

解压文件之后得到一个bat文件,双击运行之后会得到一个html格式的文件,打开即可

nishang

nishang

功能很全 但是要权限

教程:https://blog.csdn.net/weixin_40412037/article/details/115510209

get-executionpolicy 查看执行权限

Restricted:默认设置,不允许执行任何脚本
Allsigned:只能运行经过证书验证的脚本
Unrestricted:权限最高,可以执行任意脚本
RemoteSigned:对本地脚本不进行限制;对来自网络的脚本必须验证其签名

set-executionpolicy Unrestricted 修改执行权限

import-module .\nishang.psm1 导入模块

Invoke-PortScan -StartAddress 192.168.10.133 -EndAddress 192.168.10.255 -ResolveHost -ScanPort 带参数扫描

LaZagne

LaZagne

执行可以抓密码

用法

  • Launch all modules
laZagne.exe all

  • Launch only a specific module
laZagne.exe browsers

  • Launch only a specific software script
laZagne.exe browsers -firefox

  • Write all passwords found into a file (-oN for Normal txt, -oJ for Json, -oA for All). Note: If you have problems to parse JSON results written as a multi-line strings, check this.
laZagne.exe all -oN
laZagne.exe all -oA -output C:\Users\test\Desktop

  • Get help
laZagne.exe -h
laZagne.exe browsers -h

  • Change verbosity mode (2 different levels)
laZagne.exe all -vv

  • Quiet mode (nothing will be printed on the standard output)
laZagne.exe all -quiet -oA

  • To decrypt domain credentials, it could be done specifying the user windows password. Otherwise it will try all passwords already found as windows passwords.
laZagne.exe all -password ZapataVive

Note: For wifi passwords \ Windows Secrets, launch it with administrator privileges (UAC Authentication / sudo)

Linux信息收集

我们在获取到webshell之后,经常会遇到Linux的操作系统,这是我们需要对Linux系统本地的敏感资源进行信息收集,下面就是一些有用的信息获取方式。

获取内核,操作系统和设备信息

uname -a #打印所有可用的系统信息

uname -r #内核版本信息

uname -n #系统主机名字

hostname #主机名

uname -m #Linux内核架构(x86/x64)

cat /proc/version #内核信息

cat /etc/*-release #发布信息

cat /etc/issue #发布信息

cat /proc/cpuinfo #CPU信息

df -a #文件系统信息

用户和组

cat /etc/passwd 列出系统所有用户

cat /etc/group 列出系统所有组

cat /etc/shadow 列出所有用户hash(需要root权限)

users 当前登录的用户

who -a 当前登录的用户

w 显示目前登入系统的用户有那些人,以及他们正在执行的程序

last 显示登入过的用户信息

lastlog 显示系统中所有用户最近一次登录信息

lastlog 显示指定用户最后一次登入信息

用户和权限信息

whoami 当前用户

id 当前用户信息

cat /etc/sudoers 可以使用sudo提升到root的用户(需要root权限)

sudo 允许普通用户执行一些或者全部的root命令的一个工具

sudo -l 列出目前用户可执行与无法执行的指令

su 切换当前用户身份到其他用户身份

环境信息

env 打印系统环境信息

set 打印系统环境信息

echo $PATH 环境变量中的路径信息

history 打印历史命令

pwd 显示当前路径

cat /etc/profile 显示默认系统遍历

cat /etc/shells 显示可用的shell

有用的命令

find / -perm -4000 -type f 查找SUID的文件

find / -uid 0 -perm -4000 -type f 查找root权限的SUID文件

find / -perm -2 -type f 找出可写的文件

find / ! -path “/proc/“ -perm -2 -type f -print 查找/proc以外的可写文件

find / -perm -2 -type d 找出可写目录

find /home –name *.rhosts -print 查找rhosts的配置文件

find /home -iname *.plan -exec ls -la {} ; -exec cat {} 查询文件并打印

ls -ahlR /root/ 查看是否有权限列用户目录

cat ~/.bash_history 查看当前用户的历史记录

ls -la ~/.*_history 查看当前用户的各种历史记录

ls -la ~/.ssh/ 查看用户ssh登录信息

ls -la /usr/sbin/in.* 检查inetd服务的配置

grep -l -i pass /var/log/*.log 查询包含pass的日志并打印匹配到的行

ls -la /etc/*.conf 列出/etc/下的所有配置文件

lsof -i -n 列出打开的文件

head /var/mail/root 答应/var/mail/root的开头

服务信息

ps aux 查看进程信息

cat /etc/inetd.conf 由inetd管理的服务列表

cat /etc/xinetd.conf 由xinetd管理的服务列表

cat /etc/exports nfs服务器的配置

作业和任务

crontab -l -u %username% 显示指定用户的计划作业(需要root权限)

ls -la /etc/cron* 计划任务

top 列出当前进程

网络、路由和通信

/sbin/ifconfig -a 列出网络接口信息

cat /etc/network/interfaces 列出网络接口信息

arp -a 查看系统arp表

route 打印如有信息

cat /etc/resolv.conf 查看dns配置信息

netstat -an 打印本地端口开放信息

iptables -L 列出iptable的配置规则

cat /etc/services 查看端口服务映射

软件信息

dpkg -l 软件安装(Debian)

rpm -qa 软件安装(Red Hat

sudo -V 查看sudo的版本信息

httpd -v 查看apache的版本信息

apache2 -v 查看apache的版本信息

apache2ctl (or apachectl) -M 列出加载的apache模块

mysql –version mysql的版本信息

psql -V Postgres数据库的版本信息

perl -v perl的版本信息

java -version java的版本信息

python –version python的版本信息

ruby -v ruby的版本信息

find / -name %program_name% 查找有用的软件

which %program_name% 查找有用的软件

cat /etc/apache2/envvars 查看运行apache的帐号