目录
1、XSS
1.1、XSS概述
1.1.1、什么是XSS
1.1.2、XSS攻击流程
1.1.3、XSS触发条件
1、标签法
2、伪协议
3、事件
1.2、反射型XSS
Low
Medium
High
1.3、存储型XSS
Low
Medium
High
1.4、Dom型XSS
Low
Medium
High
1.5、XSS的危害和防护
2、CSRF-跨站请求伪造
2.1、CSRF漏洞原理
2.2、CSRF漏洞演示
Low
Medium
High
2.3、CSRF漏洞防御
3、SSRF-服务器端请求伪造
3.1、什么是从SSRF
3.2、SSRF的危害
4、暴力破解
4.1、什么是暴力破解?
4.2、暴力破解流程
4.3、防护措施
靶场DVWA-Brute Force
Low
Medium
High
1、XSS
1.1、XSS概述
1.1.1、什么是XSS
XSS跨站脚本最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,是由于WEB应用程序对用户输入过滤不足而产生的,当用户浏览这些网页时,就会执行其中的恶意代码。
由于HTML代码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这等于完全控制了WEB客户端的逻辑,在这个基础上,黑客可以轻易的发起Cookie窃取、会话劫持、钓鱼欺骗等各种各样的攻击。
精简定义,web程序在开发的时候没有对用户的输入进行严格的控制,导致用户的某些非法恶意输入可以在我们的页面上加载外部脚本资源。泄露客户端本地存储的用户敏感信息(尤指cookie)。引发严重的后果。
1.1.2、XSS攻击流程
原理:用户输入的数据被当作前端代码执行
(1)攻击者发送带有XSS恶意的脚本链接给客户(该链接是正常服务器存在注入点的链接,且带着我们注入的内容)
(2)客户点击了恶意链接并访问了正常服务器
(3)服务器将XSS与页面信息返回客户端
(4)客户端解析后请求恶意服务器
(5)攻击者读取用户信息
1.1.3、XSS触发条件
1、标签法
<script></script>
2、伪协议
协议--大众协议,如http,普遍使用的
伪协议--小众协议,weixin:// weishi://,某些公司自己内部使用的协议
JavaScript:
一般用法:<a href=javascript:alter(1)>123</a>
alter()为JavaScript中弹窗函数,如果出现弹窗,则说明js代码被执行。
3、事件
当页面满足某事件,就会触发JS代码
事件就是加在标签里的<img scr=’#’ οnerrοr=aleter(1) />
参考:https://www.runoob.com/jsref/dom-obj-event.html
https://www.w3school.com.cn/jsref/jsref_events.asp
1.2、反射型XSS
攻击流程:攻击者设置圈套,发送脚本进行攻击;受害者浏览恶意网站;恶意代码执行,将当前页面跳转到攻击对象的服务器,在攻击对象网站生成一个Javascript页面然后返回给受害者;Javascript在受害者的浏览器中执行。
关键条件:诱导用户访问链接 --- 一次性
反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。
例子:
<?php
$username = $_GET['username'];
echo $username;
?>
在这段代码中,程序接收username值后再输出,如果提交1.php?username=test,那么程序将输出test,如果攻击者输入username= <script>alert(‘xss’ )</script>,将会造成反射型XSS漏洞。
这表明我们输入的代码被当作前端代码执行
危害:如果某网站存在XSS漏洞,攻击者可以精心设计可以窃取用户Cookie的JS代码。用户点击带有XSS漏洞的URL后,攻击者就拿到了用户的会话Cookie,然后就可以用该用户的身份登录到该网站。
实战演练:DVWA--XSS(Reflected)
Low
我们这里输入什么就会回显什么,尝试输入标签
<script>alert(3)</script>
Medium
尝试输入标签,发现直接输出了
审计源码
发现对<script>标签做了替换,将<script>替换为空,尝试伪协议
<a href = 'javascript:alert(666)'>click</a>
也可以这样
<sc<script>ript>alert(3)</script>
High
发现正则过滤了<script>标签,尝试事件过滤
<img src=1 onerror=alert(666)>
1.3、存储型XSS
攻击流程:攻击者向web邮箱客户端等发布带有攻击性的JS代码到攻击对象网站;受害者浏览带有JS攻击脚本的网站;JS脚本在用户浏览器上运行。
存储型XSS又被称为持久性XSS存储型XSS是最危险的一种跨站脚本。允许用户存储数据的WEB应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当再次访问页面时,这段XSS代码被程序读取响应给浏览器,造成XSS跨站攻击,这就是存储型XSS。
在测试是否存在XSS时,首先要确定输入点与输出点,例如:我们要在留言内容上测试XSS漏洞,首先就要去寻找留言内容输出(显示)的地方是在标签内还是标签属性内,或者在其他地方,如果输出的数据在属性内,那么XSS是不会被执行的。
实战演练:DVWA--XSS(Stored)
Low
发现对name框的输入进行了限长,修改maxlength值
<script>alert(1)</script>
Medium
先做上一关的操作发现并没有进行弹窗,猜测是否对script进行了过滤,替换成空
<sc<script>ript>alert(1)</script>
再尝试大小写绕过
<ScRipt>alert(1)</script>
事件绕过
<img src=1 onerror=alert(666)>
High
直接尝试事件绕过
1.4、Dom型XSS
DOM—based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如URL,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
DOM就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。通过Js去对网页进行修改,变化执行。
Document对象属性
Document对象使我们可以从脚木中对HTML页面中的所有元素进行访问
常用用Document对象属性
cookle |
设置或返回与当前文档有关的所有cookle |
domain |
返回当前文档的域名 |
lastModified |
返回文档被最后修改的日期和时间 |
referrer |
返回载入当前文档的交档的URL |
Title |
返回当前文档的标题 |
URL |
返回当前文档的URL |
wrlte() |
向文档写HTML表达式或JavaScrlpt 代码 |
Document的存在可以让浏览器获取网贞信息,然后用Js来填充来节约服务器性能
(因为前端代码都在客广浏览器上面执行,和服务器无关)
document.cookie 读取当前网页的Cookie [xss:必备]
document.lastModified 获得当前页面的最后修改时间 [识别伪静态必备]
document.write 向文档中写文HTML或者Js代码 [Dom xss常见的存在方式]
例如:document.write("<script>alert(1)</script>')
实战演练:DVWA--XSS(DOM)
Low
URL框输入
<script>alert(1)</script>
Medium
查看源码
发现过滤了<scrip,尝试事件绕过
<img src=1 onerror=alert(666)>
查看网页,发现我们输入的语句被输入到value中,并没有插入到option标签的值中。
所以我们需要构造闭合
</option></select><img src=1 onerror=alert(666)>
High
审核源码,发现使用了白名单的想法,只允许选项中的选择。那我们该怎么进行绕过?
我们可以加个锚点#,在url中#后边的内容不会发送到服务端,从而可以实现绕过。
#<script>alert(1)</script>
1.5、XSS的危害和防护
XSS存在的位置:只要是存在用户交互的地方都有可能存在注入攻击。如:留言板、用户注册的时候、上传文件等。像存储型XSS就存在与任何可能插入数据库的地方。
XSS的危害
- 网络钓鱼,包括盗取各类用户账号;
- 窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进—一步对网站执行操作;
- 劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送电子邮件等;
- 强制弹出广告页面,刷流量等;
- 网页挂马;
- 进行恶意操作,例如任意篡改页面信息,删除文章等;
- 进行大量的客户端攻击,如DDOS攻击;
- 获取客户端信息,例如用户的浏览历史,真实ip,开放端口等;
- 控制受害者机器向其他网站发起攻击;
- 结合其他漏洞进一步扩大攻击;
- 提升用户权限,包括进一步渗透网站;
- 传播XSS跨站脚本壖虫等;
XSS的防护
(1)输入验证
- 对用户提交的数据进行有效验证,仅接受指定长度范围内,采用适当格式的内容提交,阻止或忽略初次之外的其他任何数据
- 输入是否仅仅包含合法的字符
- 输入的字符串是否超过最大长度的限制·输入如果为数字,数字是否在指定的范围内
- 输入是否符合特定要求,例如:邮箱、电话号码、IP地址等
- 输入与输出中的过滤
- 黑名单与白名单
- WEB安全编码规范
- HttpOnlv cookie
总的原则:输入做过滤,输出做转义
输出编码
对输出的数据进行编码,如HTML编码,就是让可能造成危害的信息变成无害
2、CSRF-跨站请求伪造
2.1、CSRF漏洞原理
CSRF跨站请求伪造,是一种对网站的恶意利用。听着与XSS很像,但是他们是不同的。
XSS是利用站点内的信任用户,而CSRF是通过伪装来自受信任用户的请求来利用信任的网站。
可以这么理解CSRF攻击:攻击者盗用了你的身份(即用了你的COOKIE),以你的名义进行某些非法操作。CSRF能够修改你的密码,使用你的账户发送邮件,获取你的敏感信息甚至盗走你的财产等。
一次CSRF攻击的条件:
1、用户登录信任网站A,在本地生成cookie
- 在不登出A的情况下,访问恶意网站B
- 必须是在同一浏览器,不同浏览器不能相互利用cookie
2.2、CSRF漏洞演示
DVWA-CRSF
Low
输入要修改的密码111,修改成功后,上面出现一串代码
http://127.0.0.1/DVWA/vulnerabilities/csrf/password_new=111&password_conf=111&Change=Change#
此时admin密码为111,且可以在其他网站登录
Medium
和上面一样我们修改密码之后提示密码修改成功,在另一个页面尝试登录
http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change#
提示Http Referer字段没有定义索引,我们分别对两个页面用burpsuite进行抓包对比
对比发现后面打开的页面少了referer,这样我们可以自己加一个referer字段
然后发送,再次查看密码已经修改成功了
High
随便改一个密码,发现在url的末尾加了token,用户每次访问改密页面时,服务器都会返回一个随机的token,当浏览器向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。这里因为对请求的token进行了验证,所以比上两个等级的更加的安全。
2.3、CSRF漏洞防御
1、增加验证码
2、增加Refer字段
3、增加token
关于token与cookie: https://blog.csdn. net/jason121388/article/details/109519266
3、SSRF-服务器端请求伪造
3.1、什么是从SSRF
(1)服务器请求伪造SSRF是指攻击者能够从易受攻击的web应用程序发送精心设计的请求对其他网站进行攻击。
(2)利用一个可发起网络请求的服务来当跳板来攻击其他服务
攻击者能够利用目标帮助攻击者访问其他想要攻击的目标:A让B帮忙访问C
网站B存在SSRF漏洞
攻击者要求网站B为他访问网站C---出现问题时,运维人员查看日志记录,怀疑的是网站B,从而隐藏了真正的攻击者A
模拟SSRF,例如:通过fanyi.baidu.com,访问百度如下图
点击翻译会进行一个跳转,而且域名还是在fanyi里面,只是并不能进行搜索功能,只能查看有的
通过这个网站http://web.yeekit.com/ 再次尝试
会提示安全问题,并不能连接。试试查看127.0.0.1呢,也不行。说明做了过滤
IP绕过小技巧:(1)加@,只访问@后面的内容
(2)利用域名,如localhost指向的就是127.0.0.1
(3)数字IP法,IP可以转换成数字
例如:
http://www.baidu.com@127.0.0.1/DVWA
https://www.toolnb.com/tools/ipnum.html
SSRF形成原因:服务器端提供了从其他服务器端获取数据的功能,但是没有对内网目标地址做过滤与限制。
3.2、SSRF的危害
假设我现在得到一个SSRF漏洞我可以干什么?
攻击内网服务器(假设内网服务器有存在远程代码执行,那么是不是直接访问一个地址就可以getshell,而且在127.0.0.1访问的时候有些防火墙机制不拦截)如果他内网有机器存在RCE漏洞?是不是就可以直接拿下了?
常利用协议
http://
dict://
file://
案例分享
http://cn-sec.com/archives/3606.html
http://cn-sec.com/archives/8563.html
SSRF可以做什么?
- 扫描内部网络( FingerPrint )
- 向内部任意主机的任意端口发送精心构造的数据包{Payload}
- DOS(请求大文件,始终保持连接Keep-Alive Always )
- 暴力穷举(users / dirs / files )
怎么挖掘SSRF?
1.能够对外发起网络请求的地方,就可能存在SSRF同。(POST或GET)
eg:http:/ lexample.com/index.php?page=about.php
2.从远程服务器请求资源。
3.数据库内置功能。(MSSQL)OpenRowset函数操作远程数据库(操作内网的数据库)https: //www.cnblogs.com/yechanglv/p/6923147.html
靶场:pikachu
4、暴力破解
4.1、什么是暴力破解?
Brute Force,即暴力(破解),暴力破解可分为两种,一种是针对性的密码爆破,另外一种是扩展性的密码喷洒。
密码爆破:密码爆破一般很熟悉,即针对单个账号或用户,用密码字典来不断的尝试,直到试出正确的密码,破解出来的时间和密码的复杂度及长度及破解设备有一定的关系。
密码喷洒:密码喷洒和密码爆破相反,也可以叫反向密码爆破,即用指定的一个密码来批量的试取用户,在信息搜集阶段获取了大量的账号信息或者系统的用户,然后以固定的一个密码去不断的尝试这些用户。
本质:连续性尝试+字典+自动化
4.2、暴力破解流程
1.确认目标是否存在暴力破解漏洞
抓包验证,查看目标网站对登录接口是否实施了安全措施。
⒉.优化字典
收集拖库字典;根据实际情况对字典进行优化。一个有效的字典可以大大提高暴力破解的效率。
3.工具自动化
配置线程、超时时间、重试次数等。
4.3、防护措施
1.增加密码复杂度
建议密码包含大小写字母,数据和特殊符号,密码长度不低于八位
2.使用安全的验证码
例如图形验证码
增加对尝试登陆行为进行判断和验证
例如固定时间内登录次数限制
4.采用双因子认证等
例如短信、邮件等等
靶场DVWA-Brute Force
Low
打开随便输入用户名和密码,提示报错
我们抓包看看
这里将intercept里的内容发送到intruder暴力破解模块。send to intruder在intruder的positions选择中,先点击clear$清除所有的变量。然后分别给username和password这两个字段后面的内容添加add$,添加变量并将attack type的值设置为cluster bomb
Choose an attack type 选择攻击类型
然后设置pyload,在load处可添加密码本
然后点击右上方start attack,开始破解
发现admin password这里长度不一样,在下面进行查看
所以用户名和密码应该就是他们,发送包,回去用它们登录
Medium
直接和上面一样的操作,虽然时间增加了,但是还是跑出来了,应该是多了一个sleep函数,登录失败就会隔几秒才能再次尝试。
High
抓包可以看到后面多了一个token,然后设置参数,用户名、密码、token
做到这里,后面抓token我没做成功,就自行尝试吧