标签 内网渗透 下的文章

一些Nmap NSE脚本推荐

前言

Nmap是一款强大的开源扫描工具。同时Nmap提供了强大的脚本引擎(Nmap Scripting Engine),支持通过Lua脚本语言来扩展Nmap的功能,在Nmap的发行版中已经包含了数百个扩展脚本,除了辅助完成Nmap的主机发现、端口扫描、服务侦测、操作系统侦测四个基本功能,还补充了其他扫描能力:如执行HTTP服务详细的探测、暴力破解简单密码、检查漏洞信息等等。

脚本分类及使用

分类

Nmap脚本主要分为以下几类,引用自:Nmap脚本使用总结

auth: 负责处理鉴权证书(绕开鉴权)的脚本  
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务  
brute: 提供暴力破解方式,针对常见的应用如http/snmp等  
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力  
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等  
dos: 用于进行拒绝服务攻击  
exploit: 利用已知的漏洞入侵系统  
external: 利用第三方的数据库或资源,例如进行whois解析  
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽  
malware: 探测目标机是否感染了病毒、开启了后门等信息  
safe: 此类与intrusive相反,属于安全性脚本  
version: 负责增强服务与版本扫描(Version Detection)功能的脚本  
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067

命令行选项

Nmap提供的一些命令如下:

-sC/--script=default:使用默认的脚本进行扫描。
--script=<Lua scripts>:使用某个脚本进行扫描
--script-args=x=x,y=y: 为脚本提供参数 
--script-args-file=filename: 使用文件来为脚本提供参数 
--script-trace: 显示脚本执行过程中发送与接收的数据 
--script-updatedb: 更新脚本数据库 
--script-help=<Lua scripts>: 显示脚本的帮助信息

脚本

针对性脚本

​​​收集了Github上的一些较有针对性Nmap脚本:

  • MS15-034、LFI、Nikto、ShellShock、tenda

https://github.com/s4n7h0/NSE

  • 枚举ICS程序和设备

https://github.com/digitalbond/Redpoint

  • 一些NSE脚本合集

https://github.com/cldrn/nmap-nse-scripts

  • 路由器信息收集:

https://github.com/DaniLabs/scripts-nse

  • 暴力破解

https://github.com/lelybar/hydra.nse

  • Cassandra、WebSphere

https://github.com/kost/nmap-nse

  • Scada

https://github.com/drainware/nmap-scada

  • NSE开发工具

https://github.com/s4n7h0/Halcyon

  • Hadoop、Flume

https://github.com/b4ldr/nse-scripts

  • WordPress

https://github.com/peter-hackertarget/nmap-nse-scripts

  • VNC

https://github.com/nosteve/vnc-auth

  • PhantomJS检查Http Header信息

https://github.com/aerissecure/nse

  • WebServices检测

https://github.com/c-x/nmap-webshot

  • SSL心脏滴血

https://github.com/takeshixx/ssl-heartbleed.nse

  • OpenStack

https://github.com/sicarie/nse

  • Apache、Rails-xml

https://github.com/michenriksen/nmap-scripts

  • 网关、DNS

https://github.com/ernw/nmap-scripts

  • MacOS

https://github.com/ulissescastro/ya-nse-screenshooter

  • 目录扫描、WhatCMS、漏洞检测

https://github.com/Cunzhang/NseScripting

  • Redis

https://github.com/axtl/nse-scripts

  • 华为设备检测

https://github.com/vicendominguez/http-enum-vodafone-hua253s

  • Axis​​​​

https://github.com/bikashdash/Axis_Vuln_Webcam

内网渗透

来自影牛milsec公众号的推荐

Nmap提供了许多有效的脚本,无需依赖其他第三方的工具对内网机器进行渗透测试:

  • smb-enum-domains.nse

域控制器信息收集,主机信息、用户、密码策略等

  • smb-enum-users.nse

域控制器扫描

  • smb-enum-shares.nse

遍历远程主机的共享目录

  • smb-enum-processes.nse

通过SMB对主机的系统进程进行遍历

  • smb-enum-sessions.nse

通过SMB获取域内主机的用户登录session,查看当前用户登录情况

  • smb-os-discovery.nse

