第二三章:搭建漏洞环境及实战与常用的渗透测试工具
在Linux系统终安装LANMP
LANMP是Linux系统下Apache、Nginx、MySQL和PHP的应用环境。使用的是WDLinux的一款继集成安装包
Centos 7
wget http://dl.wdlinux.cn/lanmp_v3.tar.gzsh lanmp.sh
执行后有五个选项,根据选项提示安装服务。
Kali和Ubuntu系统可能会报错原因是dash的兼容性不好,而编译常用的是bash,可以使用 sudo dpkg-reconfigure dash
更改系统shell(出现弹窗选),然后继续使用sudo sh lanmp.sh
安装。
Zend Gend是一款PHP加密工具,经过加密的文件,必须安装Zend才能返回正常页面;PureFTPd是FTP空间服务;phpMyAdmin的作用是利用Web页面来管理MySQK数据库服务。
Windows系统终安装phpstudy
下载,双击exe,目录自选,初始化。
搭建DVWA漏洞环境
下载,解压,初始化。
搭建SQL注入平台
下载,解压,文件夹放置,初始化。
搭建XSS测试平台
手把手教你搭建个人XSS平台:https://zhuanlan.zhihu.com/p/39006754
懒得写了,搭建没啥技术含量。
第三章
SQLMap详解
SQLMap是一个自动化的SQL注入工具,主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置很多绕过插件,**支持的数据库有:**MySQL、Qracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB。
SQLMap采用一下五种独特的SQL注入技术。
- **基于布尔类型的盲注:**可以根据返回页面判断条件真假的注入。
- **基于时间的盲注:**不能根据页面返回的内容判断任何信息,需要条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断。
- **基于报错注入:**页面会返回报错信息,或者把注入的语句的结果直接返回到页面中。
- **联合查询注入:**在可以使用Union的情况下的注入。
- **堆查询注入:**可以同时执行多条语句时的注入。
**SQLMap的功能包括:**数据库指纹识别、数据库枚举、数据提取、访问目标文件系统并在获取完整权限时执行任意命令。
SQLMap入门
判断是否存在注入:
注入点后的参数大于等于两个时,url需要加双引号。
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 python2 sqlmap.py -u "http://192.168.10.133/sqli-labs/Less-1/?id=1&uid=1"
运行注入语句后,有三处需要选择的地方:
第一处it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
意思为检测到数据库可能是MySQL,是否要跳过其他数据库;
第二处for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
意思是在leve1
、risk
的情况下,是否使用MySQL对应的所有payload进行检测;
第三处GET parameter 'id' is vulnerable.Do you want to keep testing the others (if any)? [y/N]
意思是参数id
存在漏洞,是否继续检测其他参数,一般按回车键即可。
判断文本中的请求是否存在注入:
将web数据包放入txt文件中,使用python2 sqlmap.py -r 1.txt
命令注入。
一般在存在cookie注入时使用
查询当前用户下的所有数据库:
如果当前用户有权限读取包含所有数据列表信息的表,使用python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --dbs
就可以列出所有数据库。
获取数据库中的表名:
查询指定数据库中所有表名,若不加-D
参数来指定某一特定数据库,SQLMap会列出数据库中所有库中所有的表。
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 -D sys --tables
当继续注入时,--tables
缩写为-T
,意思是在某表中继续查询以下同理
获取表中字段名:
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 -D security -T users --columns
获取字段内容:
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 -D security-T users -C username,passowrd --dump
获取数据库的所有用户:
当前用户有权限读取包含所有用户的表的权限时,使用``python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 –users`命令可以列出所有管理用户。
获取数据库用户的密码:
如果当前用户有读取包含用户密码的权限,SQLMap会优先列出用户,然后列出Hash,并尝试破解。
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --passwords
语句do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q]
意思是:您想对检索到的密码哈希执行基于字典的攻击吗?可以选Y,或者得到http://www.cmd5.com自行解密
获取当前网站数据库名称:
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --current-db
获取当前网站用户名称:
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --current-user
SQLMap进阶:参数学习
–level 5:探测等级
参数–level5指需要执行的测试等级,一共有五个等级,可不加level,默认为1。使用的payload在xml/payloads.xml中,可根据需要自行添加。
5级包含的payload最多,会自动破解出cookie,XXF等头部注入,相应的运行速度会慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level2时就会测试,HTTP User-Agent/Referer头在level3时会测试。为保证全面性,应使用高的level值。
–is–dba:当前用户是否为管理员
python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --is-dba
–roles:列出数据库管理员角色
用于查看数据库用户的角色。若当前用户有权限读取包含所有用户的表,输入该命令会列举出每个用户的角色,也可用-U
参数指定想看的某个角色。
–referer:HTTP Referer头
SQLMap可以在请求中伪造HTTP中的referer,当–level参数设定为3或3以上时,会尝试对referer注入,可以使用referer
命令来欺骗,例如--referer http://www.baidu.com
–sql-shell:运行自定义SQL语句
运行python2 sqlmap.py -u http://192.168.10.133/sqli-labs/Less-1/?id=1 --sql-shell
后会打开一个shell,但只可以执行sql语句。
–os-cmd,–os-shell:运行任意操作系统命令
在数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权使用特定函数时,如果数据库为MySQL或PostgreSQL则上传一个二进制库,包含用户定义的函数sys_exec()和sys_eval(),那么两个函数就可以执行系统命令。在Microsoft SQL Server中,SQLMap将使用xp_cmd存储过程,如果被禁用(在Microsoft SQL Server 2005及以上版本默认被禁)则SQLMap会重启它;如果不存在,会自动吃创建。
–os-shell参数可以模拟一个真实的Shell,可输入任意命令。当不能执行多语句时(比如PHP或ASP的后端数据库为MySQL),仍然可以使用INTO OUTFILE
写进目录,创建一个wen后门。–os-shell支持ASP、ASP.NET、JSP和PHP四种语言(想要执行改参数,需要有数据管理员权限,也就是 –is-dba 值为True)。
xp_cmdshell存储过程(存储过程:已预编译为一个可执行过程的一个或多个SQL语句的集合),它是用来执行本机的cmd命令的,要求系统登陆有sa权限。默认情况下,sql server2005/2008在安装后,xp_cmdshell存储过程是禁用的,如果要使用它,可以按照以下语句开启:Exec sp_configure ‘show advanced options’,1;RECONFIGURE;EXEC sp_configure ‘xp_cmdshell’,1;RECONFIGURE;
–file-read:从数据库服务器中读取文件
用于读取执行文件,当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定函数时,读取的文件可以是文本,也可以是二进制文件。用法:--file-read "C:/example.exe" -v 1
–file-write –file-dest:上传文件到数据库服务器中
用于写入本地文件到数据库服务器中,当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定函数时,上传的文件可以是文本,也可以是二进制文件。用法:--file-write "/1/2/example.exe.packed" --file-dest "C:/ex/xxx.exe" -v 1
-v 详细等级(0-6 默认 1)
0:只显示python错误以及重要信息
1:显示信息以及警告
2:显示debug消息
3:显示注入payload
4:显示http请求
5:显示http响应头
6:显示http响应内容
SQLmap自带绕过脚本tamper的讲解
使用--tamper
参数可以对数据进行修改来绕过WAF等设备,其中大部分脚本主要使用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。目前官方提供65个绕过脚本。
#sqlmap\tamper\escapequotes.py
#!/usr/bin/env python
"""Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)See the file 'LICENSE' for copying permission"""
from lib.core.enums import PRIORITY__priority__ = PRIORITY.NORMAL
def dependencies():
passdef tamper(payload, **kwargs):
"""
Slash escape single and double quotes (e.g. ' -> \')
>>> tamper('1" AND SLEEP(5)#')
'1\\\\" AND SLEEP(5)#'
"""
return payload.replace("'", "\\'").replace('"', '\\"')
一个最小tamper脚本结构为priority变量定义和dependencies、tamper函数定义。
priority定义脚本的优先级,用于有多个tamper脚本的情况。
dependencies函数声明脚本适用/不适用的范围,可以为空。
常用tamper脚本介绍:
- apostrophemask.py :将引号替换为UTF-8,用于过滤单引号。
示例:1 AND‘1’=‘1 –> 1 AND %EF%BC%871%EF%BC%87=%EF%BC%871
- base64encode.py :顾名思义,替换为base64编码。
- multiplespaces.py :围绕SQL关键字添加多个空格
- space2plus.py :用+替换空格
- space2randomblank.py :空格替换为其他有效字符
- unionalltounion.py :UNION ALL SELECT替换为UNION SELECT
- space2hash.py :空格替换为#,并随即生成一个随机字符串和换行符
- space2mssqlblank.py :空格替换为其他字符
- space2mssqlhash.py :空格替换为#并添加一个换行符
- between.py :NOT BETWEEN 0 AND替换大于号 BETWEEN AND替换等号
- percentage.py :ASP允许在每个前面加一个%符号
- sp_password.py :从DBMS日志的自动模糊处理的有效荷载中追加sp_password。
- charencode.py :对给定的Payload全部字符使用URL编码,除已经编码的
- randomcase.py :随机大小写
- charunicodeencode.py :字符串unicode编码
- space2comment.py :空格替换为/**/
- equaltolike.py :等号替换为like
- greatest.py :GREATEST替换大于号,测试通过的:MySQL 4/5.0/5.5 Oracle 10g PostgreSQL 8.3/8.4/9.0
- ifnull2ifisnull.py :绕过对IFNULL的过滤,类似IFNULL(A,B)替换为(ISNULL (A),B,A) 适用:MySQL5.0/5.5
- modsecurityversioned.py :过滤空格,使用MySQL内联注释方式进行注入,适用:MySQL5.0
- space2mysqlblank.py :适用于MySQL,空格替换为其他空白符号
- modsecurityzeroversioned.py :使用MySQL内联注释方式,
*! 0000*/
进行注入 - space2mysqldash.py :空格替换为——,并添加一个换行符
- bluecoat.py :SQL语句之后用有效的随机空白符替换空格,并用LIKE替换等于号
- versionedkeywords.py :注释绕过
- halfversionedmorekeywords.py :当数据库为MySQL时绕过防火墙,每个关键字之前加MySQL版本注释,MySQL 4.0.18/5.0.22
- space2morehash.py :空格替换为#,并添加一个随机字符串和换行符
- apostrophenullencode.py :用非法双字节unicode字符替换单引号
- appendnullbyte.py :有效荷载结束位置加载零字节字符编码
- chardoubleencode.py :对给定的payload全部字符使用双重URL编码,已编码的不处理
- unmagicquotes.py :用一个多字节组合(%bf%27)和末尾通用注释一起替换空格
- randomcomments.py :用/**/分割SQL关键字
Burp Suite详解
Burp Suite简介与安装
Burp Suite是一款集成化的渗透测试工具,包含很多功能,基于java编写,跨平台使用更方便,它不是自动化测试工具,需要手动配置参数才能工作。有一点,一定是专业版的Burp Suite。安装基本流程就是:java安装,环境变量配置,双击使用。
Burp Suite入门
Burp Suite代理工具是以拦截代理的方式拦截所有通过代理的网络流量,主要拦截Http和Https协议的流量。或是浏览器设置代理,或是用新版的burp自带的浏览器。
抓包,爆破,编码解码
Nmap
设置扫描目标
-iL:从文件中
-iR:随机选择目标
——exclude:后跟排除对象
——excludefile:后跟排除对象文件
主机发现
-sL:仅列举指定目标ip
-sn:只ping,主机发现
-Pn:跳过主主机发现,视作全部开启
-PS/PA/PU/PY[porlist]:使用TCP SYN/ACK或SCP INIT/ECHO方式来发现
-PE/PP/PM:使用ICMP echo、timetamp、netmask请求包发现主机。
-PO[portocolist]:使用IP协议包探测对方主机是否开启
-n/-R:不进行DNS解析和总是进行DNS解析
——dns-server<serv1[,serv2],…….>:指定DNS服务器
——system-dns:指定使用系统的DNS服务器
——tracerouute:追踪每个路由节点
常用扫描方法
-sS/sT/A/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scans的方式扫描
-sU:指定使用UDP扫描的方式
-sN/sF/sX:指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测目标TCP端口状态
——scanflag<flags>:定制包的flags
-sl<zombie host [:probeport]>:指定使用idle scan的方式扫描
-sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描方式
端口参数与扫描顺序
-p<port ranges>:扫描指定端口
-F:仅扫描TOP 100的端口
-r:不进行随机打乱的操作(随机较为安全)
——top-ports<number>:扫描开放概率最高的number个端口
——port-ratio<ratio>:指定指定频率以上的端口
-vS:版本测试
——version-intensity<level>:指定版本强度0~9,默认7,越高时间越长越准
——version-all:尝试所有的probes进行侦测方式(intensity2)
——version-trace显示出详细版本侦测过程信息
nmap -T4 -A -v ip
-A表示使用进攻性方式扫描Aggressive;-T4表示指定扫描过程使用的时序0~5,越高越快越易被发现,网络好时用-T4;-v表示显示冗余(verbosity)信息,也就是细节
常用方法
扫描单个
namp 192.168.0.123
扫描多个
namp 192.168.0.123 192168.0.156
扫描范围内
namp 192.168.0.123-156
扫描某个网段
namp 192.168.0.123/24
扫描文件中的地址
namp 192.168.0.123 -iL target.txt
扫描除了某个/些地址
namp 192.168.0.123/24 -exclude 192.168.0.156
namp 192.168.0.123/24 -excludefile target.txt
扫描某地址某端口
namp 192.168.0.123 -p 21,22,23,80,443
路由追踪
namp——traceroute 192.168.0.123
扫描地址所在C段在线情况
namp -sP 192.168.0.123/24
目标地址操作系统指纹识别
namp -O 192.168.0.123
目标地址提供的服务版本检测
namp -sV 192.168.0.123
探测防火墙状态
namp -sF -T4 192.168.0.123
状态识别
状态 | 含义 |
---|---|
open | 开放的,表示应用程序正在监听该端口的连接,外部可以访问 |
filtered | 被过滤的,表示端口被防火墙或其他网络设备阻止,不能访问 |
closed | 关闭的,主机未开启此端口 |
unfiltered | 未被过滤的,表示nmap无法确定端口所处状态,需要进一步探测 |
open/filtered | 开放或被过滤的,nmap不能识别 |
closed/filtered | 关闭的或被过滤的,nmap不能识别 |
Nmap进阶
脚本在/nmap/script下
分类:
auth:处理鉴权证书,就是绕过鉴权
broadcast:局域网内探查更多服务的开启情况,DHCP/DNS/SQLSever等
brute:针对常见的应用提供暴力破解方式HTTP/SMTP等
default:-sC或-A时的默认脚本,提供基本的脚本扫描能力
discovery:对网络进行更多信息的搜集,SMP枚举,SMMP查询等
dos:用于进行拒绝服务攻击
exploit:利用已知的漏洞入侵系统
external:利用第三方的数据库或资源,例如Whois解析
fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive:入侵的脚本,此类脚本可能引发对方IDS/IPS的记录或屏蔽
malware:探测目标主机是否感染病毒,开启后门等
safe:与intrusive相反,属于安全性脚本
version:负责增强服务与版本扫描功能的脚本
vuln:复制检测是否有常见漏洞,如MS-067
常用脚本:
根据需要设置 ——script=类别 进行扫描,
-sC/——script=default:使用默认脚本进行扫描
——script=<Lua scripts>:使用某个脚本进行扫描
——script-args=key1=value1,key2=value2…………:传递脚本里的参数,key1是参数名,对应值未value1,逗号链接
-script-args-file=filename:使用文件为脚本提供参数
——script-trace:显示脚本执行过程中发送与接收的数据
——script-updatedb:script目录下script.db,其中保存了当前nmap可用脚本,类似于一个小数据库此参数可以自行扫描script目录中的扩展脚本,进数据库更新
——script-help:输出该脚本对应使用参数,以及详细的信息介绍
实例
鉴权扫描
对目标主机或网段进行应用弱口令检测
namp ——script=auth 192.168.0.123
暴力破解攻击
可对数据库、SMP、SNMP等进行简单的密码暴力猜解
nmap——script=brute 192.168.0.123
常见目录扫描
扫描主机或网段是否存在常见漏洞
nmap——script=vuln 192.168.0.123
应用服务扫描
VNC服务、MySQL服务、Telnet服务、Rsync服务等,VNC为例
namp——script=realvnc-auth-bypass 192.168.0.123
探测局域网内更多服务开启情况
nmap -n -p 445——script=broadcast 192.168.0.123
Whois解析
利用第三方的数据库或资源查询目标地址的信息,例如进行Whois解析
nmap-script external baidu.com
更多方法:https://nmap.org/nsedoc/categories