脚本无法读取密码

时间:2014-05-20 18:33:46

标签: python elevated-privileges

不幸的是,Python脚本旨在使用提升的凭据运行

  1. 它仍然提示我输入密码
  2. 当我输入正确的密码时,它不起作用
  3. 这是script1,它使用提升的凭据调用script2

    import os
    import sys, subprocess, socket, string
    import wmi, win32api, win32con
    import win32com.shell.shell as sh   
    
    ASADMIN = '/user:DOMAIN\username'
    os.system('"runas /user:DOMAIN\username "D:/Python27/python.exe script2.py sender-ip=10.10.10.10 < password.txt""')
    sys.exit(0)
    
    if sys.argv[-1] != ASADMIN:
        script = os.path.abspath(sys.argv[0])
        params = ''.join([ASADMIN] + ['D:\Python27\python.exe',script] + sys.argv[1:])
        sh.ShellExecuteEx(lpVerb='runas',lpFile=sys.executable,lpParameters=params)
        sys.exit(0)
    

    这是script2

    导入sys,subprocess,socket,string import wmi,win32api,win32con

    对于[item.strip(&#39; sender-ip =&#39;)中的args,对于sys.argv [1:]中的项目:

    userIP = args
    userloggedon = ""
    
    # perform system lookup of IP address
    userIP = "\\\\" + userIP
    
    pst = subprocess.Popen(
            ["D:\pstools\psloggedon.exe", "-l", "-x",  userIP],
            stdout = subprocess.PIPE,
            stderr = subprocess.PIPE
        )
    
    out, error = pst.communicate()
    
    userLoggedOn = out.split('\n')[1].strip()
    print 'userId={}'.format(userLoggedOn)
    f = open('D:\SymantecDLP\Protect\plugins\output.txt', 'w')
    f.write('userId={}'.format(userLoggedOn))
    

    未创建output.txt

    有什么想法吗?

    修改

    我也读过这个帖子,How to supply password to runas command when executing it from java

    但无论我尝试什么,我都会收到错误

    Attempting to start c:\test.bat as user "DOMAIN\username" ...
    RUNAS ERROR: Unable to run - c:\test.bat
    1326: Logon failure: unknown user name or bad password.
    

2 个答案:

答案 0 :(得分:1)

让我们当时谈谈你的问题。

<强> 1。它仍然提示我输入密码

在第

os.system('"runas /user:DOMAIN\username "D:/Python27/python.exe script2.py sender-ip=10.10.10.10 < password.txt""')

您正在为script2提供密码。 runas命令仍然需要密码,因为它试图以另一个用户身份运行程序。

<强> 2。当我输入正确的密码时,它无法正常工作

嗯......代码确实清楚了。但是,在提问时你必须更加具体。现在看一下您的代码,我可以看到您正在尝试在远程计算机上执行ping

远程机器可能有防火墙吗? 您是否尝试过手动执行ping

编辑:未创建output.txt文件,并且运行脚本不会告诉您有关写入文件的错误,显然您的代码正在点击其中一个{{1行。

答案 1 :(得分:0)

您可以使用PsExec https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

您可以提供用户名和密码,执行不需要提升为admin:

psexec [\ computer [,computer2 [,...] | @file]] \ [ - u user [-p psswd] [-ns] [ - r servicename] [ - h] [ - l] [ - s | -e] [ - x] [ -i [session]] [ - c [-f | -v]] [ - w directory] ​​[ - d] [ - ] [ - an,n,...] cmd [arguments]

使用-e开关提供与Runas / netonly相同的结果:

-e不加载指定帐户的个人资料。