2023. 6. 24. 19:15ㆍProject
1. 개요
1-1. 공격 대상
대상 IP 정보 언어 웹 서버
localhost | PHP&MYSQL | XAMPP |
1-2. 점검항목
순번 분류 진단 항목
1. | 관리자 페이지 접근 여부,사전 공격 | 관리자 페이지 노출 여부,사전 공격 여부 |
2. | 디렉토리 리스팅 취약점 | 디렉토리 리스팅 노출 여부 |
3. | SQL INJECTION | SQL Injection 허용 여부 |
4. | 에러 메시지 처리 | 에러 메시지를 통한 중요/불필요한 정보 유출 |
5. | 회원가입 우회 | 회원가입 우회 |
1-3. 점검 도구
순번 도구 이름
1. | DirBuster |
2. | Burp Suite |
1-4. 디렉토리 구조 파악
DirBuster 도구를 이용하여 웹 서비스의 디렉토리 구조를 파악합니다. 127.0.0.1을 대상으로 small.txt 를 통한 사전 공격으로 디렉토리 구조를 파악했습니다.
1-4. DirBuster 스캔 결과
2. 취약점 점검
2-1. 관리자 페이지 노출
DirBuster 스캔 결과 admin.html 관리자 페이지 있는걸 확인할 수 있습니다.
위 사진을 보면 관리자 페이지(admin.html)에 모든 사용자가 접근할 수 있습니다.
관리자 페이지는 회원 관리, 게시판 관리 등 웹 서비스의 전반적인 기능을 제공합니다.
관리자 페이지에 접근할 수 있는 사용자는 SQL 인젝션, 무차별 대입 공격, 사전 공격 등 다양한 형태의 공격을
시도할 수 있으므로, 보안에 주의해야 합니다.
2-1. 관리자 페이지 사전 공격
BURP SUITE 도구를 이용한 관리자 페이지를 대상으로 사전 공격을 실시하였습니다.
Burp Suite의 Intruder 기능을 활용하여
취약한 패스워드 리스트를 사용하여 id = admin으로 추정되는 관리자 계정에 대한 사전 공격을 수행했습니다.
Response 값 확인 → Login Failed 출력
Response 값에서 PHP 8.24 Apache 2.4.56 버전을 확인 할 수 있습니다.
해당 버전의 취약점을 이용한 2차 공격의 정보로 사용될 수 있습니다.
Response 값에서 → 로그인 성공 메시지와 ami.php 페이지로
이동하는 것을 확인할 수 있었습니다.
관리자 페이지의 비밀번호는 monkey인 것을 알 수 있습니다. 😀
2-2. 디렉토리 리스팅 취약점
서버의 image 폴더 안의 이미지 리스트가 노출되는 취약점이 발견되었습니다. 이로 인해 서버 내의 소스코드 등의 중요 정보가 노출될 가능성이 있습니다.
2-3. SQL INJECTION
‘ || 1=1 # 구문으로 인젝션 시도했습니다.
성공적으로 SQL INJECTION이 되는것을 확인할수 있었습니다.
2-4. 에러 메시지 처리
회원가입 폼에 싱글 쿼터 (’)를 입력하여 에러 메시지 출력 유/무 를 확인했습니다.
불필요한 에러 메시지가 출력되는 것을 확인할 수 있습니다. 'INSERT INTO 'me...')'구문을 통해서 테이블 값은 ‘member’ 로 유추 가능합니다. 이 정보는 공격에 활용될 수 있습니다.
2-5. 회원가입 우회
자바스크립트 회원가입 유효성 검사 로직입니다.
관리자도구를 이용해서 회원가입 유효성 우회 할 수 있습니다.
3. 대응 방안
3-1. 관리자 페이지 노출
#1 관리자 페이지 이름을 유추하기 어려운 이름으로 번경하기.
#2 관리자 페이지에 접근하지 못하도록 관리자 페이지에 접속하기위한 세션 관리하기
3-1. 관리자 페이지 무차별 공격
#1 특정 시간 내의 로그인 시도 횟수 제한하기
#2 캡챠 기능 넣기
#3 비밀번호 길이 최소 8자리 이상, 영문 숫자 특수문자의 조합으로 비밀번호 만들기
3-2. 디렉토리 리스팅 취약점
#1 Apache httpd.conf 파일 수정하기
httpd.conf 파일에 있는 Options 지시자에서 Indexes 문구 제거하기
3-3. SQL INJECTION
#1 PHP preg_match()함수 사용하기
preg_match(”필터링 할 문자”,$입력값) exit(”no hack”);
필터링 : ‘(싱글쿼터) “ — # ( ) = + select union insert drop update and or from where substr % 공백
#2 웹 방화벽 (Web Application Firewall, WAF) 구축 하기
3-4. 에러 메시지 처리
#1 에러가 났을 경우에는 에러에 대한 정보를 보여 주는 것이 아니라 오류 페이지를 출력하도록 설정합니다.
ErrorDocument 500 “제작한 에러페이지 경로”
#2 PHP ini_set() 함수를 이용하여 에러 메시지 출력하지 않도록 설정하기
#3 php.ini 파일 수정해서 display_errors=On→display_errors=Off 로 바꾸어주기
3-5. 회원가입 우회
#1 자바스크립트가 아닌 서버측 PHP 에서 회원가입 입력 값들을 검증하는 로직을 개발합니다.