云亦然
天下皆白,唯我独黑。非攻墨门,兼爱平生。

网络安全之Nmap和sqlmap

2019-02-13 10:15:45 网络安全
Word count: 3.8k | Reading time: 14min

什么是网络扫描?
通过主动发送相关数据包进行网络探测,
识别、分析返回的信息,用以确认网络目标的相关特征。

为什么要做网络扫描?
安全测试中信息收集的一部分,
主动探测收集目标信息,
为后续的漏洞分析和利用做准备。

Nmap在网络扫描中的常见作用:
1、查看存活主机。
2、扫描目标主机开放端口。
3、鉴别安全过滤机制。
4、识别目标主机的操作系统。
5、查看目标主机服务的版本信息。
6、利用脚本扫描漏洞。
nmap.jpg
Nmap简介:
Nmap也称NetworkMapper,
是一款多平台的网络连接扫描软件,
可以探测计算机网络上的主机和服务。
在渗透初期为了绘制目标网络拓补图,
需用到Nmap对目标网络发送特定的数据包,
对返回的数据包进行分析。

Nmap主要适用平台:
Windows系统、Mac OS X系统、Linux系统

Nmap常见运行方式:
Zenmap GUI方式
命令行方式

Nmap主要参数介绍

Nmap的功能参数主要分为以下几个大类:
1、目标说明
2、主机发现
3、端口扫描
4、端口说明和扫描顺序
5、服务与版本探测
6、脚本扫描
7、操作系统探测
8、时间和性能
9、防火墙/IDS规避和欺骗
10、输出选项
1、TARGET SPECIFICATION 目标说明

-iL 从主机地址列表文件中导入扫描地址
-iR 随机选择目标进行扫描,num hosts表示数目
--exclude 排除某个主机地址
--excludefile 排除主机地址列表文件中的地址

2、HOST DISCOVERY 主机发现

-sL 列表扫描,仅将指定的目标IP列举出来,不进行主机发现
-sn 和 -sP一样,只利用ping扫描进行主机发现,不扫描目标主机的端口
-Pn 将所有指定的主机视为已开启状态,跳过主机发现过程
-PS TCP SYN ping ,发送一个设置了SYN标志位的空TCP报文,默认端口为80,也可指定端口
-PA TCP ACK ping ,发送一个设置了ACK标志位的空TCP报文,默认端口为80,也可指定端口
-PU UDP ping , 发送一个空的UDP报文到指定端口,可穿透只过滤TCP的防火墙
-P0 使用IP协议ping
-PR 使用ARP ping
-n/-R -n不用域名解析,加速扫描,-R为目标IP做反向域名解析,扫描较慢一些
-dns-servers 自定义域名解析服务器地址
-traceroute 目标主机路由追踪

3、SCAN TECHNIQUES 端口扫描

Nmap将目标端口分为6种状态:
-open(开放的)
-closed(关闭的)
-filtered(被过滤的)
-unfiltered(未被过滤)可访问但不确定开发情况
-open|filtered(开放或者被过滤)无法确定端口是开放的还是被过滤的
-closed|filtered(关闭或者被过滤)无法确定端口是关闭的还是被过滤的
Nmap产生结果是基于目标机器的响应报文的,而这些主机可能是不可信任的,会产生迷惑或者误导Nmap的报文。
-sS TCP SYN扫描,半开放扫描,速度快隐蔽性好(不完成TCP连接),能够明确区分端口状态
-sT  TCP连接扫描,容易产生记录,效率低
-sA TCP ACK扫描,只设置ACK标志位,区别被过滤与未被过滤的
-sU UDP服务扫描,例如DNS/DHCP等,效率低

4、PORT SPECIFICATION AND SCAN ORDER 端口说明和扫描顺序

-p 指定扫描的端口,可以是单个端口,也可以是端口范围,可以指定UDP或TCP协议扫描特定端口
-p<name> 指定扫描的协议,例如-p http 即可扫描http协议的端口状态
--exclude-ports  排除指定端口不扫描
-F 快速模式,仅扫描100个常用端口

5、SERVICE/VERSION DETECTION 服务与版本探测

