คุณจะเรียกใช้ CMD.exe ภายใต้บัญชี Local System ได้อย่างไร


144

ฉันกำลังใช้งาน Vista อยู่ในขณะนี้และฉันต้องการดำเนินการแบบเดียวกันกับ Windows Service ของฉันด้วยตนเอง เนื่องจากบริการ Windows ทำงานภายใต้บัญชี Local System ฉันต้องการเลียนแบบพฤติกรรมนี้ โดยทั่วไปฉันต้องการเรียกใช้ CMD.EXE ภายใต้บัญชี Local System

ฉันพบข้อมูลออนไลน์ซึ่งแนะนำให้ใช้ CMD.exe โดยใช้คำสั่ง DOS Task Scheduler แต่ฉันได้รับคำเตือนจาก Vista ว่า "เนื่องจากการปรับปรุงด้านความปลอดภัยงานนี้จะทำงานในเวลานั้นยกเว้น แต่ไม่สามารถโต้ตอบได้" นี่คือคำสั่งตัวอย่าง:

AT 12:00 /interactive cmd.exe

แนวทางแก้ไขอื่นที่แนะนำให้สร้างบริการ Windows รองผ่าน Service Control (sc.exe) ซึ่งเพิ่งเปิดใช้งาน CMD.exe

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

ในกรณีนี้บริการล้มเหลวในการเริ่มต้นและผลลัพธ์เป็นข้อความแสดงข้อผิดพลาดต่อไปนี้:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

ข้อเสนอแนะที่สามคือการเปิด CMD.exe ผ่านงานที่กำหนดเวลาไว้ แม้ว่าคุณอาจทำงานตามกำหนดเวลาภายใต้บัญชีต่างๆ แต่ฉันไม่เชื่อว่าบัญชี Local System เป็นหนึ่งในนั้น

ฉันได้ลองใช้ Runas ด้วย แต่คิดว่าฉันกำลังใช้ข้อ จำกัด เดียวกันกับที่พบเมื่อใช้งานที่กำหนดเวลาไว้

ป่านนี้ความพยายามของฉันแต่ละครั้งได้สิ้นสุดลงด้วยความล้มเหลว ข้อเสนอแนะใด ๆ

คำตอบ:


221

แม้ว่าฉันจะไม่ได้ทำการทดสอบส่วนตัว แต่ฉันก็มีเหตุผลที่ดีที่เชื่อว่าโซลูชัน AT COMMAND ที่ระบุไว้ข้างต้นจะใช้งานได้สำหรับ XP, 2000 และ Server 2003 ต่อการทดสอบของฉันและไบรอันท์เราได้ระบุว่าวิธีการเดียวกันนั้นใช้ไม่ได้กับ Vista หรือ Windows Server 2008 - อาจเนื่องมาจากความปลอดภัยที่เพิ่มขึ้นและสวิตช์ / การโต้ตอบถูกเลิกใช้แล้ว

อย่างไรก็ตามฉันเจอบทความนี้ซึ่งแสดงให้เห็นถึงการใช้งานPSToolsจากSysInternals (ซึ่ง Microsoft ซื้อมาในเดือนกรกฎาคม 2549) ฉันเปิดใช้งานบรรทัดคำสั่งผ่านรายการต่อไปนี้และในทันใดฉันก็ทำงานภายใต้ Local Admin Account เช่น magic:

psexec -i -s cmd.exe

PSTools ทำงานได้ดี มันเป็นชุดเครื่องมือที่มีน้ำหนักเบาและบันทึกไว้อย่างดีซึ่งให้การแก้ปัญหาที่เหมาะสมสำหรับปัญหาของฉัน

ขอบคุณมากสำหรับผู้ที่ให้ความช่วยเหลือ


11
ฉันชอบสิ่งนี้ดีกว่าด้วยการ-dเพิ่มเพื่อให้ฉันสามารถใช้คอนโซลที่ฉันเปิดใช้งานต่อไปได้
SamB