通过SMB协议来收集目标主机的操作系统、计算机名、域名、全称域名、域林名称、NetBIOS机器名、NetBIOS域名、工作组、系统时间等

  • smb-ls.nse

列举共享目录内的文件,配合smb-enum-share使用

  • smb-psexec.nse

获取到SMB用户密码时可以通过smb-psexec在远程主机来执行命令

  • smb-system-info.nse

通过SMB协议获取目标主机的操作系统信息、环境变量、硬件信息以及浏览器版本等

  • ms-sql-brute.nse

收集组合字典后对域内的MSSQL机器进行破解

  • ms-sql-xp-cmdshell.nse

获得MSSQL的SA权限用户名密码时可以通过Nmap脚本来执行指定命令,可以通过SMB协议或者MSSQL来执行

  • redis.nse

爆破Redis的用户密码,可以结合写入SSH key获取服务器权限

  • oracle-sid-brute.nse

挂载字典爆破oracle的sid

  • oracle-enum-users

通过挂载字典遍历Oracle的可用用户

  • oracle-brute.nse

获取sid之后可以爆破Oracle的用户密码

  • pgsql-brute.nse

PostgreSql用户密码猜解脚本,对pgsql进行密码爆破,适当的权限下可以读写文件、执行命令,从而进一步获取服务器控制权限。

  • svn-brute.nse

对SVN服务器进行爆破,通过这些svn服务器上的内容,我们可以下载源代码,寻找一些有用的信息

工具

Nmap NSE脚本搜索引擎

  • https://github.com/JKO/nsearch

     ================================================
       _   _  _____  _____                     _
      | \ | |/  ___||  ___|                   | |
      |  \| |\ `--. | |__    __ _  _ __   ___ | |__
      | . ` | `--. \|  __|  / _` || '__| / __|| '_  |
      | |\  |/\__/ /| |___ | (_| || |   | (__ | | | |
      \_| \_/\____/ \____/  \__,_||_|    \___||_| |_|
     ================================================
      Version 0.4b http://goo.gl/8mFHE5  @jjtibaquira
      Email: jko@dragonjar.org  |   www.dragonjar.org
     ================================================
    
     nsearch> search name:http author:calderon category:vuln
     *** Name                                     Author
     [+] http-vuln-cve2012-1823.nse               Paulino Calderon, Paul AMAR
     [+] http-phpself-xss.nse                     Paulino Calderon
     [+] http-wordpress-enum.nse                  Paulino Calderon
     [+] http-adobe-coldfusion-apsa1301.nse       Paulino Calderon
     [+] http-vuln-cve2013-0156.nse               Paulino Calderon
     [+] http-awstatstotals-exec.nse              Paulino Calderon
     [+] http-axis2-dir-traversal.nse             Paulino Calderon
     [+] http-huawei-hg5xx-vuln.nse               Paulino Calderon
     [+] http-tplink-dir-traversal.nse            Paulino Calderon
     [+] http-trace.nse                           Paulino Calderon
     [+] http-litespeed-sourcecode-download.nse   Paulino Calderon
     [+] http-majordomo2-dir-traversal.nse        Paulino Calderon
     [+] http-method-tamper.nse                   Paulino Calderon
    

总结

扫描经常会触发IDS或者其他的安全设备,所以在用的时候应根据实际的环境,来选择合适的脚本。

参考

内网渗透定位技术总结

0x01 前言

说起内网定位,无论针对内网查找资料还是针对特殊人物都是非常实用的一项技术。这里把目前能够利用的手段&工具都一一进行讲解。

0x02 服务器(机器)定位

收集域以及域内用户信息

  • 收集域内域控制器信息
  • 收集域控上域用户登录日志信息
  • 收集域内所有用户名以及全名、备注等信息
  • 收集域内工作组信息
  • 收集域管理员帐号信息
  • 收集域内网段划分信息
  • 收集域内组织单位信息

常用收集域信息命令:

Net use
Net view
Tasklist /v
Ipconfig /all 
net group /domain 获得所有域用户组列表
net group “domain admins” /domain 获得域管理员列表
net group “enterprise admins” /domain 获得企业管理员列表
net localgroup administrators /domain 获取域内置administrators组用户(enterprise admins、domain admins)
net group “domain controllers” /domain 获得域控制器列表
net group “domain computers” /domain 获得所有域成员计算机列表
net user /domain 获得所有域用户列表
net user someuser /domain 获得指定账户someuser的详细信息
net accounts /domain 获得域密码策略设置,密码长短,错误锁定等信息
nltest /domain_trusts 获取域信任信息

net view 看机器注释或许能得到当前活动状态的机器列表,tasklist可以得到当前机器跑着的域账号。

结构分析

从计算机名获取ipv4地址:

使用nbtstat命令可以实现:nbtstat -a DC1,ping命令也可以实现:

C:\Documents and Settings\Administrator\Desktop>ping -n 1 DC1 -4

Pinging DC1.centoso.com [192.168.206.100] with 32 bytes of data:

Reply from 192.168.206.100: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.206.100:
 Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
 Minimum = 0ms, Maximum = 0ms, Average = 0ms

如果计算机名很多的时候,可以利用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)
)
)