Nmap-services 包含大量服务的数据库,Nmap通过查询该数据库可以报告哪些端口可能对应于什么服务,但不一定确定。
-sV 进行服务版本探测
--vesion-intensity<level> 设置版本扫描强度,范围为0-9,默认是7,强度越高,时间越长,服务越可能被正确识别

6、SCRIPT SCAN 脚本扫描

允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能,使用Lua脚本语言。
-sC 使用默认类别的脚本进行扫描
--script=<Lua script>  使用某个或某类脚本进行扫描,支持通配符描述

7、OS DETECTION 操作系统探测

用TCP/IP协议栈fingerprinting进行探测,
Nmap发送一系列TCP和UDP报文到远程主机,
检查响应中的每一个比特。
测试后Nmap把结果和数据库中超过1500个已知的fingerprints比较,如匹配则输出结果。
-O 启用操作系统探测
-A 同时启用操作系统探测和服务版本探测
--osscan-limit 针对指定的目标进行操作系统探测
--osscan-guess 当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配

8、TIMING AND PERFORMANCE 时间和性能

Nmap开发的最高优先级是性能,
但实际应用中很多因素会增加扫描时间,
比如特定的扫描选项,防火墙配置以及版本扫描等。
-T<0-5> 设置时间模板级数,在0-5中选择。
T0、T1用于IDS规避,T2降低了扫描速度以使用更少的带宽和资源。
默认为T3,未做任何优化。T4假设具有合适及可靠的网络从而加速扫描。
T5假设具有特别快的网络或者愿为速度牺牲准确性
-host-timeout<time> 放弃低速目标主机,时间单位为毫秒

9、FIREWALL/IDS EVASION AND SPOOFING 防火墙/IDS规避和欺骗
-f(报文分段);–mtu(使用指定的MTU)将TCP头分段在几个包中,使得包过滤器、IDS以及其他工具的检测更加困难
-D<decoy1[,decoy2][,ME]…> 隐蔽扫描;使用逗号分隔每个诱饵主机,用自己真实IP作为诱饵使用ME选项。
如在6号或更后的位置使用ME选项,一些检测器就不报告真实IP。如不使用ME,真实IP将随机放置
-S<IP_Address> 伪造数据包的源地址
-source-port/-g 伪造源端口

10、OUTPUT 输出选项

-oN 标准输出
-oX XML输出写入指定的文件
-oS 脚本小子输出,类似于交互工具输出
-oG Grep输出
-oA 输出至所有格式
-v  提高输出信息的详细度
-resume<filename> 继续中断的扫描

Nmap的常用扫描技巧:
1、扫描单一目标主机
nmap 192.168.0.1
nmap xxx.com
(默认发送一个ARP的PING包,扫描1-10000范围内开放端口)

2、扫描整个子网
nmap 192.168.0.1/24

3、扫描多个目标
nmap 192.168.0.1 xxx.com

4、扫描一个范围内的目标
nmap 192.168.0.1-200

5、导入IP列表进行扫描
nmap -iL ip.txt(在Nmap目录下)

6、列举目标地址,但不进行扫描
nmap -sL 192.168.0.1/24

7、排除某IP进行扫描
nmap 192.168.0.1/24 -exclude 192.168.0.1
nmap 192.168.0.1/24 -exclude file ip.txt

8、扫描特定主机的特定端口
nmap -p80,21,8080,135 192.168.0.1
nmap -p50-900 192.168.0.1

9、简单扫描,详细输出返回结果
nmap -vv 192.168.0.1

10、简单扫描并进行路由跟踪
nmap -teaceroute baidu.com

11、ping扫描,不扫描端口(需要root权限)
nmap -sP 192.168.0.1
nmap -sn 192.168.0.1

12、探测操作系统类型
nmap -O 192.168.0.1

13、Nmap万能开关-A参数
nmap13.png
nmap -A 192.168.0.1
-A 包含1-10000端口的ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测

14、混合命令扫描
nmap -vv -p1-1000 -O 192.168.0.1/24 -exclude 192.168.0.1

15、半开放TCP SYN端口扫描码
nmap15.png
nmap -sS 192.168.0.1

16、扫描UDP服务端口
nmap -sU 192.168.0.1

