[Python] RAT Warty - neues problem

Moinsen ;)

Zuerst, ich will keinen! Trojaner oder sonst irgendwas Sciptkiddie mäßiges machen.

Hintergrund;
Immer mehr Leute in meinem Freundeskreis steigen auf Linux um.
Und ich darf dann als Admin herhalten und die ganzen probs lösen.
Das ist ziemlich zeitintensiv da immer vorbei zu checken und kleinste probs zu lösen...

Und da ich gerade seit Montag Python lerne, hats gepasst ^^
Deshalb wollte ich ein Wartunstool(WartY) proggen um mir zeit zu sparen...

Quelltext:
Code:
#!/usr/bin/python
print "WartY Server-Client VS 0.1 - welcome\n"
import socket
import time
time.sleep(0.5)
ip = 'localhost'
port = '12345'
name = 'wartysrv'
passw = 'passw'
cip = 'localhost'
cport = '123454'
cpass = 'passw'

def connect():
    cip = raw_input("Please enter Ip to connect (default is localhost)\n")
    cport = raw_input("Please enter Port-number (default is 12345)\n")
    cpassw = raw_input("Please enter Password of Server\n")
    return

def makesrv():
    name = raw_input("Please enter name of Server (default is wartysrv)\n")
    port = raw_input("Please enter Port of Server (default is 12345)\n")
    passw = raw_input("Please enter Password of Server for varification\n")
    create()
    return

def create():
    Y = "Y"
    n = "n"
    print (ip + "\n"+ port + "\n"+ name)
    print "Make Server? Y/n"
    do = raw_input()
    if do == Y:
        fobj = open(name + ".py", "w")
        fobj.write("import select\nimport socket\nport = port\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nlistener.bind(('', port))\nlistener.listen(5)\nprint 'Listening on port ', port")
        fobj.close
    elif do == n:
        prompt()
    else:
        print "Please enter a valid answer!"
    return

def prompt():
    inpt = raw_input("Type hlp for help\n")
    if inpt == "hlp":
        print ("commands:\n'hlp'.....help\n'makesrv'.....create new Server\n'exit'.....exit Warty")
    if inpt == "makesrv":
        makesrv()
    if inpt == "exit":
        print ("Auf wiedersehen!")
        exit()
    prompt()
#start the command prompt
prompt()


Irgendwie werden die Variablen bei der Abfrage von makesrv nicht verändert -.-
wenn die datei erstellt wird, sind die default variablen genommen wurden ;)
Ich google mir schon die hände blutig ^^

PS: wie man sieht bin ich noch nich fertig, arbeite vlt seit 2 std daran :D
MfG
 
Vielen dank!

ich dachte ich hätte globale variablen genommen,(habe ich wohl auch xP)

ich werdes nachher erst versuchen können, da gerade Kommunion meiner kleinen Stiv-sis is....


BTW: Das Buch habe ich durchgeackert ^^
sollte ich vlt ein 2tes mal lesen ^^
 
Du hast ja auch globale Variablen genommen, aber wenn du auf diese in einer Funktion zugreifen möchtest musst du das Schlüsselwort global benutzen:

Code:
def f(): 
    global s 
    s = "lokaler String" 
    print s 
 
s = "globaler String" 
f() 
print s
Ausgabe
Code:
lokaler String 
lokaler String

EDIT:
Fernwartung über mehrere System ist am besten VNC (oder wie schon erwähnt SSH) oder bei Windoof Teamviewer
 
Globale Variablen sind böse, also sollte man das ganze anders lösen. :)
Und das Buch in deinem Link ist auch schrott. Also bitte nicht lesen. :)
 
Ich bin Java-Programmierer, ich denk nicht in Pyhton ;)
Zum Buch: Es war die erste brauchbare Lektüre. die ich über google gefunden habe. Außerdem funktioniert es so wenigstens xD.
Wenn man schon sowas macht, kann man es doch gleich in perl,java,c,c++ machen.
 
Danke für eure Antworten...

