2014-09-04 3 views
2

Windows에서 runas 도구를 호출하고 자동으로 암호를 입력해야하는 C# 프로그램을 작성하려고합니다. 내가 뭘하려

은 : 무슨 문제runas를 하위 프로세스로 시작하고 암호를 stdin에 쓰십시오?

Process runas = new Process(); 

runas.StartInfo.FileName = "runas"; 
runas.StartInfo.UseShellExecute = false; 
runas.StartInfo.RedirectStandardInput = true; 
runas.StartInfo.Arguments = "\"/user:domain\\username\" \"cmd.exe\""; 

runas.Start(); 

StreamWriter stream = runas.StandardInput; 
stream.WriteLine("our super secret password"); 
stream.Flush(); 

stream.Close(); 

runas.WaitForExit(); 
runas.Close(); 


:
을 나는 다음과 같은 출력을 얻을. (내 독일어 창에서 나를 번역)

Please enter the password for "...": 
Trying to execute cmd.exe as user "kfz\dummy"... 
RUNAS-ERROR: cmd.exe could not be executed 
1326: Authentication failed: unknown username or password. 



예, 암호 및 사용자 이름을 확인 quadrupel. 명령 줄에 모든 것을 직접 입력하면됩니다.
내가, 아니 성공을뿐만 아니라 출력을 리디렉션하지 않고 그것을 읽는 시도 :와 내가 실험 무엇

. 같은 행동

stream.Write("our super secret password"); 
stream.Write("our super secret password\n"); 
stream.Write("our super secret password\r\n"); 

모든 결과 :
나는 다른 스트림에 쓰기의 변형을 시도했다.


내가 눈치 무엇 :

에서 runas 프로세스 나 스트림에 쓰기까지 기다릴하지 보인다.
쓰기 전에 Sleep을 추가했는데 즉시 위의 결과가 나타납니다. 나는 성공적인되지 않은 사용 입력에서 runas의 종류를 알아 내려고하면

:

내가 두려워에서 runas 오전 일부 NONSTD 입력 .....

연구 결과를 사용합니다.
windows 내장형 runas here에 대한 대안을 찾았지만, 사용하기를 원하지 않을지라도 다시 사용하지 않을 것입니다.
편집 :
좋아, 내가 마이크로 소프트 말 소스를 발견 일부러 누군가가 그 작업을 수행 할 때
내가 그것을 싫어 ..... 것을하고있는 사람들을 방지! 안전하지 않은 것을 사용하고 싶다면 누가 저를 멀게 할 수 있습니까?
죄송합니다. 주제를 벗어났습니다.

하나의 질문이 남아 있습니다 ... 우리는 여전히 어떻게 든 돌아 다닐 수 있습니까? 룬을 해킹 할 수 있을까요? ;)

+0

이 좋은 생각 같은 소리하지 않습니다. 왜 이걸하고 싶니? 일단'cmd'가 열리면, 사용자는 그가 원하는 것을 무엇이든 할 수 있습니다. 왜이 같은 보안을 우회하려고합니까? 또한 암호는 어디서 얻으려고합니까? 아니면 사용자가 관리자 암호를 알려 달라는 시도입니까? : D – Luaan

+0

cmd.exe를 호출하는 것은 우리가 작성한 특정 프로그램을 실행하는 마지막 일에 purpouses를 테스트하기위한 것입니다. 우리는 권한이없는 사용자가 관리자 권한을 필요로하는 특정 작업을 수행하고자합니다. – Ch33f

답변

5

당신이하지 말아야 할 이유는 에 대한 API가 있기 때문입니다.입니다.

runas을 사용할 필요가 없습니다.

ProcessStartInfo을 사용하면 UserNamePassword을 직접 지정할 수 있습니다.예를 들어

:

var psi = new ProcessStartInfo(); 

psi.Domain = "YourDomain"; 
psi.UserName = "YourUserName"; 
psi.Password = securePassword; 
psi.FileName = "cmd.exe"; 

Process.Start(psi); 
+0

좋은 소리이며 관리자 인 UAC와 협력하고있는 것으로 보입니다. 감사! : D 이제 권한이없는 사용자로 UAC에서 작동하는지 테스트합니다. 편집 : 작동! : D 대단히 감사합니다! – Ch33f

+0

@ Ch33f 듣기 좋음 :) 그 답을 정답으로 설정할 수 있습니다. – Luaan

+0

컨텍스트의 사용자 프로필이없는 경우 프로필을 만들지 않습니다. 그래서 runas가 필요할 때 항상 이것이 해결책은 아닙니다. – MushyPeas