17、TCP连接扫描端口
nmap -sT 192.168.0.1

18、由于IDS/IPS系统的存在,防火墙可能会阻止掉
SYN数据包,此时可发送设置了FIN标志的数据包,不需要完成TCP握手,不会再目标产生日志
nmap -sF maizitime.com

19、服务版本探测
nmap -sV 192.168.0.1

20、图形界面版本的对应使用

Nmap脚本扫描
Nmap允许用户自己编写脚本进行自动化扫描操作,或者扩展Nmap现有的功能
脚本文件的默认目录为:/usr/share/nmap/scripts
-sC 参数等价于 -sC=default 使用默认类别的脚本进行扫描,可更换其他脚本类别
–script-args=<n1=v1,[n2=v2,…]> 为脚本提供默认参数
–script-args-file=filename 使用文件来为脚本提供参数
–script-updated 更新脚本数据库
–script-trace 显示脚本执行过程中所有数据的发送与接收
–script-help= 显示脚本的帮助信息

Nmap的脚本功能主要分为以下几类,扫描过程中可以使用-script=类别名称 这种方式进行扫描

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

使用auth类脚本进行扫描,处理鉴权证书方面的脚本,也可以作为部分弱口令的检测

Nmap –script=auth

使用默认脚本进行扫描

Nmap -sC

扫描是否存在常见漏洞

Nmap –script=vuln

在局域网内扫描更多的端口开启情况

Nmap -n -p135 –script=broadcast


sqlmap.jpg
SqlMap是一款非常强大的开源SQL自动化注入工具,可以用来检测和利用SQL注入漏洞。
获取SqlMap官网:www.sqlmap.org

SqlMap基于python编写,要求python的版本号为2.6或者2.7

Sqlmap 目标 参数
请求方式 注入类型
系统选项 编码选项
数据检索 文件读写
数据保存 杂项

Sqlmap检测注入点
1、判断可注入的参数
2、判断可以用哪种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,读取哪些数据

Sqlmap支持五种不同的注入模式
基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入,可以使用union的情况下的注入。
堆查询注入,可以同时执行多条语句的执行时的注入。

Sqlmap -u 目标url
Sqlmap -r 目标http请求
sqlmap1.png
Sqlmap检测注入点
读取数据库>>读取表>>读取列>>获取内容
–dbs 列出所有的数据库
–current-db 列出当前数据库
–current-user 列出当前用户
–table 列举数据库表名
–columns 列举表列名
–dump 获取表中的数据,包括列
–is-dba 判断是否为管理员用户
-D 指定数据库
-T 指定表
-C 指定列
-p 指定参数
sqlmap2.png
Sqlmap命令

列数据库管理用户
参数:–users
当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

列出并破解数据库用户的hash
参数:–passwords
当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

列出数据库管理员权限
参数:–privileges
当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你哪个是数据库的超级管理员。

获取表中数据个数
参数:–count
有时候用户只想获取表中的数据个数而不是具体内容,那么就可以使用这个参数。

从数据库服务器中读取文件
参数:–file-read
当数据库为MySQL,PostgreSQL或Mircrosft SQL Server ,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文件。

把文件上传到数据库服务器中
参数:–file-write,–file-dest
当数据库为MySQL,PostgreSQL或Mircrosoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文件。
配置文件php-ini中(magic_quotes_gpc = off)

HTTP请求延迟
参数:–delay
可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。

设定超时时间
参数:–timeout
可以设定一个HTTP(S)请求超时多久判定为超时,10.5表示10.5秒,默认是30秒。

运行自定义的SQL语句
参数:–sql-query,–sql-shell
sqlmap会自动检测确定使用哪种SQL注入技术,如何插入检索语句。

运行任意操作系统命令
参数:–os-cmd,–os-shell
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。

探测等级
参数:–level
共有五个等级,默认为1,如果你不确定那个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

风险等级
参数:–risk
共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。

测试靶场为封神台;


        

Author: 云亦然

Link: http://JaneBraun.github.io/2019/02/13/网络安全之Nmap和sqlmap/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Python-itchat之微信好友大曝光
NextPost >
网络安全之AWVS和Nessus工具
CATALOG