Web安全攻防渗透测试实战指南之工具
0x00 sqlmap
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。
sqlmap采用了以下5种SQL注入技术:
1.基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
2.基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
3.基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
4.联合查询注入,在可以使用Union的情况下注入。
5.堆查询注入,可以同时执行多条语句时的注入。
sqlmap的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。
0x01 sqlmap入门
sqlmap的安装,到官网http://www.sqlmap.org下载即可,另外需要python2的环境。
1.判断是否存在注入点
sqlmap.py -u http://127.0.0.1/?id=1
当注入点后面的参数大于等于两个时,需要用双引号将url括起来。
sqlmap.py -u "http://127.0.0.1/?id=1&uid=2"
2.判断文本中的请求是否存在注入
sqlmap.py -r desktop/1.txt
-r一般在存在cookie注入时使用。
txt文件中的内容为web数据包,用burp拦截即可。
3.查询当前用户下的所有数据库
sqlmap.py -u url --dbs
继续下一步的话,也就是爆表,需要将--dbs改为-D xxx,这里的xxx是你选中的数据库名。
4.获取数据库中的表名
sqlmap.py -u url -D xxx --tables
在进行下一步爆字段,需要将--tables改为-T xxx。
5.获取表中的字段名
sqlmap.py -u url -D xxx -T xxx --columns
同样的,需要将--columns改为-C xxx。
6.获取字段内容
sqlmap.py -u url -D xxx -T xxx --C xxx --dump
7.获取数据库的所有用户
sqlmap.py -u url --users
改命令的作用是列出数据库的所有用户,前提是当前用户有足够的权限读取包含所有用户的表的权限。
8.获取数据库用户的密码
sqlmap.py -u url --passwords
该命令是列出数据库用户的密码,当然权限很重要。
sqlmap会先列举出用户,然后列出hash,并尝试破解。密码可以自行进行MD5解密。
9.获取当前网站数据库的名称
sqlmap.py -u url --current-db
该命令是列出当前网站使用的数据库。
10.获取当前网站数据库的用户名称
sqlmap.py -u url --current-user
该命令是列出当前网站使用的数据库用户。
0x02 sqlmap进阶
1.--level 5:探测等级
总共有5个等级,不加--level的话,默认是1。等级越高,那么payload就越多。
cookie在等级2就会进行测试,user-Agent/Referer头在等级3会进行测试。
2.--is-dba:当前用户是否为管理权限
该命令用于查询当前账户是否为数据库管理员用户,是就会返回true,反之则是false。
3.--roles:列出数据库管理员角色
该命令仅使用于Oracle数据库,是用于查询当前数据库用户的角色,前期是有权限。
4.--referer:HTTP Referer头。(当--level参数设定为3或以上时,会尝试对referer注入)
可以使用referer命令来进行欺骗,如--referer http://www.baidu.com。
5.--sql-shell:运行自定义SQL语句
该命令用于执行指定的SQL语句。
6.--os-cmd,--os-shell:运行任意操作系统命令
7.--file-read:从数据库服务器中读取文件
该命令用于读取执行文件,读取的文件可以是文本,也可以是二进制文件,前提是有权限使用特定的函数且数据库为MySQL、PostgreSQL或Microsoft SQL Server。
8.--file-write--file-dest:上传文件到数据库服务器中
该命令用于写入本地文件到服务器中。前提条件和--file-read一样。
0x03 sqlmap自带绕过脚本tamper
sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改。--tamper参数对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。命令如下所示:
sqlmap.py XXX --tamper "模块名"
目前官方提供53个绕过脚本。另外可以使用参数--identify-waf进行检测是否有安全防护(WAF/IDS/IPS)。
0x04 Nmap
Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞,它的图形化界面是Zenmap,分布式框架为DNmap。
其特点如下:
主机探测:探测网络上的主机。
端口扫描:探测目标主机所开放的端口。
版本检测:探测目标主机的网络服务,判断其服务名称及版本号。
系统检测:探测目标主机的操作系统及网络设备的硬件特性。
支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言。
0x05 Nmap入门
安装地址:https://nmap.org/download.html
当然kali上面是自带nmap的。
1.扫描目标
-iR:随机选择目标主机。
-exclude:后面跟的主机或网段将不在扫描范围内。
-excludefile:导入文件中的主机或网段将不在扫描范围中。
-iL :从文件中导入目标主机或目标网段。
2.主机发现
-sL:列表扫描,仅列举指定目标的IP,不进行主机发现。
-sn:ping scan,只进行主机发现,不进行端口扫描。
-Pn:将所有指定的主机视作已开启,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]:使用TCP SYN/ACK或SCTP INIT/ECHO方式来发现。
-PE/PP/PM:使用ICMP echo、timestamp、netmask请求包发现主机。
-PO[protocollist]:使用IP协议包探测对方主机是否开启。
-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析。
--dns-servers<serv1[,serv2],......>:指定DNS服务器。
--system-dns:指定使用系统的DNS服务器。
--traceroute:追踪每个路由节点。
3.端口扫描
-sS/sT/sA/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scans的方式对目标主机进行扫描。
-sU:指定使用UDP扫描的方式确定目标主机的UDP端口状况。
-sN/sF/sX:指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测对方的TCP端口状态。
--sccanflags<flags>:定制TCP包的flags。
-sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况。
-sO:使用IP protocol扫描确定目标机支持的协议类型。
-b<FTP relay host>:使用FTP bounce scan扫描方式。
-p:扫描指定的端口。
-F:快速模式,仅扫描TOP100的端口。
-r:不进行端口随机打乱的操作。
--top-ports<number>:扫描开放概率最高的number个端口。
--port-ratio<ratio>:扫描指定概率以上的端口。
4.版本侦测
-sV:指定让Nmap进行版本侦测。
--version-intensity<level>:指定版本侦测的强度(0~9),默认为7.数值越高,探测出的服务越准确,但是运行时间比较长。
--version-light:指定使用轻量级侦测方式(intensity2)。
--version-all:尝试使用所有的probes进行侦测(intensity9)。
--version-trace:显示出详细的版本侦测过程信息。
5.常用方法(此处只记录自己可能会忘的)
扫描主机列表targets.txt中的所有目标地址:nmap -iL C:\Users\Desktop\targets.txt
扫描除某一个目标地址之外的所有目标地址:nmap ip/24 -exclude ip
扫描除某一个文件中的目标地址之外的目标地址:nmap ip/24 -excludefile 文件的绝对路径
对目标地址进行路由跟踪:nmap --traceroute IP
扫描目标地址所在C段的在线情况:nmap -sP ip/24
目标地址的操作系统指纹识别:nmap -O ip
目标地址提供的服务版本检测:nmap -sV ip
探测防火墙状态:nmap -sF -T4 ip (实战中可以利用FIN扫描来探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复则说明该端口关闭,反之则是open或filtered状态)
6.状态识别
Nmap输出的是扫描列表,包括端口号、端口状态、服务名称、服务版本及协议 。
open:开放的。表示应用程序正在监听该端口的连接,外部可以访问。
filtered:被过滤的,表示端口被防火墙或其他网络设备阻止,不能访问。
closed:关闭的,表示目标主机未开启该端口。
unfiltered:未被过滤的,表示Nmap无法确定端口所处状态,需进一步探测。
open/filtered:开放的或被过滤的,Nmap不能识别。
closed/filtered:关闭的或被过滤的,Nmap不能识别。
0x06 Nmap进阶
1.脚本介绍
存放位置:默认存在/xx/nmap/scripts文件夹。
脚本类型如下:
Auth:负责处理鉴权证书(绕过鉴权)的脚本。
Broadcast:在局域网内探查更多服务的开启情况,如DHCP/DNS/SQLServer等。
Brute:针对常见的应用提供暴力破解方式,如HTTP/SMTP等。
Default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力。
Discovery:对网络进行更多信息的搜集,如SMB枚举、SNMP查询等。
Dos:用于进行拒绝服务攻击。
Exploit:利用已知的漏洞入侵系统。
External:利用第三方的数据库或资源。
Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞。
Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽。
Malware:探测目标机是否感染了病毒、开启后门等信息。
Safe:此类与Intrusive相反,属于安全性脚本。
Version:负责增强服务与版本扫描功能的脚本。
Vuln:负责检查目标机是否有常见漏洞。
2.常用脚本
--script=default:使用默认的脚本进行扫描。
--script=<Lua scripts>:使用某个脚本进行扫描。
--script-args=key1=value1,key2=value2....:该参数用于传递脚本里的参数,key1是参数名,该参数对应value1这个值。
-script-args-file=filename:使用文件为脚本提供参数。
--script-trace:如果设置该参数,则显示脚本执行过程中发送与接受的数据。
--script-updatedb:在Nmap的scripts目录里有一个script.db文件,该文件保存了当前Nmap可用的脚本,类似于一个小型数据库,如果我们开启Nmap并调用了此参数,则Nmap会自行扫描scripts目录中的扩展脚本,进行数据库更新。
--script-help:调用该参数后,Nmap会输出该脚本对应的脚本使用参数,以及详细的介绍信息。
3.实例
nmap --script=auth ip:该命令可以对目标主机或目标主机所在的网段进行应用弱口令检测。
nmap --script=brute ip:可对数据库、SMB、SNMP等进行简单密码的暴力破解。
nmap --script=vuln ip:检查目标主机或网段是否存在常见的漏洞。
nmap --script=realvnc-auth-bypass ip:扫描VNC服务。
nmap -n -p 445 --script=broadcast ip:探测局域网内更多服务开启的情况。
nmap -script external baidu.com:利用第三方的数据库或资源查询目标地址的信息。
注:因为burp自己用的很多,就不做记载了。