Willkommen bei Network & Security     remoteshell-security.com
Partnerseiten
login.php?sid=d4726106c98e998572744f265b843ce7 profile.php?mode=register&sid=d4726106c98e998572744f265b843ce7 faq.php?sid=d4726106c98e998572744f265b843ce7 memberlist.php?sid=d4726106c98e998572744f265b843ce7 search.php?sid=d4726106c98e998572744f265b843ce7 index.php?sid=d4726106c98e998572744f265b843ce7

Foren-Übersicht » Programmierung » Linux /bin/su aus einem Java Programm heraus starten
Neues Thema eröffnen  Neue Antwort erstellen Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
Linux /bin/su aus einem Java Programm heraus starten
BeitragVerfasst am: 27.09.2007 17:22 Antworten mit Zitat
duddits
Anmeldedatum: 03.01.2006
Beiträge: 569
Wohnort: /proc




Hallo zusammen,

wenn ich z.B. in C versuche su aus einem Programm heraus zu starten, dann mache ich das wie folgt (vereinfacht dargestellt):
Code:
#include <stdio.h>
#include <stdlib.h>

int main(void){
if(system(NULL)==0){
printf(" :-( \n");
}else{
system("su");
}
}


und da funktioniert es Reibungslos.
Wenn ich es jedoch in Java versuche erhalte ich folgende Fehler-Meldung:
su: Muss von einem Terminal gestartet werden

Der Code sieht wie folgt aus:
Code:
import java.io.*;
import java.util.Scanner;
 
public class mysu
{
  public static void main( String[] args ) throws IOException
  {
    ProcessBuilder builder = new ProcessBuilder( "bash", "-c", "su" );
    builder.directory( new File("/") );
    Process p = builder.start();
 
    Scanner s = new Scanner( p.getInputStream() ).useDelimiter( "\\Z" );
   if (!s.hasNext()) {
   Scanner sa = new Scanner(p.getErrorStream());
   while (sa.hasNext()) {
   System.out.println(sa.nextLine());
   }
   }
while (s.hasNext()) {
    System.out.println( s.next() );
}
  }
}


Ich vermute die Ursache der Meldung darin, das mein derzeitiges Konstrukt nicht in der Lage ist, Input von Programmen (hier su) entgegen zu nehmen.
Doch leider weiß ich auch nicht wie ich das am besten realisieren kann.
Ich hoffe einer von euch kann mir hier weiter helfen.

P.S. kann mir einer von euch nen Link geben, wo ich mir den Quelltext von su anschauen kann?


Gruß
Daniel

_________________
Quidquid agis, prudenter agas et respice finem!

Jabber ID: duddits@amessage.info
Webseite: http://www.remoteshell-security.com
Weblog: http://blog.remoteshell-security.com
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Jabber ID
BeitragVerfasst am: 28.09.2007 15:58 Antworten mit Zitat
BlackLotus
Anmeldedatum: 04.01.2006
Beiträge: 717
Wohnort: www and 127.0.0.1/localhost




Probier mal im java programm die term variablen zu setzen.
Der muss das als shell erkennen.Du verstehst?Leider kann ich kein Java sonst würd ich dir helfen Wink

_________________
Eine Kette ist nur so stark wie ihr schwächstes Glied.

Die Welt wird nicht von denen bedroht die böse sind,sondern von denen die das Böse zulassen.
Albert Einstein

Man kommt nicht aus seiner Haut raus.....,
Nur Schlamm kann das Very Happy

http://blackwiki.bl.ohost.de
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
BeitragVerfasst am: 07.10.2007 15:49 Antworten mit Zitat
duddits
Anmeldedatum: 03.01.2006
Beiträge: 569
Wohnort: /proc




Hallo,

erstmal danke für deine schnelle Antwort. Ich habe mich erstmal in verschiedenen Dokumentationen eingelesen, daher die verspätete Rückmeldung.

Derzeit bin ich auch schon ein paar Schritte weiter Richtung Ziel. Ich hatte ich meinem oben versuchten Weg, vergessen die Daten direkt an den Prozess (hier su) weiter zu geben:

Code:
import java.io.*;
import java.util.*;

public class sutest {

public static void main(String[] args) {
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command( "bash", "-c", "su" );
builder.directory( new File("/") );
Process p = builder.start();

PrintStream printer = new PrintStream(p.getOutputStream());
String str="my password";
printer.println(str);
printer.flush();

Scanner s = new Scanner( p.getInputStream() ).useDelimiter( "
Z" );

if (!s.hasNext()) {
Scanner sa = new Scanner(p.getErrorStream());
while (sa.hasNext()) {
System.out.println(sa.nextLine());
}
}

while (s.hasNext()) {
System.out.println( s.next() );
}
}catch(Exception ex){
ex.printStackTrace();
}

}

}

Allerdings ändert das Ganze nichts an der Meldung.

Also, es scheint so, das su eine Überprüfung durchführt, ob es von einem Terminal gestartet wurde und aus welcher Shell heraus.
Diese findet aber anscheinend nicht an der Variabel statt, den diese habe ich richtig gesetzt (mit xterm^^).
Ich kann mich natürlich täuschen, daher bin ich auch auf der Suche nach dem Quelltext von su und auch den von der bash.
Jedoch konnte ich von keinen der beiden Programme, den Quelltext finden.

Ich hoffe einer von euch kann mir da weiter helfen.



Gruß
Daniel

_________________
Quidquid agis, prudenter agas et respice finem!

Jabber ID: duddits@amessage.info
Webseite: http://www.remoteshell-security.com
Weblog: http://blog.remoteshell-security.com
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Jabber ID
Linux /bin/su aus einem Java Programm heraus starten
Foren-Übersicht » Programmierung
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Alle Zeiten sind GMT + 1 Stunde  
Seite 1 von 1  

  
  
 Neues Thema eröffnen  Neue Antwort erstellen  


Forensicherheit

Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin
Deutsche Übersetzung von phpBB.de


remoteshell-security.com | Partner | Boardregeln | Impressum