Ich weis, dass VNC ziemlich gut ist, nur passte es, dass ich gleich noch n bisl python lerne ^^

Es gibt ziemlich viele vorteile gegenüber anderer Programmiersprachen...
jeder hat seine eigenen Vorlieben...Ich habe schon C,Vb,Perl,PHP etc...alles angefangen, nur python begeistert mich einfach mehr ^^
aber gut...

SSh wird denke ich nicht nötig sein, ich muss nur den PC eines/zweier Freunde administrieren...
oder wäre es sinnvoll, wenn ja wieso?
@Darkslide, was sollte an globalen variablen so falsch sein?
Ich muss doch von verschiedenen Funktionen druff zugreifen....
Wäre doch angebracht oder?
Hast du vlt. auch vorschläge für bessere Referenzen, denn das Buch ist echt nich so doll ^^

Danke nochmals ^^

/e mein Quellcode sieht jetzt folgendermaßen aus:
Code:
#!/usr/bin/python
print "\nWartY Server-Client VS 0.1 - Welcome!\n"
import socket
import time
time.sleep(0.5)
ip = 'localhost'
port = '12345'
name = 'wartysrv'
passw = 'passw'
cip = 'localhost'
cport = '123454'
cpass = 'passw'

def connect():
    global cip
    global cport
    global cpass
    cip = raw_input("Please enter Ip to connect (default is localhost)\n")
    cport = raw_input("Please enter Port-number (default is 12345)\n")
    cpassw = raw_input("Please enter Password of Server\n")
    return

def makesrv():
    global name
    global port
    global passw
    name = raw_input("Please enter name of Server (default is wartysrv)\n")
    port = raw_input("Please enter Port of Server (default is 12345)\n")
    passw = raw_input("Please enter Password of Server for varification\n")
    create()
    return

def create():
    Y = "Y"
    n = "n"
    print ("PORT: "+ port +"\nNAME: "+ name +"\nPASS: "+ passw +"\n")
    print "Make Server? Y/n"
    do = raw_input()
    if do == Y:
        fobj = open(name + ".py", "w")
        fobj.write("import select\nimport socket\nPORT = "+ port + "\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nlistener.bind('', PORT))\nlistener.listen(5)\n")
        fobj.close
        print ("Server erstellt : "+ name +".py")
    elif do == n:
        print ("quit makesrv, returning to command-prompt of Warty!\n")
        prompt()
    else:
        print "Please enter a valid answer!"
        print "Make Server? Y/n"
        do = raw_input()
    return

def prompt():
    inpt = raw_input("Enter Commands please! (hlp for help)\n")
    if inpt == "hlp":
        print ("commands:\n'hlp'.....help\n'makesrv'.....create new Server\n'exit'.....exit Warty")
    elif inpt == "makesrv":
        makesrv()
    elif inpt == "exit":
        print ("Auf wiedersehen!")
        exit()
    else: 
        prompt()
    prompt()
#start the command prompt
prompt()

jetzt gehts ans ausbauen, hat wer was zu meckern?

/e2:
ich will das ganze ja per einfacher passwortabfrage machen, aber da im server das lauschen in einer schleife läuft, und ich da die passwortabfrage reinmachen:
(so ungefähr)
Code:
import select
import socket
PORT = 12345
PASS = 'a'
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.bind(('', PORT))
listener.listen(5)
while True:
   conn,addr = listener.accept()
   conn.send('Got you on %s' % str(addr))
   conn.send(passwortabfrage())"""hier würde ich dann die passwortabfrage im client aufrufen- aber wie in variable speichern?"""
    if conn.recv == pass
        func() #funktion fürs abfangen und umsetzten von befehlen...
    else:
        conn.send('Wrong pass try again!')
oder so...
erstmal theoretisch denn so würde es nicht funktionieren ^^
pervers ^^
hat da wer ne idee?
 
Original von CrAc
SSh wird denke ich nicht nötig sein, ich muss nur den PC eines/zweier Freunde administrieren...
oder wäre es sinnvoll, wenn ja wieso?