1
ฉันเพิ่งลองใช้งาน Vista x64 และได้รับ "บริการ PsExec ที่ทำงานบน ... เป็นรุ่นที่เข้ากันไม่ได้" พยายามโดยตรงจาก \\ live.sysinternals.com \ tools \ psexec และไบนารีล่าสุด ดูเหมือนจะไม่มีเวอร์ชั่น x64
ZXX

52
  1. ดาวน์โหลด psexec.exe จาก SysinternalsSysinternals
  2. วางไว้ใน C: \ drive
  3. cd \การเข้าสู่ระบบในฐานะผู้ใช้มาตรฐานหรือผู้ดูแลระบบและใช้คำสั่งต่อไปนี้: สิ่งนี้จะนำคุณเข้าสู่ไดเรกทอรีรากของไดรฟ์ซึ่งเป็นที่ตั้งของ psexec
  4. ใช้คำสั่งต่อไปนี้: psexec -i -s cmd.exeโดยที่ -i สำหรับการโต้ตอบและ -s สำหรับบัญชีระบบ
  5. เมื่อคำสั่งเสร็จสมบูรณ์เชลล์ cmd จะถูกเรียกทำงาน ชนิดwhoami ; มันจะพูดว่า 'ระบบ "
  6. เปิด taskmanager ฆ่า explorer.exe
  7. จากชนิดคำสั่งเชลล์ที่ยกระดับ start explorer.exeจากการยกระดับคำสั่งประเภทเปลือก
  8. เมื่อ explorer ถูกเปิดใช้งานให้สังเกตชื่อ "ระบบ" ในแถบเมนูเริ่ม ตอนนี้คุณสามารถลบไฟล์บางไฟล์ในไดเรกทอรี system32 ซึ่งเป็นผู้ดูแลระบบที่คุณไม่สามารถลบหรือในฐานะผู้ดูแลคุณจะต้องพยายามเปลี่ยนการอนุญาตให้ลบไฟล์เหล่านั้นอย่างหนัก

ผู้ใช้ที่พยายามเปลี่ยนชื่อหรือลบไฟล์ระบบในไดเรกทอรีที่ได้รับการป้องกันใด ๆ ของ windows ควรรู้ว่าไฟล์ windows ทั้งหมดได้รับการปกป้องโดย DACLS ในขณะที่เปลี่ยนชื่อไฟล์ที่คุณต้องเปลี่ยนเจ้าของและเปลี่ยน TrustedInstaller ซึ่งเป็นเจ้าของไฟล์และทำให้ผู้ใช้เช่นผู้ใช้ เป็นของกลุ่มผู้ดูแลระบบในฐานะเจ้าของไฟล์จากนั้นลองเปลี่ยนชื่อใหม่หลังจากเปลี่ยนการอนุญาตมันจะทำงานและในขณะที่คุณใช้ windows explorer ด้วยสิทธิพิเศษเคอร์เนลคุณค่อนข้าง จำกัด ในแง่ของการเข้าถึงเครือข่ายเพื่อความปลอดภัยและยังคงเป็นหัวข้อวิจัย สำหรับฉันที่จะได้รับการเข้าถึงกลับ


ฉันใช้เคล็ดลับนี้เพื่อเริ่ม explorer เป็นผู้ใช้ที่ยกระดับบ่อยครั้ง โดยเฉพาะอย่างยิ่งเมื่อเชื่อมต่อผ่าน VNC กับพีซีซึ่งจำเป็นต้องตั้งค่าเครือข่ายเช่น +1 จากฉัน
TPAKTOPA

เคล็ดลับนี้ดูเหมือนจะไม่ถูกต้องในขณะนี้ ระบบปฏิบัติการของฉันคือ Windows 7 SP1 ฉันไปไกลเท่าที่เห็น "ระบบ" ในแถบเมนูเริ่ม แต่ก็ยังเมื่อเปลี่ยนชื่อไฟล์ในโฟลเดอร์ system32 มันบอกว่าได้รับอนุญาตถูกปฏิเสธ ตอนนี้โฟลเดอร์ system32 เป็นเจ้าของโดย TrustedInstaller และแม้แต่บัญชีระบบในระบบเท่านั้นที่มีสิทธิ์พิเศษ
Shaohua Li

