web渗透测试笔记
一、渗透测试方法论
渗透测试是实施安全评估的具体手段,方法论是在制定、实施安全评估的方案时,需要遵循的规则、惯例和过程,人们在网络,应用和系统或者三者结合的情况时,不断的摸索各种务实的理论和成熟的方法,总结出了一套理论--渗透测试方法论。
二、渗透测试的分类
1、白盒测试
安全审计员可以获取被测单位的内部资料或不公开资料,可以以最小的工作量完成最高的精确度
2、黑盒测试
审计人员不知道被测单位的内部网络架构和操作系统,从外部来评估网络基础设施
黑盒测试难度高于白盒测试,白盒测试的精确度比黑盒测试高
三、脆弱性评估
脆弱性评估是通过分析企业资产面临安全威胁的情况和程度,从外部和内部进行评估
脆弱性评估分为内部脆弱性评估和外部脆弱性评估
内部脆弱性评估保证了内部的安全性
外部脆弱性评估验证边界防护的有效性
脆弱性评估与渗透测试的区别:
1、渗透测试不仅识别目标的安全漏洞(弱点),还可以对目标系统进行漏洞利用,权限提升和访问维护,而脆弱性评估只能够识别系统漏洞,而不能衡量缺陷对系统造成的危害
2、渗透测试更倾向于入侵,刻意使用各种手段对漏洞进行利用,对生产换进带来了实际上的破坏,而脆弱性评估属于非入侵方式,定性定量的识别已知的安全漏洞
四、十大web安全漏洞(owasp top 10)
1、注入
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如sql注入之类额注入缺陷,攻击者的恶意代码会诱使解析器在没有适当授权的情况下进行非法操作和非法访问
2、失效的身份认证
通过错误使用应用程序的身份认证或会话管理功能,攻击者可以利用此漏洞爆破密码、密钥等,或者利用开发缺陷暂时性或永久性魔宠其他用户的身份
3、敏感数据泄露
许多web应用程序都无法正确保护敏感数据,我们需要对敏感数据加密,例如传输过程中的数据、存储的数据和数据库的交互数据
4、xml外部实体
攻击者可以利用外部实体窃取url文件解析处理器中的共享文件和内部文件,监听扫描端口,远程执行代码或拒绝服务攻击
5、失效的访问控制
未对通过身份认证的用户做访问控制,攻击者可以利用此漏洞访问未授权的功能或数据
6、安全配置错误
由于不安全的默认配置,不完整的临时配置或http头部的错误配置造成的
我们不仅要对应用程序进行安全配置还要及时进行修补
dns区域传送漏洞:
dns区域传送是指备用dns服务器使用主的dns服务器的数据刷新自己的域数据库,这位运行中的DNS服务提供了一定的冗余度,目的是为了防止当主的DNS服务器意外故障导致不能使用是不影响域名的解析。一般情况下,只有在网络中真的存在一个备用DNS服务器才会被用的到,但是愈多时候dns服务器都被错误的配置成只要有客户提出请求就会给对方发送一个域数据库的详细信息,所以让不受信任的网络用户进行区域传送操作是及俄国最为严重的错误配置之一。
7、跨站脚本xss
当应用程序的新网页中包含不受信任的、未授权的数据时,或使用可以创建html和js的浏览器更新网页时,就会出现xss漏洞
攻击者能够在浏览器中执行xss脚本,挟持用户会话,破坏网站或将用户重定向到恶意网站
8、不安全的反序列化
可以导致远程代码执行
9、使用含有已知漏洞的组件
组件与应用程序既有相同的权限,当有漏洞的组件被攻击者利用,就会造成严重的数据丢失或服务器接管
10、不足的日志记录和监控
使攻击者进一步攻击系统,篡改、提取或销毁数据等
五、通用缺陷列表(common weekness enumeration,cwe)是某一类漏洞的编号
通用漏洞与披露(common vulnarabilities and exposures,cve)是某一个漏洞编号
六、web安全架构分析
1、渗透测试执行标准(PTES,penetration testing execution standard),有7个阶段
事前互动
信息搜集
威胁建模
漏洞分析
漏洞利用
深度利用
书面报告
2、通用渗透测试框架
范围界定
信息搜集
目标识别
服务枚举(端口扫描)
漏洞映射
社会工程学
漏洞利用
权限提升
访问维护
形成报告
3、简化渗透测试流程
明确目标
信息搜集
漏洞探测
漏洞验证
漏洞利用
形成报告
4、web工作机制
打开浏览器,输入url地址
查找本地缓存
hosts文件
ip/arp
dns
网关
路由
到达对方主机
访问80/443
tcp3次握手
建立连接
http数据包
http响应包
.html
.php
连接数据库
.php运行
七、HTTP协议
1、概念和特点:
HTTP协议是超文本传输协议(hypertest transfer protocol)
在1990年提出,当前版本1.1
是无状态的协议
是请求和响应的协议,客户端发送请求,服务器给出响应
使用可靠的tcp连接,默认端口80
HTTP是将html文档从web服务器发生到web浏览器
浏览器发出请求只需要发送请求方法和请求路径
2、https工作机制
1)http请求
由请求行、请求头和请求正文组成
请求行包含请求方法、请求路径、协议/版本(get方法中没有请求正文)
http请求方法:
get方法:请求服务器发送的某个资源
post方法:向服务器提交参数、表单或文件流等
head方法:与get方法类似,但在服务器响应时只返回首部
trace方法:回显浏览器的请求
delete方法:删除请求的资源
options方法:请求服务器所支持的功能
put方法:与get方法相反,向服务器写入文档
主要字段:
host 用于指定被请求资源的网络主机和端口号
user-agent 浏览器指纹
referer 包含一个url,代表当前url的上一个url
cookie 请求用户的身份认证
accept-charset 用于客户端接收的字符集
content-type 用于向接收方发送的数据类型
content-length 实体正文的长度
last-modified 告诉服务器资源的最后修改时间和日期
2)http响应
由状态行、响应头和响应正文组成
状态行由协议/版本、状态码和描述短语组成
状态码:
100-199 信息性状态码
200-299 成功状态码
300-399 重定向状态码
400-499 客户端错误状态码
500-599 服务器端错误状态吗
主要字段:
server 服务器指纹
set-cookie 向客户端设置cookie
last-modified 告诉浏览器资源的最后修改时间和日期
content-type 正文的长度
location 重定向到目标网页
refresh 告诉浏览器要定时刷新浏览器
八、信息收集
nslookup
dnsenum
dig
kali中dnsrecon
nmap
-sP ping扫描
-sS SYN扫描
-sV 版本扫描
-sN null扫描
-sT tcp全连接扫描
-O 系统扫描
-A 全面扫描
-T0-T5 时序选项
九、网络漏洞扫描
1、概述:Nesuss、openvas
网络漏洞扫描时指通过一些自动化工具发现各种网络上的主机设备的安全漏洞
2、分类
网络漏洞扫描分为白盒扫描和黑盒扫描
白盒扫描时在具有主机操作权限的情况下进行扫描
黑盒扫描是通过远程识别服务的版本和类型,对服务是否存在漏洞进行判定
3、原理
1)漏洞扫描器一般都会附带一个具有主机漏洞的特征库,并会定时进行更新,在进行漏洞扫描时,会利用特征库里的脚本或目标系统的反馈信息进行匹配。如果匹配的上,就说明存在某一个漏洞
2)扫描过程中目标系统会发送大量的数据包,有时会导致目标拒绝服务或数据包阻塞,或被对方的入侵检测系统发现
3)扫描的结果通常会有漏报或者误报的情况,所以需要进行人工分析,确定那些漏洞时真实存在的,这就叫做漏洞利用,这是渗透测试中不可或缺的一部分,只有通过漏洞验证,才能进一步对漏洞进行利用
十、web漏洞扫描(AVWS)
1、原理
爬行网站目录
利用漏洞脚本扫描
保存扫描结果
十一、SQL注入(sqlmap)--dbs所有的数据库名 --tables所有的表名 --columns所有的字段名 --dump字段内容
1、概述:
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库的数据在进行交互是都会使用SQL
SQL注入是指将web应用程序的原url、表单或数据包传输的参数,修改拼接到SQL语句中,传递给web服务器,进而传给数据库执行SQL语句
2、成因
程序员在处理数据与数据库交互时,使用字符串拼接的方式构造sql语句
未对用户可控参数进行严格的过滤便将参数内容拼接到sql语句中
3、分类
1)根据数据类型分为数字型和字符型
2)根据注入手法分
联合查询:可以跨库跨表查询,两张虚拟表的列数要相同,虚拟表对应列数的数据类型相同
报错注入:在错误信息中插入SQL语句
布尔盲注:根据布尔类型状态的正常或不正常来获取数据库名
延时注入:使用sleep()函数的延时性,以时间线组为判断条件
4、四种注入手法使用的函数和参数
1)联合查询
order by
null
2)报错注入
gruop by
XPATH(extracvalue(),uodatexml())
3)布尔盲注
判断时true还是false
4)延时注入
sleep()
十二、XSS跨站脚本
1、概述:
跨站脚本(cross-site scripting)本应缩写为css,但由于与层叠样式脚本同名,所以更名为XSS
xss主要基于JS完成恶意的攻击行为,JS可以灵活的使用html\css和浏览器
xss将精心构造的JS代码注入到网页中,并由浏览器解析运行这段代码,以达到恶意攻击的效果
当用户访问被注入JS代码的网页时,浏览器会解析运行这段JS代码,这是用户就会被攻击
流程:
攻击者将恶意代码注入到服务器中,用户在没有防备的情况下访问服务器,服务器会将恶意代码响应给客户端,在客户端浏览器中出发恶意代码
2、危害:
盗取各种用户的账号
窃取cookie资料,冒充用户身份进入网站
挟持用户会话,执行任意操作
传播蠕虫病毒
刷流量,执行广告弹窗
3、使用的函数和参数
alert()
confirm()
prompt()
4、分类
反射型xss
是非持久性跨站脚本,他的JS代码在web应用的某一个参数或变量中,我们在搜索框执行xss脚本就可以触发反射型xss
存储型xss
是持久性跨站脚本,他的JS代码不再web应用的某一个参数或变量中,而是在数据库或文件等可以永久保存数据的介质中,我们在留言板留言,将恶意代码注入到数据库中,由浏览器从服务器载入恶意代码,才能出发xss脚本,实行攻击
DOM型xss
比较特殊,是一种XSS攻击,特殊之处在于payload在浏览器本地修改DOM树而执行的
5、构造
使用<>
javascript伪协议
产生自己的事件
Windows事件
mouse事件
media事件
from事件
keyboard事件
6、变形
大小写转化
使用/代替空格
回车
对属性值进行转码
拆分跨站
7、shellcode调用
远程IS调用
XSS下载器
多账户使用一个密码
8、防御
输入过滤
输出编码
黑白名单策略
9、xss神器 beef
十三、PHP代码注入
1、概述
php代码执行时指应用程序过滤不严,用户可以通过请求将代码注入到应用中执行。代码执行类似与sql注入,sql注入是将sql语句注入到数据库中,而代码执行时将代码注入到应用中最终由服务器运行。这样的漏洞如果没有足够过滤相当于直接有一个后门存在
2、危害
可以通过代码执行漏洞继承web用户权限,执行任意代码
如果具有漏洞的服务器没有正确配置,web用户权限较高的话,可以读写目标服务器的任意文件,甚至控制整个网站或服务器
3、相关函数和语句
eval()
assert()
preg_replace()正则
user_call_func()
动态函数$a($b)
4、防御
尽量不使用eval函数
如果一定要用要进行严格过滤
preg_replace放弃使用/e修饰符
disable_function()禁用函数
十四、OS命令注入
1、概述
当应用调用外部程序时,需要调用系统命令函数
当应用再调用系统命令函数时,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户输入的情况下就会在成命令执行漏洞
2、危害
继承web应用的用户执行权限和读写权限
可以控制整个网站
可以控制整个服务器
反弹shell
3、相关函数
system()将字符串作为命令执行,自带输出功能
exec()需要输出执行结果
shell_exec()
popen() 返回一个文件指针
反引号 一个语言结构
十五、文件上传漏洞
1、概述
文件上传是web应用的必备功能之一,例如上传头像显示个性化,上传附件共享文件、上传脚本更新网站等,若服务器配置不当或没有进行足够过滤的情况下,web用户可以上传任意文件,这就造成了文件上传漏洞,通过文件上传漏洞的到的网站后门就是webshell
2、成因
服务器配置不当导致任意文件上传
没有对上传的文件进行严格过滤
程序开发部署时,没有考虑到系统特性和验证和过滤不严格而导致限制被绕过,上传任意文件
3、webshell
shell俗称壳,是指用于为使用者提供操作界面的软件(命令解释器),类似于Windows系统给的cmd.exe或linux下的bash等
webshell是一个网站的后门。也是一个命令解释器,不过是以web方式(http协议)通信(传递命令消息),继承了web用户的权限
本质上是在服务器段克运行的脚本文件,后缀名为.php\.asp/.aspx/.jsp
大马(webshell也可以是大马。也可以是网站木马)与小马(一句话木马)区分,代码比较大,功能比较丰富
小马(一句话木马)代码量较小,需要使用中国菜刀和中国蚁剑客户端使用
中国菜刀是一句话的管理器,也是命令操作接口
中国菜刀和一句话木马配合实现了三大基本功能:文件管理、虚拟终端、数据库管理
getshell是获取web的过程和结果
4、一定的条件
web服务器开启文件上传功能,并其上传api就扣对外开放
web用户对目标具有可写权限,甚至具有执行权限
上传的文件可以执行,也就是web容器可以解析我们上传的脚本
服务器配置不当,开启了put方法
5、防御、绕过与利用
1)黑白名单策略
2)前端的限制与绕过
3)put方法上传文件
4)服务器端检测-mime类型
5)服务器端检测-文件内容
6)服务器端检测-后缀名
7)00截断
8).htaccesss攻击
9)web容器解析漏洞
apache解析漏洞
iis解析漏洞
PHP CGI 解析漏洞
nginx解析漏洞
nginx空字节漏洞
nginx文件名罗杰漏洞
10)常见编辑器上传
ewebeditor
fckeditor
cms上传
metinfo文件上传
十六、文件包含漏洞
1、概述
程序开发人员通常会把可重复利用的函数写道单个文件中,在使用某个函数时,只需要调用此文件,无需再次编写,这种调用的过程就包含
代码的重复使用就会造成文件包含漏洞
2、原理
php文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。文件包含漏洞是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include()/include_once()/require()/require_once())利用url动态包含文件,此时若没有对文件来源进行严格审查,就会导致任意文件读取或任意命令执行
3、分类
本地文件包含:可以读取和打开本地文件
远程文件包含:通过远程加载文件(http/ftp/php伪协议)
4、特点
无视文件扩展名读取文件
无条件解析php代码
5、利用
读取敏感文件
直接包含图片木马
包含木马shell
php封装协议
十七、CSRF
跨站请求伪造(cross-site request forgery),在客户端中,强制终端用户在当前对其进行身份验证的web应用程序上执行非本意恶意的操作
着重点在伪造更改状态的请求,而不是盗取数据
csrf时一种欺骗受害者提交恶意请求的攻击,继承了受害者的身份和特权,代表受害者执行非本意恶意的操作
目标
能够重盖服务器状态或数据的业务或功能
防御
验证referer字段
添加token验证
二次验证
用户养成良好的习惯
十八、SSRF
服务器请求伪造(server-site request forgery),是攻击者发起伪造由服务器发起请求的一种攻击,也是web安全漏洞之一
危害:
端口扫描
内网web应用指纹识别
攻击内网web应用
读取本地文件
防御:
限制协议
限制IP
限制端口
过滤返回信息
统一错误信息