
UNIX 계열 파일 시스템에서 특정 속성을 가진 파일을 효율적으로 찾는 Python 스크립트 (find보다 빠름)
침투 테스트 중 원격 머신에 대한 접근 권한을 얻은 후, 권한 상승을 시도하기 위해 흥미로운 구성 파일이나 바이너리를 찾고 싶을 수 있습니다.
이 스크립트는 자체 포함되어 있으며 Python3와 Python2.7 모두에서 작동하므로, 기본적으로 python2를 제공하지 않는 최신 머신과 그렇지 않은 오래된 머신 모두와 호환됩니다.
여러 find 명령을 실행하는 대신, 이 간단한 스크립트는 전체 디스크 트리 구조를 한 번만 순회하면서 모든 조건(파일에만 적용되는 조건은 _p 또는 _filep로 끝나는 함수)을 적용하여 해당 파일 집합을 추적합니다.
아직 WIP이지만, 코드는 매우 탄탄하며 자신만의 조건을 작성하는 것은 매우 쉽습니다. 파일 경로를 받아 불리언을 반환하는 함수만 있으면 됩니다.
마지막에는 모든 파일 집합이 d라는 딕셔너리에 저장되며, 그 키는 조건 이름입니다. 이에 접근하려면 python3 -i diskwalk.py를 실행하기만 하면 됩니다. Python REPL로 떨어지게 되며, 이들은 Python 집합이므로 다음과 같은 연산을 쉽게 수행할 수 있습니다.
d['executable_files'] & d['writable_files']
쓰기와 실행이 모두 가능한 파일 집합을 얻으려면
d['executable_files'] - d['readable_files']
실행 가능하지만 읽을 수 없는 파일을 얻으려면
d['owned_by_nobody_dirs'] | d['owned_by_nobody_files']
nobody 사용자가 소유한 디렉터리와 파일의 합집합을 얻으려면
얻은 데이터는 피클(pickle)되고 압축된 파일 dump.gz로 저장됩니다. 이를 인수로 제공하기만 하면 다시 디스크를 스캔하지 않고 데이터를 불러올 수 있습니다.
python -i diskwalk.py dump.gz
Python의 pickle 작동 방식 때문에 일반적인 주의사항이 적용됩니다. 예를 들어, 파일을 생성할 때 사용한 Python 인터프리터와 다른 인터프리터에서는 동일한 파일을 불러올 수 없습니다.