事情起因

本文资料来源:micropoor:https://micropoor.blogspot.com

本篇文章将亮神的资料尽可能全部复现一遍

快速扫描内网存活主机,这是刚需,一般有以下几种方式:

1.基于UDP0
2.基于ARP
3.基于netbios
4.基于snmp
5.基于ICMP
6.基于SMB
7.基于MSF
8.基于SqlDataSourceEnumerator

那么我们的工具主要是使用nmap和metasploit以及其他的一些优秀工具

重要提示:由于本文篇幅超长,没有太强的可阅读性,请当作手册来使用,善用目录!

环境准备

(19-02-23更新)后来觉得自己环境选的有问题,可能用桥接方式效果会好得多


我们这里用virtualbox开了两个机子

Kali(NAT+Hostonly):192.168.2.6

Winxp_SP3(Hostonly):192.168.2.4

那么所有工具在我没有打开虚拟机之前都只能扫描到192.168.2.1这一个网关地址,打开虚拟机之后除了虚拟机的地址,还有一个dhcp服务器地址:192.168.2.2

实测

基于UDP

UDP简介:

UDP(User Datagram Protocol)是一种无连接的协议,在第四层-传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP显著特性:

1.UDP 缺乏可靠性。UDP 本身不提供确认,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序,也不保证每个数据报只到达一次。
2.UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任何(协议上的)记录边界。
3.UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系。大多数的UDP实现中都选择忽略源站抑制差错,在网络拥塞时,目的端无法接收到大量的UDP数据报
4.UDP 支持多播和广播。

nmap

nmap -sU -T5 -sV --max-retries 1 192.168.2.4 -p 500

可以看到速度非常慢

msf

use auxiliary/scanner/discovery/udp_probe

use auxiliary/scanner/discovery/udp_sweep

unicornscan扫描

linux下使用推荐:unicornscan -mU 192.168.2.4

ScanLine扫描

  • 项目地址:www.mcafee.com/us/downloads/free-tools/termsofuse.aspx

McAfee出品,win下使用推荐。管理员执行,(估计是已经不再提供下载了,点击下载按钮无限循环)

从这里下载的:http://www.ddooo.com/softdown/11258.htm,我自己查毒virustotal,百分之八十报毒,腾讯哈勃未发现风险,自行斟酌

ScanLine.exe 192.168.2.4

附:在线基于Nmap的UDP扫描:https://pentest-tools.com/network-vulnerability-scanning/udp-port-scanner-online-nmap

基于ARP

ARP简介:ARP,通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址

nmap扫描

nmap -sn -PR 192.168.2.1/24

msf扫描

use auxiliary/scanner/discovery/arp_sweep

注意:默认没有设置网卡,需要手动设置一下

netdiscover

netdiscover -r 192.168.2.1/24 -i eth1

arp-scan(linux)

(推荐)速度与快捷

arp-scan --interface=eth1 --localnet

Powershell

使用PowerShell Empire工具包中的Invoke-ARPScan.ps1,Github地址

复制粘贴下来保存为Invoke-ARPScan.ps1,powershell进入该文件所在文件夹执行以下指令:

powershell.exe -exec bypass -Command "Import-Module ./Invoke-ARPScan.ps1;Invoke-ARPScan -CIDR 192.168.2.1/24"

arp scannet

下载地址:https://sourceforge.net/projects/arpscannet/files/latest/download

勾选上排序输出,可以看到活跃的主机后面的值不为空

arp-scan(windows)

(推荐)速度与快捷

Github地址(非官方):https://github.com/QbsuranAlang/arp-scan-windows-/tree/master/arp-scan

arp-scan.exe -t 192.168.2.1/24

arp-ping.exe

下载地址(网上随便找的):https://elifulkerson.com/projects/arp-ping.php

检测报毒virustotal只有一个报毒,腾讯哈勃未发现风险

arp-ping.exe 192.168.2.4

其他

如cain的arp发现,一些开源py,pl脚本等,不一一介绍。

基于netbios

netbios简介:

IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的同一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使
用NetBIOS协议可以方便地实现消息通信及资源的共享。