Du hast keinen blassen Schimmer was SSH ist, oder :)? Macht aber nichts. Also SSH -Secure Shell- ist eine Remoteshell. Da ein SSH Daemon praktisch auf jeder Linuxkiste von Natur aus installiert (so wars frueher zu mind mal ;)) macht es Sinn diesen zu nutzen, da der komplette Netzwerkverkehr verschluesselt ist, was besonders wichtig ist, wenn du mal Passwoerter ruebersendest, die nicht jeder gleich lesen soll. Ansonsten laesst sich SSH ganz gut beschreiben wie ein normales Konsolenfenster (und damit alles was man brauch um Linux zu administrieren) auf deinem Rechner, mit dem Unterschied, dass halt alles auf der Kiste deine Freundes von statten geht. Fuer weitere Informationen: http://de.wikipedia.org/wiki/Secure_Shell
 
Code:
#!/usr/bin/python

import socket
import sys

print "\nWartY Server-Client VS 0.1 - Welcome!\n"

def connect():
    
    cip = raw_input("Please enter Ip to connect (default is localhost)\n") or "localhost"
    cport = raw_input("Please enter Port-number (default is 12345)\n") or "12345"
    cpassw = raw_input("Please enter Password of Server\n") or "passw"

def makesrv():

    name = raw_input("Please enter name of Server (default is wartysrv): ") or "wartysrv"
    port = raw_input("Please enter Port of Server (default is 12345): ") or "12345"
    passw = raw_input("Please enter Password of Server for varification: ") or "passw"
    create(port, name, passw)

def create(port, name, passw):

    print ("PORT: "+ port +"\nNAME: "+ name +"\nPASS: "+ passw + "\n")
    while True:
        do = raw_input("Make Server? Y/n: ")
        if do == "Y":
            fobj = open("%s.py" %name, "w")
            fobj.write("import select\nimport socket\nPORT = "+ port + "\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nlistener.bind('', PORT))\nlistener.listen(5)\n")
            fobj.close
            print ("Server erstellt : %s.py" %name)
            break
                       
        elif do == "n":
            print ("quit makesrv, returning to command-prompt of Warty!\n")
            prompt()
                       
        else:
            print "Please enter a valid answer!"
            print "Make Server? Y/n"

def prompt():

    while True:
        inpt = raw_input("Enter Commands please! (hlp for help)\n")
        
        if inpt == "hlp":
            print ("commands:\n'hlp'.....help\n'makesrv'.....create new Server\n'exit'.....exit Warty")
        
        elif inpt == "makesrv":
            makesrv()
            
        elif inpt == "exit":
            sys.exit()
            
        else: 
            print "Fehlerhafte Eingabe"

if __name__ == "__main__":
    prompt()

Der Code lässt sich mit anderen Strukturen besser lösen, jedoch wollte ich nicht deine gesamte Struktur zerstören. Die Ausgaben wegen Leerzeichen musst du noch selber formatieren.
Gloabale Variable braucht man nie, da sich Probleme immer eleganter und besser ohne gloabal lösen lässt.

http://wiki.python.de/Die_global-Anweisung?highlight=(global)

//edit: Die Passwortabfrage sollte nicht schwer sein. Du sagst dem Client er soll das Passwort eingeben und per server.send sendest du das Passwort in einem String. Diesen String fängst du im Server ab und überprüfst ihn halt.
 
Danke euch beiden xP
danköööööööööööö

meld mich dann nochma wenns probs gibt ^^

/e: ok jetzt hänge ich schon wieder xD

Ziel:
per os.xxx() infos holen, funktionen ausführen etc...
errors und outputs sollen wieder an den client gesendet werden...

also will ich sozusagen eine shell simulieren..

(wenns möglich ist würde ich auch gerne einen log des servers machen, wo er halt alles reinschreibt...)

aktueller quelltext:

Client:
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Made by: --
#Whats WartY?:
#WartY is made, to connect to a Server for remote administration.
#You have to verify and type a password...
#after that you're able to command the Server how you supposed to do
#-----------------------------
#        finally: s.close()
#while True: 
#print ("Connected to Host")
# s.recv(1024)
#print "[%s] %s" % (ip,antwort)
#-----------------------------
print "\n======================================\n WartY Server-Client VS 0.2 - Welcome!\n======================================\n"
import socket
import sys
import os
#connect to server
def connect():
    
    port = 1111
    ip = raw_input("IP-Adresse: ") or "127.0.0.1" 
    port_int = raw_input("Port: ")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    try:
        s.connect((ip, port))

    except socket.error, (value,message): 
        print ("Unable to connect:\n" + message +"\nPlease Try again:\n")
        connect()
    try: 
        while 1:
            data = raw_input('> ')
            if not data: break
            s.send(data)
            data = s.recv(1024)
            if not data: break 
            print data
    finally:
        s.close()
#get values for makeing servers ( create() )
def makesrv():
    print ("================= Create a new server =================\n")
    name = raw_input("Please enter name of Server (default is wartysrv): ") or "wartysrv"
    port = raw_input("Please enter Port of Server (default is 12345): ") or "12345"
    passw = raw_input("Please enter Password of Server for varification: ") or "passw"
    create(port, name, passw)

#create new servers
def create(port, name, passw):

    print ("\n- - - - - - - - - -\nPORT: "+ port +"\nNAME: "+ name +"\nPASS: "+ passw + "\n- - - - - - - - - -\n")
    while True:
        do = raw_input("Make Server? Y/n: ")
        if do == "Y":
            fobj = open("%s.py" %name, "w")
            fobj.write("import select\nimport socket\nPORT = "+ port + "\nPASS = '"+ passw +"'\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nlistener.bind(('', PORT))\nlistener.listen(5)\nwhile True:\n   conn,addr = listener.accept()\n   conn.send('Got you on %s' % str(addr))\n   conn.recv(1024)")
            fobj.close
            print ("Server erstellt : %s.py" %name)
            break
                       
        elif do == "n":
            print ("quit makesrv, returning to command-prompt of Warty!\n")
            prompt()
                       
        else:
            print "Please enter a valid answer!"

#information about WartY and its usage
def info():
    print ("=================\nWartY Information\n=================\n")
    print ("Version:.....0.2")
    print ("Developer:....--\n")
    print ("Contact:\n--")
    print ("For usage read the Readme.txt file!\n- - - - - - - - - - - - - - - - - - -\n")
#command prompt on startup
def prompt():

    while True:
        inpt = raw_input("Enter Commands please! (hlp for help)\n")
        
        if inpt == "hlp":
            print ("commands:\n'hlp'.....help\n'makesrv'.....create new Server\n'exit'.....exit Warty\n'info'.....get information about WartY and its usage")
        
        elif inpt == "makesrv":
            makesrv()

        elif inpt == "connect":
            connect()
            
        elif inpt == "info":
            info()

        elif inpt == "exit":
            sys.exit()
            
        else: 
            print "Wrong command - please verify if command is valid!"

if __name__ == "__main__":
    prompt()

Server (modifiziert!!)
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import socket
import threading, thread
import os
PORT = 1111
PASS = 'passw'
def handler(s,addr):
    while 1:
        while 1:
            data = s.recv(1024)
            if data == "sinfo":
                listener.send(os.uname())
            if not data: break 
            print data
    s.close()

listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    listener.bind(('', PORT))
except ValueError,e:
    print e

listener.listen(5)

while 1:
       print ("waiting for connection...")
       s, addr = listener.accept()
       print ("...connected from:", addr)
       thread.start_new_thread(handler, (s,
addr))

serversock.close()


Ich google mich tot...
ich habe bis jetzt noch nichts verwertbares gefunden, was überhaupt in die nötige richtung geht...
die meisten tuts besprechen blos die verwendung von sockets :X


danke im vorraus, MfG CrAc
/e: BTW:
WartY soll mittlerweile meinen zukünftigen Server steuern :D
 
Zuletzt bearbeitet:
Zurück
Oben