
개념 증명 LFI 스캐너: /etc/passwd 노출을 디렉터리 트래버설 및 정규식 매칭을 통해 자동 탐지
/etc/passwd 노출 자동 탐지# LFI 스캐너
대상 호스트에서 로컬 파일 포함(LFI) 취약점을 스캔하기 위한 가벼운 Python 개념 증명 도구로, `/etc/passwd`를 검색하고 정규식 검사를 통해 존재 여부를 감지합니다. :contentReference[oaicite:0]{index=0}
## 기능
- **배치 스캐닝**: 입력 파일에서 호스트 이름 또는 host:port 대상 배치 스캔
- **디렉터리 트래버설 페이로드**: `/etc/passwd`에 도달하기 위한 페이로드
- **정규식 탐지**: `root` 항목을 확인하여 LFI 확인
- **진행 표시줄**: `tqdm` 기반 실시간 피드백
- **구조화된 보고**: 결과 파일에 발견 내용 및 미리보기 출력
## 사전 요구사항
- Python 3.6 이상
- [`tqdm`](https://pypi.org/project/tqdm/) (`pip install tqdm`)
- PATH에 `curl` CLI 필요
## 설치
```bash
git clone https://github.com/yourusername/lfi-scanner.git
cd lfi-scanner
pip install tqdm
```
## 사용법
```bash
python poc.py <input_file> [-o OUTPUT_FILE]
```
* `<input_file>`: 한 줄에 하나의 대상(`hostname` 또는 `hostname:port`)이 포함된 파일 경로
* `-o, --output`: (선택 사항) 결과를 저장할 파일 경로 (기본값: `results.txt`)
### 예시
`targets.txt`가 다음과 같을 때:
```
example.com
192.168.0.1:8443
```
스캐너 실행:
```bash
python poc.py targets.txt -o scan_results.txt
```
다음과 같은 출력이 표시됩니다:
```
[+] https://example.com:443/... → /etc/passwd FOUND
[-] https://192.168.0.1:8443/... → Response received, no match
```
그리고 `scan_results.txt`에는 요약과 미리보기가 저장됩니다.
## 스크립트 설명
* **`poc.py`**:
* `argparse`를 사용하여 `--input` 및 `--output` 파싱
* 대상 목록을 순회하며 깊은 디렉터리 트래버설 페이로드로 URL 구성
* 각 대상에 대해 `curl --insecure -s` 호출
* `root:.*?:0:0:` 검색하여 `/etc/passwd` 노출 확인
* 호스트별 상태 출력 및 상세 결과를 출력 파일에 기록 
## 면책 조항
이 도구는 **책임감 있게** 사용하고 **반드시** 소유하거나 명시적 테스트 권한이 있는 자산에만 사용하십시오. 무단 스캐닝은 법률 및 서비스 약관을 위반할 수 있습니다.
## 라이선스
[MIT 라이선스](https://github.com/abrewer251/cve-2017-12637_sap-netweaver-url-traversal/blob/main/LICENSE)에 따라 배포됩니다.
```
```