分块传输绕waf
介绍分块传输编码( Chunked transfer encoding )是超文本传输协议( HTTP )中的一种数据传输机制,允许 HTTP由应用服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在 HTTP 协议 1.1 版本( HTTP/1.1 )中提供。通常,HTTP 应答消息中发送的数据是整个发送的,Content-Length 消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。
一般情况 HTTP 请求包的Header 包含 Content-Length 来指明报文体的长度。有时候服务生成 HTTP 回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器一般使用 chunked 编码。在进行 Chunked 编码传输时,在回复消息的 Headers ...
hook native方法and bypass
前言rasp绕过
介绍众所周知,Java 的 RASP 是没有办法直接 Hook Native 方法的,但确实有这个场景的需求。于是 JDK 官方出了一个 java.lang.instrument.Instrumentation#setNativeMethodPrefix ,在 Java 方法映射 C++ 方法的时候加一个前缀,这样相当于创建一个了原有 Native 方法的代理,从而实现了 Hook Native 方法。
native方法解析原理Java 无法直接访问到操作系统底层如硬件系统,为此 Java 提供了 JNI 来实现对于底层的访问。JNI,Java Native Interface,它是 Java 的 SDK 一部分,JNI 允许 Java 代码使用以其他语言编写的代码和代码库,本地程序中的函数也可以调用 Java 层的函数,即 JNI 实现了 Java 和本地代码间的双向交互。
在 Java 命令执行中,Java 执行操作系统命令实际上需要调用操作系统的系统函数( Windows 平台为 CreateProcess API ,*nix 平台是通过 fork 和 exec ...
DCSync和DCShadow攻击
DCSync原理在 DCSync 技术没有出现之前,攻击者要想拿到域内用户的 hash ,就只能在域控制器上运行 Mimikatz 或 Invoke-Mimikatz 去抓取密码 hash ,但是在 2015 年 8 月份, Mimkatz 新增了一个主要功能叫 DCSync ,使用这项技术可以有效地 “模拟” 域控制器并从目标域控上请求域内用户密码 hash 。这项技术为当下域渗透提供了极大地便利,可以直接远程 dump 域内 hash ,另外也衍生出很多的攻击方式。
域控制器( DC )是 Active Directory ( AD )域的支柱,用于高效的管理域内用户,所以在企业当中,为了防止 DC 出现意外导致域内瘫痪,所以都是要布置多台域控作为 AD 域的备份,或者是部署多台域控制器,方便在站点位置本地提供身份验证和其他策略。当企业内网当做部署了多台域控制器后,一台域控进行了数据的更改之后,需要与其他域控进行数据的同步,而这个同步是通过Microsoft的远程目录复制服务协议 (MS-DRSR),该协议是基于MSRPC / DCE/RPC )进行的。并且其 ...
Oracle注入
数据库信息收集1234567891011121314151617# 获取当前数据库名select instance_name from v$instance;# 查询oracle版本select version from v$instance;# 查询操作系统环境select banner from v$version where banner like 'TNS%';# 查询系统所有用户select username from all_users order by username; select name from sys.user$;# 查询当前用户select user from dual;# 查询当前用户的所有权限select * from session_privs;# 获取当前数据库有哪些表select table_name from user_tables;# 查询表的字段(注意表名要大写)select column_name from user_tab_columns where table_name='TB_USER';
...
sql注入预编译无效的情况
错误的预编译使用有的开发人员可能以为只要 sql 语句经过了预编译就不会造成 sql 注入。其实预编译加参数占位才可以防御 sql 注入,只要用了字符串拼接 sql 语句,就都会有 sql 注入的风险。下面是一个错误的示例。
1234567891011121314151617181920212223package com.just.demo;import java.sql.*;public class Demo2 { public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/db1"; String user = "root"; String password = "root"; Conn ...
NTLM-Relay攻击
介绍也叫 NTLM 重放攻击,NTLM 中继攻击。
漏洞点这里要先了解 Windows系统名称解析顺序 。当我们访问一个共享时 net use \aaa ,其寻找这个主机名称会遵循以下的步骤:
本地 hosts 文件( %windir%\System32\drivers\etc\hosts )
DNS 缓存/ DNS 服务器
链路本地多播名称解析( LLMNR )和 NetBIOS 名称服务( NBT-NS )
如果没有在1、2项中找到对应名称,系统就会通过链路本地多播名称解析( LLMNR )和 Net-BIOS 名称服务( NBT-NS )在本地进行名称解析。这时,客户端就会将未经认证的 UDP 广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是这台机器。
因此当用户输入不存在、包含错误或者 DNS 中没有的主机名时,通过 Responder 工具( kali 自带)监听 LLMNR 和 NetBIOS 广播,就可以伪装成受害者要访问的这台机器,并从而让受害者交出相应的登陆凭证。核心过程与 arp ...
入门内网渗透实验一
实验目标熟悉内网渗透的基本流程,熟悉内网渗透时一些基本工具的实验,这个实验基于 Linux 。
环境搭建https://github.com/justdoit-cai/LAN-penetration-exp/tree/main/LAN-penetration-exp1
获取暴露在外网的靶机的权限首先内网渗透的第一步肯定是要先利用外网程序的漏洞来反弹 shell 到自己公网的 vps 上,获取一台外网机器的权限。
持久化webshell一方面为了 webshell 的稳定性,另一方面为了避免程序的漏洞被修复导致我们无法再利用程序的漏洞获取外网靶机的 webshell ,我们需要上传后门到靶机上来持久化 webshell 。
这里主要介绍几种持久化 webshell 的工具。
vshell下载地址https://github.com/veo/vshell
不过不幸的是,这个工具现在被封禁了,停止了更新并且也不给用了。
使用方法下载程序到自己的 vps 上,自己的 vps 要开放 8082 (管理端口)和 8084 (上线靶机端口)端口,然后直接启动程序即可。
这里管理页面的默认账号 ...
Thymeleaf漏洞汇总
Thymeleaf和SpringBoot的对应版本123456SpringBoot Thymeleaf2.2.0.RELEASE 3.0.112.4.10 3.0.122.7.18 3.0.153.0.8 3.1.13.2.2 3.1.2
介绍Thymeleaf 主要存在两种类型的漏洞,一种是出于开发者的失误,让用户可以任意指定视图名导致触发 Thymeleaf 3.x 中的片段表达式解析 RCE 。一种是在解析 Thymeleaf 模板时,其中模板内容被用户可控,导致模板中被用户注入恶意的表达式。
第一种漏洞是 Thymeleaf 的特性,主要是由于控制器在返回视图名时,如果视图名包含片段表达式,就会对其进行预处理,其中会进行 SpEL 表达式的解析,从而造成命令执行。但是官方不承认这是一个框架的漏洞,因为官方认为程序返回的视图名不应该被用户完全控制,这种漏洞是出于开发者的失误。第二种漏洞就是我们常见的 SSTI 类型的漏洞,主要的攻击和防护方法围绕在沙箱逃逸和沙箱加固中,
下面依次来分析这两种漏洞。 ...
Shiro-550不出网回显技术
介绍当我们实战遇到 Shiro-550 漏洞可以打反序列化的时候,如果目标靶机无法出网,我们怎么想办法回显命令执行的结果?
这里最直接的思路是打内存马回显,但是由于 Shiro-550 反序列化的数据在 Header 的 cookie 中,如果直接打内存马会导致 Payload 的长度过长,从而可能超过中间件对 Header 的长度限制 server.max-http-header-size ( Tomcat 默认是 8kb )。
环境: jdk-8u333 , SpringBoot-2.7.18 , Shiro-1.2.4 。
我们直接打入下面的 Filter 内存马发现长度是 9004 刚好超了一点。
打入时会报错:
内存马代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899 ...
Hessian漏洞总结
漏洞点Hessian 在反序列化的时候虽然不会像 Fastjson 会调用目标类的 getter 和 setter 方法,甚至构造方法,但是 Hession 在反序列化 Map 类型的数据时,会创建相应的 Map 对象,并将 Key 和 Value 分别反序列化后使用 put 方法写入数据。在没有指定 Map 的具体实现类时,将会默认使用 HashMap ,对于 SortedMap ,将会使用 TreeMap 。
而熟悉 HashMap 链子的应该知道,HashMap.put() 方法是存在漏洞的链子的。回想之前在利用 HashMap.readObject() 的时候,不能直接使用 put 存入元素,而需要通过反射修改 HashMap 的属性来存入元素,就是为了避免 HashMap.put() 的时候提前触发漏洞,例如参考 Fastjson漏洞总结 。
此外, Hessian 提供了机制可以反序列化没有实现 Serializable 接口的类,这就使 Hessian 的链子可以更加广泛。
分析常见的以 Map.put() 开头的链子有下面几个:
123HashMap.put() ...