1. 안전한 로직
- Prepared Statements (또는 Parameterized Queries) 사용-SQL 문에 사용될 값을 쿼리 문자열과 분리하여 처리,사용자의
- 입력이 쿼리 구조 자체를 바꾸지 못하도록 차단함
- 입력값 검증 및 이스케이프 처리 (Input Validation & Escaping)
2. server side validation
- DBMS로 전달되는 사용자의 입력 값을 검증한 후 전달 함
- 공격에 사용되는 메타문자 필터링 -> ;, ", --, # 등
- 공백 필터링 -> trim()으로 공백 제거
- 공격에 사용되는 SQLcommamd 필터링 -> select, insert, delete, update 등등
addslashes 함수사용: 이스케이프할 문자열
- =mysql_real_escape_string 함수와 동일
- 문자열을 슬래쉬로 인용
- 싱글쿼터' , 더블쿼터", 백슬래쉬 \, NULL 앞에 \를 붙인다.
$key=addslashes($key);
-우회 가능성: 쿼터를 사용하지 않는 int형 데이터 처리는 쿼터없이 공격이 가능
str_replace,str_ireplace,preg_replace, preg_match:문자열 필터링 (검색,치환) 함수
$key=str_replace("select","",$key); 대소문자 구분
$key=str_ireplace("select","",$key); 대소문자 구분 X
$key = preg_replace("/select|union|information_schema/i", "", $key);
while(preg_match("/select|union/i",$key)){
$key = preg_replace("/select|union/i","",$key);
}}
while(preg_match("/select|union/i",$key)){
$key = preg_replace("/select|union/i","",$key);
}}
->board_list.php
3. WAS의 DB접근 권한을 제한
- DB 접근 권한 관리
- WAS가 DB와 연동하는 기능을 악용하여 DB에 접근 및 데이터 탈취를 진행하는 공격이 sql injection
- WAS가 접근 가능한 데이터에 해커도 접근 가능-> 권한 축소가 필요
- 연동하는 기능이나 테이블 마다 접근하는 계정을 다르게 설정
- 계정마다 권한도 다르게 설정
4. WAS의 에러 메시지 제한
- 에러 메시지 관리
- 에러 출력 코드를 관리 목적으로 사용가능
- 이는 임시적인 방식으로만 사용
- 에러메시지가 클라이언트에게 전송이 되면 error based sql injection
- 공격이 가능하기 때문에 에러는 클라이언트에게 전송 안되게 설정
5. WAF 도입 고려
- 우리가 생각하는 방화벽은 네트워크 방화벽이고
- 이건 전문적으로 web hacking을 막아주는 솔루션이다
- 정책을 기반으로 설정이 가능은 하지만 WAF 설정에서 XSS등을 막는 설정을 넣어준다.
- 주소 기반으로 허용, 차단 할 수 없다(네트워크 기반이 아니니까)
Directory Listing
웹서버에서 지원하는 directory listing 기능을 악용하여 정보를 수집하는 공격
서버에서 제공하는 웹페이지의 목록 정보를 탈취하는 공격
디렉터리만 요청을 했을 때 실패를 띄워야 하는데 사용자의 편의성을 위해서 리스트를 보여주는 기능
아래와 같이 192.168.50.50/board/
라고 url에 입력하면 list가 출력이 된다.
반드시 나오는 글자인 index of/(directory name)을 검색 창에 입력을 하면
보안설정이 되어 있지 않은 웹서버를 파악할 수 있게 된다.
이처럼 적지 않은 웹서버에서 이 보안설정이 되어있지 않다(우리가 사용하는 것들은 되어있음)
보안 설정은 간단하다.
vim /etc/httpd/conf/httpd.conf
149번째 줄 이동 후 indexes부분만 지워준다
재시작
결과화면
'Hacking' 카테고리의 다른 글
파일 다운로드&업로드 취약점 및 보안 (0) | 2025.07.09 |
---|---|
google dork 연산자 및 옵션 (0) | 2025.07.09 |
time based sql injection (0) | 2025.07.03 |
boolean sql injection (노가다) (0) | 2025.07.03 |
SQL injection 실습(query result sql injection) (0) | 2025.07.02 |