nmap扫描

nmap -sU --script nbstat.nse -p137 192.168.2.1/24 -T4

msf扫描

use auxiliary/scanner/netbios/nbname

nbtscan扫描

项目地址:http://www.unixwiz.net/tools/nbtscan.html

nbtstat -n (推荐)

nbtscan-1.0.35.exe -m 192.168.2.1/24

  • Liunx

(推荐)下载Source (gzip'd tarball)

tar -zxf nbtscan-source-1.0.35.tgz
make
nbtscan -r 192.168.2.1/24

nbtscan -v -s: 192.168.2.1/24

NetBScanner

项目地址:https://www.nirsoft.net/utils/netbios_scanner.html

下载按钮在这(找了半天),可以把语言包放到安装目录里,设置扫描网段:

基于snmp

SNMP简介:

SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

nmap -sU --script snmp-brute 192.168.2.1/24 -T4

msf扫描

use auxiliary/scanner/snmp/snmp_enum

SNScan

macafee出品的扫描工具,项目地址(依然无限循环):https://www.mcafee.com/us/downloads/free-tools/snscan.aspx

我在网上找了一个1.05版本,virustotal一个都没报毒,腾讯哈勃未发现风险:点我去下载

NetCrunch

内网安全审计工具,包含了DNS审计,ping扫描,端口,网络服务等。

下载安装完还需Google或者Facebook或者Microsoft账户登陆

snmp for pl扫描

./snmpbw.pl执行的Can't locate NetAddr/IP问题:

wget https://cpan.metacpan.org/authors/id/M/MI/MIKER/NetAddr-IP-4.079.tar.gz
tar xzf ./NetAddr-IP-4.079.tar.gz
cd NetAddr-IP-4.079/
perl Makefile.PL
make
make install
cd ../
./snmpbw.pl

其他扫描

  • snmpbulkwalk

  • snmp-check

  • snmptest

附录:

use auxiliary/scanner/snmp/aix_version
use auxiliary/scanner/snmp/snmp_enum
use auxiliary/scanner/snmp/arris_dg950
use auxiliary/scanner/snmp/snmp_enum_hp_laserjet
use auxiliary/scanner/snmp/brocade_enumhash
use auxiliary/scanner/snmp/snmp_enumshares
use auxiliary/scanner/snmp/cambium_snmp_loot
use auxiliary/scanner/snmp/snmp_enumusers
use auxiliary/scanner/snmp/cisco_config_tftp
use auxiliary/scanner/snmp/snmp_login
use auxiliary/scanner/snmp/cisco_upload_file
use auxiliary/scanner/snmp/snmp_set
use auxiliary/scanner/snmp/netopia_enum
use auxiliary/scanner/snmp/ubee_ddw3611
use auxiliary/scanner/snmp/sbg6580_enum
use auxiliary/scanner/snmp/xerox_workcentre_enumusers

其他内网安全审计工具(snmp):

基于ICMP

ICMP简介:

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

nmap扫描:

nmap ‐sP ‐PI 192.168.2.1/24 ‐T4

nmap ‐sn ‐PE ‐T4 192.168.2.1/24

CMD下扫描

for /L %P in (1,1,254) DO @ping ‐w 1 ‐n 1 192.168.2.%P | findstr "TTL="

我用的可能是个假的cmd,半天没反应

powershell扫描

Invoke‐TSPingSweep.ps1下载:GitHub地址

powershell.exe -exec bypass -Command "Import-Module ./Invoke‐TSPingSweep.ps1; Invoke-TSPingSweep -StartAddress 192.168.2.1 -EndAddress 192.168.2.254 -ResolveHost -ScanPort -Port 445,135"

tcping

又在elifulkerson这个网站上找到了:下载地址

tcping64.exe -n 1 192.168.2.1 80

cping(19-02-23更新)

cping由K8团队出品,详细介绍:https://www.cnblogs.com/k8gege/p/10367844.html

博客里很详细就不重新介绍,下载地址(搬运过来解压重新打包):https://www.lanzous.com/i3837ne

包内有如下文件:

cping.exe 代表.net编译版本,系统默认.NET版本如下:

XP/2003(已淘汰,用户少,使用的大部分也会装.net,因为好多app需要连驱动都要.net,具体看安装版本一般2.0)

Vista       2.0(基本上也没多少用户)
Win7/2008   2.0 3.0 3.5
Win8/2012   4.0
Win8.1      4.0 4.5
Win10/2016  4.0 4.6 (4.5未测应该也行)

扫描我内网机子演示图:

基于SMB

基于msf

模块:auxiliary/scanner/smb/smb_version

基于cme

这样安装之后不能执行cme smb:

apt-get install cme
apt-get install crackmapexec

所以我们使用pipenv安装:

apt-get install libssl-dev libffi-dev python-dev build-essential -y
pip install --user pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple/
git clone --recursive https://github.com/byt3bl33d3r/CrackMapExec
cd CrackMapExec && pipenv install

此时可能会遇到bash:pipenv:未找到命令错误,出现以上问题,需要进行一下操作
vim ~/.profile,在底部添加以下语句:

PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
PATH="$PATH:$PYTHON_BIN_PATH" 

然后source ~/.profile之后pipenv就可以用了:

然后继续:

pipenv shell
python setup.py install

环境创建完成,此时就可以使用cme smb命令了(不要退出当前环境,否则从cd CrackMapExec && pipenv install这步重新开始)

cme smb 192.168.2.1/24

基于nmap

nmap ‐sU ‐sS ‐‐script smb‐enum‐shares.nse ‐p 445 192.168.2.1/24

我这没配置好,啥都查不到

基于CMD

如果cmd里面输入telnet显示不是内部或外部命令,也不是可运行的程序或批处理文件的:

去控制面板卸载程序页面左边有个启用或关闭windows功能,里面有个Telnet客户端选项卡,勾选上应用就行:

for /l %a in (1,1,254) do start /min /low telnet 192.168.2.%a 445

会打开254个telnet页面,连接192.168.2.1到192.168.2.254的445端口,如果有主机的445端口能连接上,则会留下来,其他的会全部自动关闭掉:

基于powershell

  • 一句话扫描:

    • 单IP:
445 | %{ echo ((new‐object Net.Sockets.TcpClient).Connect("192.168.2.7",$_)) "$_ is open"} 2>$null

不知道为啥没扫到

  • 多ip:
1..5 | % { $a = $_; 445 | % {echo ((new‐objectNet.Sockets.TcpClient).Connect("192.168.2.$a",$_)) "Port $_ is open"} 2>$null}

这个也没扫到

多port,多IP:

118..119 | % { $a = $_; write-host "‐‐‐‐‐‐"; write-host "192.168.2.$a"; 80,445 | % {echo ((new‐object Net.Sockets.TcpClient).Connect("192.168.2.$a",$_)) "Port $_ is open"} 2>$null}

emmm,没配置好,一个都没扫出来

基于MSF

此部分为了获得更好的扫描结果,我们会灵活切换几台主机以及临时增加一些服务,靶机有以下几台:

  • WinXP_SP3:192.168.2.4
  • Win7_SP1(以后简称win7):192.168.2.7
  • Ubuntu Desktop 18.04 LTS(以后简称ud18lts):192.168.2.18
  • msf所在的机器:Kali:192.168.2.6

MSF的search支持type搜索:

我们要介绍的是以下二十个:

auxiliary/scanner/http/http_version
auxiliary/scanner/smb/smb_version
auxiliary/scanner/ftp/ftp_version
auxiliary/scanner/discovery/arp_sweep
auxiliary/scanner/discovery/udp_sweep
auxiliary/scanner/ssh/ssh_version
auxiliary/scanner/telnet/telnet_version
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/dns/dns_amp
auxiliary/scanner/mysql/mysql_version
auxiliary/scanner/netbios/nbname
auxiliary/scanner/http/title
auxiliary/scanner/db2/db2_version
auxiliary/scanner/portscan/ack
auxiliary/scanner/portscan/tcp
auxiliary/scanner/portscan/syn
auxiliary/scanner/portscan/ftpbounce
auxiliary/scanner/portscan/xmas
auxiliary/scanner/rdp/rdp_scanner
auxiliary/scanner/smtp/smtp_version

基于http/http_version发现发现HTTP服务

  • 开启http服务

我们在win7上开启了phpstudy服务,在ud18lts上开启了apache2默认界面:

  • 用msf扫描

use auxiliary/scanner/http/http_version

基于smb/smb_version发现SMB服务

  • 搭建一个samba服务器

临时在ud18lts用docker搭建一个samba服务器,参考文章:https://www.cnblogs.com/geekmao/p/7873338.html

Docker在Ubuntu中的安装参考我之前写的文章:https://www.soapffz.com/sec/99.html

我们拉取一个samba服务器镜像:docker pull dperson/samba,然后按照教程映射端口:

docker run -it --name samba -p 139:139 -p 445:445 -v /home:/mount -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group -d dperson/samba -s "www;/mount/;yes;no;no;all;none"

我们就到这一步,其他的有兴趣可以按照教程继续下去,其他的教程也可参考这个镜像的官方文档:https://github.com/dperson/samba

  • 用msf扫描

use auxiliary/scanner/smb/smb_version

可以看到我们搭建的samba服务器,只扫出了端口信息,其他什么信息都没有扫出来

基于ftp/ftp_version发现FTP服务

  • win7上开启ftp服务

挂载上这个系统安装时的ISO镜像

在打开或关闭Windows功能中的Internet信息服务中,开启FTP服务器的全部服务和WEB管理工具中的IIS管理控制台

然后win+r输入compmgmt.msc快捷打开计算机管理界面,展开“服务和应用程序”,点击“Internet信息服务(IIS)管理器”,后右键点击“网站”打开,选择“添加FTP站点”:

然后自定义站点信息:FTP站点名称为win7_ftp

IP地址选择本机IP,端口可以自行设定,SSL选择“允许”,然后下一步:

身份验证选择“基本”,授权选择“所有用户”(即这台计算机现存的所有有效账户都可以登录),权限设置“读取”和“写入”:

我们的ftp站点就添加完了,打开Windows资源管理器或者浏览器输入“ftp://IP:Port”,弹出登录对话框:

输入账号密码即可登陆,如果你的连接不上的话,可能是你的防火墙没有关闭,在控制面板的“Windows防火墙”这个界面的左边有一个“允许程序或功能通过Windows防火墙”选项:

点击去把FTP服务器的选项都选上即可:

注意:FTP若没有开启匿名登陆的话是必须要密码的,像我的win7直接使用的Administrator账户没有设置密码就无法登陆FTP服务,实际使用中一定要记得给ftp账户设置密码,我们这里只是为了做ftp服务扫描测试就不继续下去了

win7安装ftp服务参考文章:https://www.cnblogs.com/liangxuru/p/6148212.html

  • ud18lts上开启ftp服务

用ud18lts的docker拉取一个镜像:docker pull fauria/vsftpd,并使用语句:

docker run -d -v /home/vsftpd:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=test -e FTP_PASS=test --name vsftpd fauria/vsftpd

搭建ftp服务器,会以登录用户名 (test) 创建一个目录 (/home/vsftpd/test) 作为 ftp 根目录

  • 用msf来扫描

use auxiliary/scanner/ftp/ftp_version

基于discovery/udp_sweep发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/discovery/arp_sweep

基于udp_sweep

  • 用msf扫描

use auxiliary/scanner/discovery/udp_sweep

基于ssh/ssh_version发现SSH服务

这里就不在win7开启SSH服务了,谁没事用SSH访问Windows系统,都是用3389远程桌面,网上的文章针对win7开启主要有这几种工具:

Bitvise
Openssh(现在win10自带了)
freeSSHd
  • 用msf扫描

use auxiliary/scanner/ssh/ssh_version

基于telnet/telnet_version发现TELNET服务

  • Win7开启telnet服务

同样挂载好系统安装时使用的ISO镜像文件之后,去控制面板卸载程序页面左边有个启用或关闭windows功能,将Telnet服务器和客户端都勾选上:

我们用物理机win10的telnet连接这台win7发现连接不上,用win+r输入services.msc进入服务管理界面,发现telnet的服务默认是被禁用的,我们将它设置为自动,并启动此服务:

再次使用telnet连接,发现可以连接了:

同样,貌似也不能使用无密码账户登陆:

我们开启这个服务就行了

  • ud18lts安装telnet服务端

Ubuntu安装后默认只有telnet客户端,我们通过安装telnetdxinetd来实现服务器端:

apt-get install telnetd && apt-get install xinetd -y

就OK了,参考文章:https://blog.csdn.net/xkwy100/article/details/80328646

  • 用msf扫描

use auxiliary/scanner/telnet/telnet_version

这里发现了ud18lts的telnet服务:

这里发现了win7的telnet服务:

基于discovery/udp_probe发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/discovery/udp_probe

基于dns/dns_amp发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/dns/dns_amp

这个没扫到

基于mysql/mysql_version发现mysql服务

  • Win7搭建mysql服务

我们直接把phpstudy开启就行了

  • ud18lts搭建mysql服务

前面我的文章:在Ubuntu中安装docker快速搭建测试环境里面说过,用docker拉取一个mysql/5.6镜像即可:

docker pull mysql:5.6
docker run --name testmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a123456 -d mysql:5.6
docker exec -it testmysql mysql -uroot -p
输入之前设置的 root 密码 (a123456) 登录到数据库
  • 用msf扫描

use auxiliary/scanner/mysql/mysql_version

基于netbios/nbname发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/netbios/nbname

基于http/title发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/http/title

只扫到了Kali和ud18lts开的apache2服务的默认界面,看来phpstudy不适合用来演示啊,好几次都表现不好

基于db2/db2_version发现db2服务

IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。
  • ud18lts中用docker搭建d2

官方镜像文档:https://hub.docker.com/r/ibmcom/db2express-c/
参考文章:https://dongrenwen.github.io/2018/05/07/docker-install-db2/

先拉取一个官方db2镜像:docker pull ibmcom/db2express-c,这个有必要晒一下截图了,我是万万没想到官方的db2镜像居然有这么大!

然后启动容器:

docker run --name DB2ExpressC -d -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1 -e LICENSE=accept  ibmcom/db2express-c db2start

--name DB2ExpressC 表示为为容器指定名称为 DB2ExpressC
-d 表示后台运行
-p 50000:50000 表示对外公开的端口为 50000
-e DB2INST1_PASSWORD=db2inst1 表示为默认用户 db2inst1 设置密码为 db2inst1
-e LICENSE=accept 表示同意默认的许可证信息
db2start 表示启动db2服务

安装默认实例:

进入到启动的容器中:docker exec -it DB2ExpressC /bin/bash
切换用户到 db2inst1:su - db2inst1
安装默认实例:db2sampl
连接到新创建的数据库实例:db2 connect to sample
执行 SQL 文确认环境的正常:db2 "SELECT * FROM STAFF"
通过 exit 命令退出默认用户 db2inst1
通过 exit 命令退出容器

我创建SAMPLE数据库,即执行db2sampl这一步时,创建了好几次才创建成功

  • 用msf扫描

use auxiliary/scanner/db2/db2_version

记得要把数据库名字改为SAMPLE

基于portscan/ack发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/portscan/ack

基于portscan/tcp发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/portscan/tcp

基于portscan/syn发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/portscan/syn

基于portscan/ftpbounce发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/portscan/ftpbounce

这个又扫描不出来,奇怪

基于portscan/xmas发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/portscan/xmas

基于rdp/rdp_scanner发现内网存活主机

  • win7开启3389端口

开启3389端口(cmd):

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

关闭3389端口(cmd):

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 11111111 /f

  • 用msf扫描

use auxiliary/scanner/rdp/rdp_scanner

基于smtp/smtp_version发现内网存活主机

  • 用msf扫描

use auxiliary/scanner/smtp/smtp_version

基于SqlDataSourceEnumerator

总结

最后修改:2019 年 07 月 13 日
如果觉得我的文章对你有用,请随意赞赏