如何判断存不存在内网
0x00 背景
为什么会出现没有ipconfig
/ifconfig
命令?主要是两点原因:
- 处于docker环境
- 查
/.dockerenv
文件是否存在;
- 查
- 检查
/proc/1/cgroup
内是否包含”docker”等字符串;
- 检查
- 检查是否存在
container
环境变量;
- 检查是否存在
- 查看
2375/2376
端口是否开放。
- 查看
- Linux发行版本不同
![图片[1]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233153307-7238826b-9fce-497e-b89e-ddf001b1bc7a.png)
某次打点成功后发现没有ipconfig /all
命令,那么此时如何判断存不存在内网?
- 内网信息收集的思路(不要一上来就用fscan扫描)
- 先在拿下的机器看 网卡信息、history 历史命令、netstat 端口信息、arp表、ps 进程、host文件、配置文件等,收集已控机器所通的其它内网网段信息。
- 在微步在线等威胁情报社区查看域名信息。
- 不存在解析IP,可能是内网才能访问的域名,尝试在已控机器上 ping 域名得到内网地址。
- 存在互联网解析IP,也可以尝试在已控机器上 ping 域名得到内网地址。
- 在微步在线等威胁情报社区查看域名信息。
- 在互联网侧的网站上,有时会有一些内网系统的跳转,比如OA系统、统一身份认证系统,点击会跳转至内网,从而获得内网地址信息。
- 通过什么洞打点成功 -> 比如泛微 -> 查看泛微配置文件,比如数据库配置文件,数据库系统可能在另一台内网服务器上,从而确认存在内网。
更多具体手法可以继续往下看:
如何在不使用扫描器的情况下发现更多主机呢?
**以下部分主要来自 **内网渗透之内网主机发现技巧 @信安之路
(补充了一点)
0x01 确定IP段
通常内网地址分三段:10.0.0.0/8、172.16.0.0/12以及192.168.0.0/16。在没有做任何操作之前,我们可以大概知道内网的IP地址段,不过也有些公司,在内网又会有公网IP的情况,也就是说在内网中可以访问到的IP段有很多。
下面就主要介绍一下收集IP段的方式。
查看本机的IP地址
Windows下使用:
ipconfig /all
![图片[2]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233855167-bb397101-4961-423f-ba6f-47d209974d9a.png)
Linux下使用:
ifconfig -a
ip addr
cat /etc/sysconfig/network-scripts/ifcfg-eth0 #centos
查看路由表
Windows下使用:
route print
![图片[3]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233400493-0742c90d-f9e8-452d-a2b5-f7220e3ab27f.png)
linux下使用:
route -n
![图片[4]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233400215-c4d98f8c-b1e1-46a4-b7ad-36798faba362.png)
查看本地连接信息
Windows下执行:
netstat -ano
![图片[5]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233855206-10f25ee6-bf27-4208-a44b-67fa87acfba1.png)
linux下执行:
netstat -anp
![图片[6]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233401015-f2d0d794-446f-4385-852e-f56250e81d6c.png)
利用net命令
Windows 查看一个计算机上共享资源的列表。我们从这个资源列表可以获取到一些主机名,然后解析出IP地址,这样不光收集到了一些存活主机,而且还收集了一些IP段。
net view
![图片[7]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233855308-66e9a7fd-ea8b-42e0-8a2d-f39bfeb9faf4.png)
Windows 查看管理员的登录IP(如果管理员登录在线)
net session
![图片[8]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233403139-ddb2863a-9ee3-46d4-869d-b102ae0d58f3.png)
linux 查看管理员的登录IP
who
![图片[9]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233402263-771aa257-a253-464f-8fd2-9f167f51bda4.png)
与上面同样的原理,我们可以远程列出像文件服务器上连接的用户信息,可以使用工具 netsess.exe
来远程列举,命令如下:
netsess.exe -h dc01 或 netsess.exe \dc01
结果如图:
![图片[10]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233404657-c46be044-9885-4b57-af4a-d8d246a19350.png)
利用dns信息
当我们进入内网的时候,应该先探测一下内网的dns服务是否存在dns域传送漏洞,如果存在,我们就可以剩下很多时间并且可以获取非常全的域名列表,这个列表基本很全的包含了内网所有的存活主机。如何探测dns域传送请点我。
如果不存在dns域传送漏洞,在我们收集了一定的主机名之后,我们可以根据主机名的命名规则生成一份主机名字典,然后使用dns解析这些名字,获得IP之后,再根据IP确定IP段。
利用域信息
如果我们已经获取到一台域内的主机权限,那么我们就可以访问域内的所有信息,这时就可以通过域控制器查询加入域中的所有主机信息,可以使用如下命令获取:
dsquery computer
dsquery server
net view /domain:域名
获得主机以及服务器列表后,解析其IP获取IP段信息。
![图片[11]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233852154-a9bde8c6-dcb1-4006-b226-5cd4191a7e5f.png)
利用SSH日志信息
cat /var/log/auth.log
![图片[12]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233148357-eb902277-e975-4028-819b-701688e1dcaf.png)
利用历史命令
linux:
history
cat /home/username/.bash_history
cat /root/.bash_history
Windows:
(by pen4uin)
PowerShell命令历史记录
— 类似Linux下的
.bash_history
文件位置如下:
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
![图片[13]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233405251-008a51e7-52a7-4ebe-91b2-8ee9ec165078.png)
使用arp命令
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。在解析过IP之后会保存在本地的arp表中,所以使用以下命令可以查看本地的arp缓存表,从中获取到一些IP信息。
Windows:
arp -a
![图片[14]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233854988-a07791c6-0416-4219-8f23-59522c7dbd64.png)
Linux:
arp -a
![图片[15]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233406171-53687b22-8521-435e-950c-c00534064a2c.png)
通过查看文件的方式更加清晰:
cat /proc/net/arp
![图片[16]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233147345-0077c251-c8dd-417d-8a8d-f7d9e0b1261c.png)
使用nbtstat
NBTSTAT
命令可以用来查询涉及到 NetBIOS
信息的网络机器。首先看一下帮助信息:
![图片[17]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233852364-97134881-2289-4805-a4ea-8289ad80aec3.png)
可以使用如下命令查看缓存信息:
nbtstat -c
![图片[18]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233852398-1a340308-7459-4c95-9333-61c670018ff2.png)
查看本地的hosts文件
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联”数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。查看文件内容可以用下面的命令:
Windows:
type c:\Windows\system32\drivers\etc\hosts
![图片[19]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233406866-0d0c9c37-8248-4878-a587-ccb8334c6e1f.png)
Linux:
cat /etc/hosts
![图片[20]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233407182-af826057-7bec-44f3-b63a-dfceea2cf161.png)
查看本地dns缓存
dns缓存中存在我们解析过的域名信息,当然,也会存在内网中的域名信息,所以查看这些信息也有助于我们发现内网的IP段。
Windows:
ipconfig /displaydns
![图片[21]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233852584-6d8a24f8-795b-4be9-8ea8-afcd5c26e838.png)
Linux下需要安装 nscd
并且配置它才能缓存dns信息,所以这里就不做介绍。
查看本地用户的连接信息
这种方式就是收集用户的使用软件的连接记录,像vpn、filezilla、securecrt、winscp、putty等需要远程连接的软件。
其他linux下的命令
findsmb
![图片[22]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233408207-2ca5601c-7a35-42f6-ada8-9bff086ab05b.png)
ip neigh show
![图片[23]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233407991-117918ac-0c9c-45f7-8d79-0097c4962769.png)
smbtree
以及 smbclient -L 192.168.7.42
![图片[24]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233852720-cef35dc8-535e-46f4-8044-63b2b37e031b.png)
0x02 如何扫描IP段发现存活主机
在Windows或者linux下都有一个命令:ping
,这个命令的功能就是为了网管员在配置完网络后用来探测网络连通性的,我们可以利用这个工具,写一些简单脚本来批量探测主机是否存活,虽然速度慢点,但是安全可靠,不易被识别。
ping扫描
Windows下可以使用:
ping -n 1 127.0.0.1
linux下使用:
ping -c 1 127.0.0.1
知道核心命令之后,可以编写一个批量扫描的脚本来完成这个操作。
(by Tuuu Nya)
@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])
)
)
探测局域网C段存活主机
for /l %i in (1,1,255) do @ping 192.168.183.%i -w 1 -n 1|find /i "ttl="
![图片[25]-如何判断shell主机存不存在内网-李白你好](https://user-images.githubusercontent.com/84888757/233853064-ad48a8fd-03e2-47d3-877f-71aad1fa94cb.png)
0x03 扫描工具
在确定内网中存在的IP段之后,我们需要扫描判断哪些主机存活,这样才能进一步的渗透,除了上面通过ping扫描,还可以借助工具。
fscan
nbtscan
nbtscan是一个扫描WINDOWS网络 NetBIOS
信息的小工具,下载地址:
http://unixwiz.net/tools/nbtscan.html
可以使用以下命令来发现主机:
nbtscan-1.0.35.exe 192.168.183.0/24
kali自带 nbtscan
工具,可在做代理后进行内网信息收集。
netdiscover
netdiscover是基于ARP的网络扫描工具,kali下自带这个工具,可以使用如下命令扫描:
netdiscover -r 192.168.183.0/24
nmap
nmap 是非常强大的端口扫描工具,可以使用以下命令扫描存活主机:
nmap -n -Pn -T5 -sS 192.168.183.0/24
0x04 参考链接
- https://www.hackersb.cn/hacker/44.html
- 内网渗透之内网主机发现技巧
- https://github.com/reidmu/sec-note/blob/main/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E5%AD%98%E4%B8%8D%E5%AD%98%E5%9C%A8%E5%86%85%E7%BD%91.md
- 最新
- 最热
只看作者