หากคุณพยายามที่จะเปลี่ยนชื่อหรือลบไฟล์ใด ๆ ที่อยู่ในไดเรกทอรี windows ที่ได้รับการป้องกันใด ๆ ที่ TrustedInstaller เป็นเจ้าของคุณผู้ใช้ปัจจุบันต้องเป็นเจ้าของไฟล์โดยการเปลี่ยนสิทธิ์คุณสามารถเปลี่ยนชื่อหรือลบมันได้ซึ่งมักจะใช้เพื่อลบ slmgr exe และไฟล์ระบบอื่น ๆ ที่จะได้รับการเข้าถึงไร้ขีด จำกัด กับรุ่นเส้นทางของหน้าต่างโดยไม่ต้องจ่ายเงินสำหรับมัน
กา

10

พบคำตอบที่นี่ซึ่งดูเหมือนว่าจะแก้ปัญหาได้โดยการเพิ่ม / k เริ่มต้นที่พารามิเตอร์ binPath ดังนั้นจะให้:

sc create testsvc binpath= "cmd /K start" type= own type= interact

อย่างไรก็ตามเบ็นบอกว่ามันไม่ได้ผลสำหรับเขาและเมื่อฉันลองใช้ Windows Server 2008 มันได้สร้างกระบวนการ cmd.exe ภายใต้ระบบโลคอล แต่มันก็ไม่ได้เป็นแบบโต้ตอบ (ฉันมองไม่เห็นหน้าต่าง)

ฉันไม่คิดว่าจะมีวิธีที่ง่ายในการทำสิ่งที่คุณถาม แต่ฉันสงสัยว่าทำไมคุณถึงทำมันเลย? คุณเพียงแค่พยายามที่จะเห็นสิ่งที่เกิดขึ้นเมื่อคุณใช้บริการของคุณ? ดูเหมือนว่าคุณสามารถใช้การบันทึกเพื่อระบุว่าเกิดอะไรขึ้นแทนที่จะต้องเรียกใช้ exe เป็นระบบโลคอล ...


สวัสดีไบรอันท์ การแก้ปัญหานี้ได้อธิบายไว้ในคำถามเป็นหลัก มันใช้งานได้จริงสำหรับคุณ? มันทำให้เกิดความล้มเหลวสำหรับฉัน ขอบคุณ
Ben Griswold

ไบรอันท์ฉันมีบริการที่จัดการการติดตั้งและถอนการติดตั้งขององค์ประกอบอื่น ฉันต้องการให้กลุ่มสนับสนุนของเรามีวิธีง่ายๆในการถอนการติดตั้งคอมโพเนนต์ "อย่างมีประสิทธิภาพ" หากบริการของฉันไม่สามารถทำงานได้ ในขณะที่ทำการทดสอบฉันต้องการที่จะ "บังคับ" การถอนการติดตั้งเช่นกัน ขอบคุณสำหรับความช่วยเหลือ ..
เบ็นกริสวอลด์

1
@Ben: คุณได้ตั้งค่าประเภทเริ่มต้นของ "การตรวจสอบบริการแบบโต้ตอบ" เป็น "ด้วยตนเอง" หรือ "ปิดการใช้งาน" หรือไม่
Hello71

1
หากต้องการอนุญาตบริการแบบโต้ตอบสำหรับ Server 2012 HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesต้องตั้งค่าเป็น 0 (ค่าเริ่มต้น 1)
Ivan Chau


6

ฉันขอแนะนำให้คุณกำหนดชุดสิทธิ์ต่ำสุดที่บริการของคุณต้องการและใช้งานจริงแทนที่จะใช้บริบทของระบบภายในที่ได้รับการยกเว้น ตัวอย่างเช่นLocal Serviceบริการท้องถิ่น

บริการอินเทอร์ไม่ทำงาน - หรืออย่างน้อยไม่แสดง UI - บน Windows Vista และ Windows Server 2008 เนื่องจากเซสชั่น 0 แยก


4
ไมค์ขอบคุณสำหรับคำตอบ แม้ว่าฉันจะเห็นด้วยกับคำแนะนำของคุณและฉันคิดว่าทุกคนจะได้รับประโยชน์จากคำตอบของคุณ แต่ฉันไม่เชื่อว่าคุณตอบคำถามแล้ว
Ben Griswold

