버퍼 오버플로우
- c/c++ 로 만들어진 서버에서 일어나는 취약점으로 할당된 공간 이상으로 입력이 들어왔을 때 일어나는 취약점이다.
- 버퍼 오버플로우는 스택 오버플로우, 힙 오버플로우로 이루어져있다.
- 버퍼 이상의 값을 넣게 되면 그 이상의 값이 버퍼의 다음 메모리부터 덮어씌우게 된다.
- 이 때, 만약에 리턴 주소값에 우리가 원하는 함수(system)의 주소값을 넣게 된다면 우리가 원하는 함수를 실행을 할 수 있게 된다.
- 우리가 원하는 함수를 실행할 수 있다는 점에서 시나리오는 무궁무진하다. 예를 들어 웹서버에게 우리가 원하는 공격자 서버에 접속하게 하는 리버스 쉘에 대한 함수를 실행해 시스템을 장악하는 시나리오가 있을 수 있다.
포맷 스트링
- C/C++로 만들어진 서버에서 일어나는 취약점으로 printf와 같은 함수에서 문자열 입력 포맷을 잘못된 형태로 입력하는 경우 나타나는 취약점이다.
- 이때, %n의 경우 이전까지 입력되었던 문자열의 길이 수만큼 해당 변수에 저장시키는 역할을 하기 때문에 메모리의 내용이 변조가 가능하다.
- 포맷 스트링 역시 임의의 함수를 실행할 수 있다는 점에서 버퍼 오버 플로우와 마찬가지로 우리가 원하는 함수를 실행하게 만들 수 있다.
SQL Injection
- SQL Injection의 경우 임의의 SQL 질의문을 서버에 주입하는 공격이다.
- SQL Injection이 일어나는 경우, DB에 우리가 원하는 질의문을 날려 저장되어 있는 데이터를 모두 탈취하거나, 관리자 계정에 비정상적인 접근을 가능하게 만든다.
LDAP Injection
- LDAP란 Lightweight Directory Access Protocol로 네트워크 상에서 조직이나 개인정보 혹은 파일이나 디바이스 정보등을 찾아보는 것을 가능하게 만든 소프트웨어 프로토콜이다.
- SQL Inejction과 사용하는 언어만 다를 뿐 Injection을 한다는 점은 같아 데이터 탈취나 관리자 계정에 접근과 같은 시나리오가 가능하다.
운영체제 명령 실행(command injection)
- Command Injection의 경우, 웹 어플리케이션에서 웹서버에서 실행하는 시스템 명령어(system, exec)를 주입해 공격하는 취약점이다.
- 말 그대로 웹서버에서 시스템 명령어를 실행할 수 있는 공격이라 웹서버에 저장되어 있는 소스코드를 열람, 수정과 같은 기본적인 것 뿐만 아니라 리버스 쉘을 이용해 시스템을 장악하는 시나리오가 존재한다.
SSI Injection
- SSI 란 Server Side Includes라는 것으로 서버 사이드 측에 필요한 자료를 실행할 수 있도록 클라이언트에서 서버로 데이터를 보내고 서버가 그것을 실행하고 다시 클라이언트에 보내준다.
- 이 때 문제가 되는 것이 서버가 그것을 실행한다는 점이다.
- .shtml에서 일어난다.
- 시나리오는 클라이언트에서 서버의 관리자에 대한 정보를 출력하라는 명령을 서버로 보내게 된다. 이때 서버는 그것을 실행을 하고 클라이언트에 보내게 되는 경우가 있겠다.
XPath Injection
- XML 구조에 임의의 쿼리, 코드를 삽입하는 공격
- SQL Injection과 마찬가지로 Injection을 한다는 점은 같아 데이터 탈취나 관리자 계정에 접근과 같은 시나리오가 가능하다.
디렉터리 인덱싱
- 디렉터리 인덱싱의 경우 디렉터리의 구조를 볼 수 있는 취약점을 말한다.
- 해당 취약점이 위험한 이유는 외부에서 웹 서버의 구조에 대한 정보를 알 수 있어 해킹을 할 수 있는 단초를 주게 될 뿐만 아니라, 일반 사용자들이 접근하지 못하는 웹페이지가 존재하는 것을 알 수 있고, 접근할 수 있어 해킹이 될 가능성이 있다.
정보 누출
- 정보 누출이란 중요정보가 웹페이지에 그대로 노출 되거나 에러 발생시 DB 정보, 웹서버 정보와 같은 과도한 정보가 노출되는 것을 말한다. 이는 디렉터리 인덱싱처럼 공격자들에게 2차 공격을 위한 정보로 활용이 될 수 있다.
- 범위가 넓은 취약점인데 이는 5가지로 나눌 수 있다.
- 웹 사이트에 중요정보가 평문으로 노출되고 있는지.
- 웹페이지에 마스킹된 중요 정보가 웹페이지 소스에 평문으로 노출되고 있는지.
- 에러 메시지 또는 에러 페이지에서 과도한 정보가 노출되는지.
- 인코딩된 중요정보는 디코딩 가능한지
- 임의의 계정으로 로그인을 시도하여 반환되는 에러 메시지를 통해 특정 ID의 가입 여부를 식별할 수 있는지
- 이와 관련된 시나리오를 생각하자면, 해커가 웹페이지에 평문으로 노출된 정보들을 크롤링해 해킹을 하거나, 서버 측에 보내는 request를 일부러 오류를 내 그로 인한 정보들을 수집한 다음 2차 해킹 공격을 할 수 있을 것으로 생각이 된다.