|
|
PHP 파일이 서버에서 잘못된 설정으로 인해 소스코드로 노출되는 경우가 있음.
예: .php 파일이 웹서버에서 텍스트로 다운로드 가능하도록 잘못 설정되어 있을 때
📌 예시:
http://example.com/db_config.php → (다운로드됨) <?php $db_host = "localhost"; $db_user = "root"; $db_pass = "1234"; $db_name = "web_db"; ?>
🧨 이러면 해커는 바로 접속 정보를 획득함.
✅ 2. 파일 포함 취약점 (LFI/RFI)
LFI (Local File Inclusion), RFI (Remote File Inclusion)를 통해 시스템 내 PHP 파일을 읽음.
예: index.php?page=config 같은 URL을 조작
📌 공격 예시:
http://example.com/index.php?page=../../config/db.php
🧨 결과적으로 SQL 연결 정보가 담긴 파일을 읽어올 수 있음
✅ 3. 백도어/웹쉘 업로드 후 서버 탐색
파일 업로드 취약점이 있으면 PHP 웹쉘(예: c99.php, r57.php)을 올려서 서버 내부 파일 탐색 가능
웹쉘로 /var/www/html/config.php, db.php 등 파일 내용 확인 가능
✅ 4. SQL 인젝션으로 시스템 명령 실행
고급 SQL 인젝션을 통해 DB 서버 또는 웹 서버의 파일을 읽는 쿼리 실행
📌 예시 (MySQL):
UNION SELECT LOAD_FILE('/var/www/html/db.php') --
DB에 파일 읽기 권한이 있을 경우 PHP 파일 내용을 가져옴
✅ 5. 오류 메시지 기반 정보 노출
PHP에서 에러 메시지를 상세하게 출력하는 경우, DB 연결 실패 시 사용자명, 호스트 정보가 노출되기도 함
📌 예시:
Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost'
🧨 이 정보로 아이디는 root, 서버는 localhost라는 걸 추측 가능
✅ 6. Git 또는 백업 파일 노출
.git, .svn, .bak, .zip, .tar.gz 등 백업 파일을 서버에 그대로 둔 경우 해커가 다운로드 가능
📌 예시:
http://example.com/.git/config http://example.com/db.php.bak
🧨 연결 정보 포함된 파일이 통째로 유출됨
🛡️ 방어 방법
취약점 유형 방어 방법
| PHP 소스 노출 | 웹 서버가 PHP를 실행하도록 정확히 설정 (예: Apache에 PHP 모듈 적용) |
| 파일 포함 | include()에 사용자 입력 직접 사용 금지 |
| 업로드 취약점 | 업로드 확장자 제한 + 실행 권한 제거 + MIME 검사 |
| SQLi | Prepared Statement 사용 |
| 에러 메시지 노출 | display_errors = Off 설정 (운영 환경) |
| 백업 파일 노출 | 백업은 서버 외부 저장, 접근 제한 설정 (.htaccess 등) |
✅ 결론
해커는 보통 웹 서버의 잘못된 설정, 취약점, 실수를 이용해
PHP 소스코드를 읽거나 웹쉘을 이용해 파일을 열어 DB 연결 정보를 알아냅니다.
📌 개발자가 연결 정보를 절대 노출하지 않도록 철저히 관리하고,
📌 웹 서버 설정과 취약점 관리를 잘 해두는 것이 가장 중요합니다.
필요하시면 보안 설정 체크리스트나 자동 점검 도구도 알려드릴게요.