@Ben Griswold: อย่างไรก็ตามเขาชี้ให้เห็นอย่างชัดเจนว่าอะไรคือสิ่งที่ทำให้แบบเก่าล้มเหลวใน Vista +1
SamB

1
คำถามคือ "คุณเรียกใช้ CMD.exe ได้อย่างไรภายใต้บัญชี Local System"
Jaco Pretorius

2
@ SamB และนั่นคือความคิดเห็นสำหรับเมื่อคุณมีบางอย่างที่จะมีส่วนร่วมซึ่งไม่ใช่คำตอบที่แท้จริง
Synetech

6

ใช้ Secure Desktop เพื่อทำงานcmd.exeเป็นsystem

เราสามารถเข้าถึงเคอร์เนลผ่านCMDใน Windows XP / Vista / 7 / 8.1 ได้อย่างง่ายดายโดยแนบดีบักเกอร์:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. เรียกใช้CMDในฐานะผู้ดูแลระบบ

  2. จากนั้นใช้คำสั่งนี้ในระดับสูง:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. จากนั้นเรียกใช้osk(บนหน้าจอแป้นพิมพ์) มันยังคงไม่ทำงานกับระดับความสมบูรณ์ของระบบหากคุณตรวจสอบผ่านกระบวนการสำรวจ แต่ถ้าคุณสามารถใช้ OSK ในเซสชั่นการบริการก็จะทำงานเป็นNT Authority\SYSTEM

ดังนั้นฉันจึงมีความคิดว่าคุณต้องเปิดใช้งานบน Secure Desktop

เริ่มไฟล์ใด ๆ ในฐานะผู้ดูแล เมื่อปรากฏข้อความแจ้งเตือนของ UAC เพียงกดWin+ Uและเริ่มOSKและจะเริ่มขึ้นCMDแทน จากนั้นในพร้อมท์ยกระดับพิมพ์whoamiและคุณจะได้รับNT Authority\Systemและคุณจะได้รับหลังจากนั้นคุณสามารถเริ่มต้น Explorer ได้จากเชลล์คำสั่งระบบและใช้โปรไฟล์ระบบ แต่คุณมีข้อ จำกัด ที่คุณสามารถทำได้บนเครือข่ายผ่านสิทธิ์ระบบเพื่อเหตุผลด้านความปลอดภัย ฉันจะเพิ่มคำอธิบายเพิ่มเติมในภายหลังเมื่อฉันค้นพบมันเมื่อปีที่แล้ว

คำอธิบายสั้น ๆ ว่าเกิดอะไรขึ้น

ทำงานCmd.exeภายใต้บัญชี Local System โดยไม่ต้องใช้PsExec. วิธีนี้ใช้เทคนิค Debugger Trap ที่ค้นพบก่อนหน้านี้เทคนิคนี้มีประโยชน์ของตัวเองที่สามารถใช้เพื่อดักจับเวิร์ม / มัลแวร์ที่มีเล่ห์เหลี่ยม / อันตรายหรือมัลแวร์ในโปรแกรมดีบั๊กและรัน exe อื่น ๆ ที่นี่รีจิสตรีคีย์ traps แป้นพิมพ์บนหน้าจอใน windows native debugger และรัน cmd.exe แทน แต่ cmd จะยังคงรันด้วย Logged on สิทธิพิเศษของผู้ใช้อย่างไรก็ตามถ้าเรารัน cmd ใน session0 เราจะได้เชลล์ระบบ ดังนั้นเราจึงเพิ่มแนวคิดอื่นที่นี่เราขยาย cmd บนเดสก์ท็อปที่ปลอดภัยโปรดจำไว้ว่าเดสก์ท็อปที่ปลอดภัยรันในเซสชัน 0 ภายใต้บัญชีระบบและเราได้รับเชลล์ระบบ ดังนั้นเมื่อใดก็ตามที่คุณเรียกใช้สิ่งใดสูงคุณต้องตอบรับคำแจ้ง UAC และแจ้ง UAC บนเดสก์ท็อปที่มืดไม่ใช่แบบโต้ตอบและเมื่อคุณเห็นมันคุณต้องกดWin+ Uแล้วเลือกOSKคุณจะได้รับการCMD.exeทำงานภายใต้สิทธิ์ระบบท้องถิ่น มีวิธีมากขึ้นในการเข้าถึงระบบภายในด้วยCMD


