Καλημέρα αγαπητό FORUM !
Θέλω να δημιουργήσω ένα vbs αρχείο, το οποίο αν ο χρήστης που το τρέχει δεν έχει δικαιώματα διαχειριστή να τα ανακτά με το γνωστό prompt "Εκτέλεση ως..." και το παραθυράκι για την εισαγωγή των στοιχείων (όνομα, κωδικός) και να επανα-καλεί τον εαυτό του με δικαιώματα διαχειριστή πλέον.
Μέχρι στιγμής το έχω κάνει με 2 ξεχωριστά vbs αρχεία, όπου το πρώτο ανακτά τα δικαιώματα διαχειριστή κ καλεί το δεύτερο για τη βασική λειτουργία που θέλω.
* Υπάρχει τρόπος να γίνει μόνο με ένα vbs αρχείο;
* Έχω βρει αυτό εδώ http://www.kellestine.com/self-elevate-vbscript/, αλλά το αρχείο θα τρέχει σε υπολογιστές με Windows XP όπου δεν υπάρχει διαθέσιμη η εντολή whoami.
* Θέλω το αρχείο vbs να τρέχει out-of-the-box, χωρίς να απαιτείται η εκτέλεση κάποιου άλλου αρχείου που δεν υπάρχει ήδη από "μαμά-εγκατάσταση" των Windows XP.
Εμφάνιση 1-7 από 7
-
04-02-14, 01:55 Δημιουργία Self Elevate VBScript ; #1
-
04-02-14, 02:42 Απάντηση: Δημιουργία Self Elevate VBScript ; #2
Έχω την εντύπωση ότι αυτό που θες να κάνει απαιτεί το UAC.
Το UAC υπάρχει από Vista και μετά, όχι XP.
Άρα στα XP δεν μπορείς να το κάνεις.
http://support.microsoft.com/kb/981778
http://code.msdn.microsoft.com/windo...ation-644673d3
http://blogs.msdn.com/b/codefx/archi...cess-in-c.aspx
-
04-02-14, 16:59 Απάντηση: Δημιουργία Self Elevate VBScript ; #3
Ευχαριστώ για την απάντησή σου. Δεν εννοώ αυτό ακριβώς, αλλά το Script να ελέγχει αν ο χρήστης που το τρέχει έχει δικαιώματα διαχειριστή αλλιώς να εμφανίζει το γνωστό παραθυράκι που ζητάει την εισαγωγή στοιχείων...
Να μην κάνεις δλδ εσύ κάθε φορά δεξί κλικ "Εκτέλεση ως...", αλλά από μόνο του το Script.
Αυτό το έχω καταφέρει για ένα άλλο dos-script μέσω shell script (bat δλδ), οπού το ίδιο ξανακαλεί τον εαυτό του έχοντας τα "σωστά" δικαιώματα.
Όταν το κάνω όμως αυτό με το VBScript, τότε το πρόγραμμα πέφτει σε loop ζητώντας κάθε φορά δικαιώματα διαχειριστή πετάγοντας το παραθυράκι "Εκτέλεση ως...".
Αυτό σημαίνει ότι ή δεν περνάει τα δικαιώματα του διαχειριστή ή ότι πρέπει με κάποιο τρόπο να το κατευθύνω να μην ξεκινάει πάλι απ' την αρχή αλλά μετά από κάποιο σημείο για να μην ξαναελέγχει για δικαιώματα.
Αν και έτσι πρέπει να γίνει για να είναι σίγουρο ότι έχουν περαστεί τα δικαιώματα διαχειριστή στο πρόγραμμα.
-
04-02-14, 22:54 Απάντηση: Δημιουργία Self Elevate VBScript ; #4
-
06-02-14, 17:24 Δημιουργία Self Elevate VBScript ; #5
Έχεις λάθος τον αλγόριθμο, γι'αυτό πέφτει σε loop το vb script σου.
Ο έλεγχος που κάνεια με το whoami είναι λάθος. Γι'αυτό επιστρέφει πάντα false.
Αν θες πόσταρε εδώ τις πρώτες γραμμές από το script σου, για να σου πούμε πως ακριβώς να το κάνεις.Παράθεση Posted from Android app
-
07-02-14, 15:04 Απάντηση: Δημιουργία Self Elevate VBScript ; #6
AgentWolf o WAntilles έχει δίκιο νομίζω. Είχα βρει το λάθος στον κώδικα με το loop και το διόρθωσα, αλλά (αν δεν έχω και τώρα κάποιο λάθος) αυτό που γίνεται είναι να μην περνάει τα δικαιώματα διαχειριστή πίσω στο πρόγραμμα. To λέω γιατί στον κανονικό κώδικα μέσα στην Ιnitialize() υπάρχουν εντολές που απαιτούν δικαιώματα διαχειριστή κ το πρόγραμμα μου εμφανίζει σφάλμα λέγοντας ότι δεν έχω δικαιώματα διαχειριστή για την εκτέλεση αυτής της λειτουργίας.
Να υπενθυμίσω AgentWolf ότι το δουλεύω σε WinXP, το αναφέρω επειδή λες για την εντολή whoami...
Παραθέτω ενδεικτικά ένα κομμάτι κώδικα, όπου τρέχει το αρχείο με δικαιώματα διαχειριστή (με χρήση της εντολής runas) δίνοντας τα στοιχεία της σύνδεσης μέσα απ΄τον κώδικα. Καθώς δεν θέλω να εμφανίζεται το παραθυράκι κ να τα ζητάει απ΄τον χρήστη...
Όπου, runme.exe είναι το ίδιο το vbs αρχείο (runme.vbs) compiled σε exe. Δλδ, καλεί τον εαυτό του.
Στο vbs κώδικα κοιτάει τη registry για το αν ο συνδεδεμένος χρήστης είναι διαχειριστής ή όχι, ενώ στο bat αρχείο αν έχει πρόσβαση σε κάποιο φάκελο συστήματος.
Ο λόγος που δουλεύει το bat αρχείο είναι ότι αρχικά προσπαθεί μέσω cmd να αποκτήσει πρόσβαση σε φάκελο συστήματος κ εφόσον δεν τρέχει με δικαιώματα διαχειριστή, τότε ξανατρέχει μέσω cmd και δικαιώματα διαχειριστή τον εαυτό του και επειδή οι εντολές εκτελούνται σε περιβάλλον cmd μπορούν και αποκτούν πρόσβαση.
Εδώ είναι που κολλάω και δεν ξέρω πως κ αν μπορώ να κάνω την αντίστοιχη μετατροπή στο vbs αρχείο. Τι εντολή δλδ πρέπει να μπει μέσα στην IsAdmin() ώστε όταν το πρόγραμμα εκτελέιται με δικαιώματα διαχειριστή να οδηγεί το πρόγραμμα στην Ιnitialize().
Μια άλλη σκέψη ήταν να βγάλω εκτός τον έλεγχο των δικαιωμάτων και να το κάνω να τρέχει πάντα ως διαχειριστής, να βγει δλδ η function IsAdmin() κ να βάλω μια παράμετρο κατι σαν flag όταν ξανακαλείται να πηγαίνει σε άλλο κομμάτι κωδικα για να μην πέσει σε loop...
Κώδικας:REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM --> If error flag set, we do not have admin. if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt ) else ( goto gotAdmin )
Κώδικας:Option Explicit If IsAdmin Then Initialize If NOT IsAdmin Then SetAdmin Function IsAdmin() IsAdmin = False On Error Resume Next key = CreateObject("WScript.Shell").RegRead("HKEY_USERS\S-1-5-19\Environment\TEMP") If err.number = 0 Then IsAdmin = True End Function Function SetAdmin() Const USER = "admin" Const PASS = "pass" Const WSNAME = "\runme.exe" Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim CurrentDirectory : CurrentDirectory = fso.GetAbsolutePathName(".\") Dim WSHShell : Set WshShell = CreateObject("WScript.Shell") Dim oProcessEnv : Set oProcessEnv = WshShell.Environment("PROCESS") Dim sPathToRunAs : sPathToRunAs = oProcessEnv("SystemRoot") & "\System32\runas.exe" Dim iReturnCode If Not fso.FileExists(sPathToRunAs) Then : WScript.Quit(1) 'Can't find RunAs 'Msgbox "runas /user:" & USER & " " & CHR(34) & CurrentDirectory & WSNAME & CHR(34) iReturnCode = WshShell.Run("runas /user:" & USER & " " & CHR(34) & CurrentDirectory & WSNAME & CHR(34), 2, FALSE) Wscript.Sleep 40 ' Time for window to open. WshShell.AppActivate(sPathToRunAs) ' Activate the Window Wscript.Sleep 3 WSHShell.SendKeys PASS & "~" ' Send the password Wscript.Sleep 3 End Function Function Initialize() MsgBox "Go on as admin from here..." ' the rest code.... End Function
Τελευταία επεξεργασία από το μέλος djastral232 : 07-02-14 στις 17:31.
-
08-02-14, 16:51 Απάντηση: Δημιουργία Self Elevate VBScript ; #7
Τελικά, μετά από πολύ trial-and-error κ σύμφωνα με την τελευταία μου σκέψη για flag, δούλεψε.
Έτσι, το (exe compiled vbs) script αρχικά ελέγχει αν το έχουμε ξανακαλέσει μέσω μιας έξτρα παραμέτρου (flag). Aν όχι, τότε ξανακαλεί τον εαυτό του περνώντας αυτόματα (μέσω του κώδικα -σταθερές) τα στοιχεία για τα δικαιώματα διαχειριστή και στη συνέχεια, εφόσον η τιμή της flag είναι αληθής ανακατευθύνεται στην Initialize().
Ενώ ακούγεται εύκολο, δυσκολεύτηκα να ενώσω μεταξύ τους κάποιες "τεχνικές", καθώς ήταν η πρώτη φορά που ασχολήθηκα με vbscipt. Nα σημειώσω ότι προτίμησα να χρησιμοποιήσω την Run() αντί της Exec(), επειδή η πρώτη είναι synchronized function ενώ η δεύτερη μου προκαλούσε προβλήματα. Τέλος, ο τρόπος αυτός κατάφερε και δούλεψε επειδή το αρχείο μεταγλωτίστηκε σε exe. Διαφορετικά η runas δεν θα το έτρεχε.
Είναι μια ψευδο-elevate-τεχνική θα έλεγα, με την προϋπόθεση ότι έχουμε δώσει σωστά το <όνομα διαχειριστή> και τον <κωδικό> του, όπου τρέχει το exe αρχείο μας με δικαιώματα διαχειριστή χωρίς ο απλός χρήστης να εμπλέκεται στη διαδικασία εισαγωγής των στοιχείων του. Αυτό είναι χρήσιμο σε περιπτώσεις όπου θέλουμε ένας απλός χρήστης να εκτελέσει (προσωρινά μέσω του script) κάποιες λειτουργίες χωρίς να μάθει τα στοιχεία του λογαριασμού διαχειριστή.
Με την ουσιαστική έννοια του όρου "elevate" o WAntilles είχε δίκιο.
Παρόμοια Θέματα
-
SOS σβηστηκε ο δισκος μετα απο δημιουργία μιας μονάδας αποκατάστασης
Από apostatis στο φόρουμ WindowsΜηνύματα: 19Τελευταίο Μήνυμα: 21-09-13, 19:20 -
Προβλημα με Ups Lamtech 1600va self test χωρις λογο.
Από none1 στο φόρουμ Σκληροί δίσκοι, αποθηκευτικά μέσα και λοιπά περιφερειακάΜηνύματα: 1Τελευταίο Μήνυμα: 01-04-13, 19:31
Bookmarks