10.jpg

最后可以把所有得到domain admins账号再net user 下,为这些信息按内容分别建立文件进行分析。

例如:

  • Users.txt 存放和用户信息有关的内容
  • Group.txt 存放和分组信息相关的内容

信息收集的姿势:

  • 人事组织结构图

例如:

789243degw1eift8ttyncj20q60a1adc_meitu_1.jpg

像这种人事组织结构图,很多公司和企业的外部站点上就有。然后结合分析人事资料里相关员工全称与域内用户名对应关系,就能很快定位到需要定位的人员使用的机器。

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提取有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 工具

常用工具:Dsquery/Dsget,Ldifde,Csvde,Adexplorer,Adfind,wmi,powershell…

工具使用参考:初级域渗透系列 – 01. 基本介绍&信息获取

注:控制扫描的频率和速度,可以大大降低触发IDS的风险,针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则,同时可以考虑使用内网管理工具使用的相同协议进行扫描探测。Tips:

内网无工具扫描

http://rinige.com/index.php/archives/112/

一条 cmd 命令解决:

for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | find /i "ttl"

ping 整个 c 段,只输出有响应的主机。

% H" g% Q+ _6 q- P7 t

更变态的:

4 o4 g8 X- v9 x& w

域机器对应 IP

FOR /F "eol=- tokens=1 delims=\ " %a IN ('net view') DO @(echo name: %a, ip: & ping %a -w 1 -n 1 | 
find /i "ttl" & echo.)

把 net view 的结果,挨个 ping 一遍,并输出机器名和 ip 地址。

找主机名

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"

B 段查找

for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

Win7

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

改成

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Ping"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Ping"

就可以兼容 Win7 了。(Win7 ping -a 输出结果关键词为 “Ping”)