คุณมีวิธีที่จะใช้งาน cmd ได้มากขึ้นเมื่อยกระดับสิทธิ์ของผู้มีอำนาจ NT
Raven

นี่เป็นสิ่งที่ดีมาก ดีมาก. ฉันเกลียดการใช้งานแอดออนของบุคคลที่สามเพื่อให้งานเสร็จ นี่คือสุดยอดง่ายและรวดเร็ว ถาวรด้วย :-) ปัญหาเดียวคือคุณต้องเรียกใช้คำสั่งทั้งหมดในหน้าต่าง UAC และเปิดแอปพลิเคชันบางตัวเท่านั้น Explorer.exe ไม่เปิดตัวอย่างเช่น ฉันต้องการทดสอบว่ามีวิธีการใดที่จะกระตุ้นสิ่งนี้ ฉันต้องการที่จะสามารถเรียกใช้แอพอื่น ๆ ในสภาพแวดล้อมของ Windows พื้นเมืองโดยไม่ต้อง UAC จำกัด แอพบางตัว สิ่งที่ยอดเยี่ยมกา!
KonaRin

3

อีกทางเลือกหนึ่งคือ Process แฮ็กเกอร์ถ้าคุณทำงานเป็น ... (อินเตอร์แอคทีฟไม่ทำงานสำหรับคนที่มีความปลอดภัยเพิ่มขึ้น แต่มันไม่สำคัญ) และเมื่อกล่องเปิดให้ใส่ Service ลงในกล่องประเภทและวางระบบลงในกล่องผู้ใช้และใส่ C : \ Users \ Windows \ system32 \ cmd.exe ออกจากส่วนที่เหลือคลิกตกลงและคุณมีหน้าต่างที่มี cmd อยู่บนมันและทำงานเป็นระบบตอนนี้ทำขั้นตอนอื่น ๆ สำหรับตัวคุณเองเพราะฉันแนะนำให้คุณรู้จักพวกเขา


2

มีวิธีอื่น มีโปรแกรมที่เรียกว่า PowerRun ซึ่งอนุญาตให้เรียกใช้ cmd ที่สูงขึ้นได้ แม้จะมีสิทธิ์ TrustedInstaller จะช่วยให้คำสั่งคอนโซลและ GUI


1

หากคุณสามารถเขียนไฟล์แบตช์ที่ไม่จำเป็นต้องมีการโต้ตอบให้ลองใช้งานไฟล์แบตช์นั้นเป็นบริการเพื่อทำสิ่งที่ต้องทำ


0

ฉันใช้ยูทิลิตี้RunAsTiเพื่อเรียกใช้เป็นTrustedInstaller (สิทธิ์สูง) ยูทิลิตี้นี้สามารถใช้งานได้แม้ในโหมดการกู้คืนของ Windows (โหมดที่คุณป้อนด้วยการทำShift+ Restart) ยูทิลิตี้psexecไม่ทำงานที่นั่น แต่คุณจำเป็นต้องเพิ่มของคุณC:\WindowsและC:\Windows\System32(ไม่X:\WindowsและX:\Windows\System32เส้นทาง) กับPATHตัวแปรสภาพแวดล้อมมิฉะนั้นRunAsTiจะไม่ทำงานในโหมดการกู้คืนก็จะเพียงแค่พิมพ์: AdjustTokenPrivileges สำหรับ SeImpersonateName: สิทธิพิเศษไม่ทั้งหมดหรือกลุ่มอ้างอิงที่ได้รับมอบหมายไปยังผู้โทร


0

การใช้ task scheduler กำหนดการทำงานของ CMDKEY ทำงานภายใต้ SYSTEM พร้อมกับอาร์กิวเมนต์ที่เหมาะสมของ / add: / user: และ / pass:

ไม่จำเป็นต้องติดตั้งอะไรเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.