另外findstr /i “pinging” 或 findstr /i “ping” 可以换成 findstr “[” 的 可以适合多语言环境

0x03 文件定位

结合服务器定位总结出文件定位的大致思路:

  • 定位人力资源主管个人机
  • 定位人力资源相关文档存放位置
  • 从人力资源文档中找相关人
  • 定位相关人的机器
  • 监视相关人工作时存放文档的位置
  • 列出存放文档服务器的目录

20161201183217_meitu_2.jpg

文件定位需要注意的点:

  • 产品名称
  • 内部名称
  • 项目负责人
  • 项目团队
  • 生产部(分公司,工厂,代工厂)

经验

  1. FTP
  2. SMB
  3. DCNETLOGON\
  4. 产品管理系统(仓库管理系统)
  5. 各种数据库
  6. 其他服务器(分公司,工厂,代工厂)

定位文件服务器请参考上一节定位服务器(机器),定位到文件服务器和某个人,对于文件定位来说应该会事半功倍。这里就不过多叙述了。

参考:后渗透攻防的信息收集

0x04 管理员定位

工具

psloggedon.exe

系统自带工具。通过检验注册表里HKEY_USERS的key值来查询谁登陆过机器,同样也调用到了NetSessionEnum API。某些功能需要管理员权限

psloggedon.png

netsess.exe

netsess.exe的原理也是调用NetSessionEnum API,并且在远程主机上无需管理员权限。

netsess.png

PVEFindADUser.exe

用于枚举域用户以及登陆过特定系统的用户,需要管理员权限。工具描述:corelan

pvefindaduser.png

netview.exe

使用WinAPI枚举系统,利用 NetSessionEnum 来找寻登陆sessions, 利用NetShareEnum来找寻共享 , 利用 NetWkstaUserEnum 来枚举登陆的用户。它也能查询共享入口和有价值用户,还能使用延迟和抖动。绝大部分功能不需要管理员权限。

netview.png

Nmap的Nse脚本

如果你有域账户或者本地账户,你可以使用Nmap的smb-enum-sessions.nse 脚本来获取远程机器的登录session,并且不需要管理员权限。

参考:

nmap.sessions.png

Smbexec&Veil-Pillage

然后Smbexec有个 checkda模块,它可以检测域管进程和域管登陆。Veil-Pillage有它的 user_hunter 和group_hunter 模块,这两个工具都需要管理员权限。

hunter

hunter是一款利用 Windows API 调用来枚举跳板机上的用户登录信息的工具,无需管理员权限

file.png

domain.png

delay.png

groups.png

users_per_group.png

Active Directory

你可以通过AD信息来识别一些连接到服务器的用户

参考:

PowerShell

上面也曾提到针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则。PowerShell有很多方法Windows Api并且绕过白名单。

参考:

PowerView

PowerView 里面有一些功能可以辅助找寻定位关键用户。要找到目标对应的用户时Get-UserProperties 将会提取所有用户的属性,并且Invoke-UserFieldSearch可以根据通配符来找寻特定用户的相关属性。这可以缩小目标搜索范围。比如说:我们使用这些功能来找Linux管理员组和其相关的成员,就可以追踪和键盘记录他们的putty/ssh会话。

Invoke-UserHunter 功能可以找到域内特定用户群。它支持一个用户名,用户列表,或域组查询,并支持一个主机列表或查询可用的主机域名。它会使用 Get-NetSessions 和Get-NetLoggedon(调用NetSessionEnum和 NetWkstaUserEnum API) 对每个服务器跑一遍而且会比较结果筛选出目标用户集。而且这个工具不需要管理员权限。

命令参考:

Get-NetGroups -> Get-NetGroup
Get-UserProperties -> Get-UserProperty
Invoke-UserFieldSearch -> Find-UserField
Get-NetSessions -> Get-NetSession
Invoke-StealthUserHunter -> Invoke-UserHunter -Stealth
Invoke-UserProcessHunter -> Invoke-ProcessHunter -Username X
Get-NetProcesses -> Get-NetProcess
Get-UserLogonEvents -> Get-UserEvent
Invoke-UserEventHunter -> Invoke-EventHunter

userhunter.png

Invoke-StealthUserHunter 只要一个查询就可以获取域内所有用户, 从user.HomeDirectories提取所有用户, 并且会对每个服务器进行Get-NetSessions 获取。无需使用 Invoke-UserHunter对每台机器操作,这个办法的隐蔽性就更高一点,但是涉及到的机器面不一定那么全。

一般默认使用Invoke-StealthUserHunter ,除非找不到我们所需,才会去使用Invoke-UserHunter方法。

stealth.userhunter.png

Invoke-UserProcessHunter是PowerView 的新功能。利用Get-NetProcesses cmdlet 来枚举远程机器的tasklists和进程寻找目标用户。这个枚举功能需要管理员权限。

process_hunter.png

Get-UserLogonEvents cmdlet可以查询查询登录事件(如:ID 4624)远程主机,Invoke-UserEventHunter 查询特定用户在域控上面的登陆日志,需要域管理权限。

参考:

user_event_hunter.png

其他一些姿势

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提权有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 查找域管进程

Scott Sutherland (@_nullbind) 2012年写了篇查找域管进程的文章。 其中详细讲述了如何使用tasklist和nbtscan的批处理来扫描机器及用户。不过远程tasklist的时候,需要本地管理员权限。

参考:

hunt for domain admin processes

0x05 总结

内网渗透,不是简单的耍流氓的说”可内网渗透”或者“内网漫游”,有着更高更深的责任和需求,有着更多设备和报警及防护软件(如Bit9,惠普ARCsight,Mandiant等等)的突破,有着更多网络拓扑和结构需要清晰洞察,有着更多的域控和域需要占领。 定位到内网管理员或者管理员上过的机器或者定位到文件和某个人,对于内网渗透来说应该会事半功倍。

0x06 参考