외로운 Nova의 작업실

web hacking 취약점에따른 공격 기법 정리 본문

Web Penetesting/Web Vulnerability

web hacking 취약점에따른 공격 기법 정리

Nova_ 2022. 12. 14. 15:33

안녕하세요. 이번 장은 web hacking 공격 기법을 정리하려고합니다. 계속 업데이트 예정입니다.

 

- XSS Attack(cross-site scripting)

취약점 : 사용자가 임의로 html 문서에 값을 쓸 수 있을때, 사용자의 값을 검증하지않으면 자바스크립트를 삽입하여 실행되게 할 수 있습니다.

공격 목표 : 자바스크립트를 실행하여 할 수 있는 것들을 모두 포함합니다.

기본적인 대응책 : 사용자의 입력값에대해 검증을 꼭 거쳐야합니다. 특히 태그 기호 <>를 조심해야합니다.

실무에서 쓰는 구체적인 대응책 : 

 

<공격 기법>

  • reflected XSS  Attack : 서버에 저장하지않고 악성 스크립트를 실행하는 기법입니다.
  • stored XSS  Attack : 서버에 악성 자바스크립트를 저장하여 불특정 다수가 서버의 악성 자바스크립트를 보고 실행하게하는 기법입니다. 보통 쿠키값 탈취할때 많이 사용합니다. 
  • DOM based XSS  Attack : html 내에있는 태그 객체들을 이용하여 악성 자바스크립트를 작성하고 실행되게합니다. 보통 stored XSS 기법과 같이 사용하며 다양한 목표값들에 사용할 수 있습니다.

 

- SQL Injection

취약점 : 사용자가 임의로 SQL 인자전달 부분에 값을 쓸 수 있을때, 사용자의 값을 검증 하지않으면 SQL 명령어가 주입되어 실행되게할 수 있습니다. 

공격 목표 : admin의 패스워드를 알아내거나 사용자들의 개인정보들을 알아내는 목표 등이 있습니다.

실무에서 쓰는 구체적인 대응책 : 

 

<공격 기법>

  • blind SQL injection : 쿼리문의 결과값을 정확히 확인할 수 없을때 true false 만으로 쿼리문의 결과값을 얻어내는 기법입니다.
  • time-based SQL injection : 쿼리문의 결과값을 정확히 확인할 수 없을때 시간측정으로 쿼리문의 결과값을 얻어내는 기법입니다.
  • error-based SQL injection : 쿼리문의 결과값을 정확히 확인할 수 없을때 에러값으로 쿼리문의 결과값을 얻어내는 기법입니다.

 

- Command Injection

취약점 : 사용자가 임의로 SYSTEM 내장 함수 인자 전달 부분에 값을 쓸 수 있을때, 사용자의 값을 검증하지않으면 SYSTEM 명령어가 주입되어 실행되게 할 수 있습니다.

공격 목표 : 리눅스의 경우 /etc/password 파일의 값들을 출력하기 등이 있습니다.

기본적인 대응책 : 사용자의 입력값에 대해 검증을 꼭 거치고, SQL Injection을 방지하는 라이브러리등을 사용합니다.

실무에서 쓰는 구체적인 대응책 : 

 

<공격기법>

  • blind Command Injection : 커맨드의 결과값을 정확히 확인할 수 없을때 true false 만으로 커맨드의 결과값을 얻어내는 기법입니다.
  • time-based Command Injection : 커맨드의 결과값을 정확히 확인할 수 없을때 시간측정으로 커맨드 결과값을 얻어내는 기법입니다.
  • error-based Command Injection : 커맨드 결과값을 정확히 확인할 수 없을때 에러값으로 커맨드 결과값을 얻어내는 기법입니다.

 

- File upload attack

취약점 : 이용자가 업로드될 파일의 이름을 임의로 정하여 파일의 확장자를 정할 수 있고, 파일의 내용을 검증하지않으면 임의의 파일을 실행시킬 수 있습니다. 이를 File upload vulnerability라고 합니다.

공격 목표 : 서버에 악성파일을 업로드하거나 덮어씌워 악성코드를 실행되게합니다.

공격 방법 :

1. 파일을 업로드하는 부분에서 이름을 정할 수 있고 파일의 내용을 검증하지 않는지 확인합니다.

2. 악성코드를 작성하여 php 파일이나 jsp파일로 업로드를 하거나 이미 존재하는 파일을 덮어씌웁니다.

3. 업로드된파일을 보는 방식으로 실행시킵니다. 이것은 쿠키 하이재킹이나 xss 공격을 발생시킬 수 있습니다.

기본적인 대응책 : 사용자의 파일 확장자를 정할 수 없게만들고 파일의 내용을 검증합니다.

실무에서 쓰는 구체적인 대응책 : basepath함수를 통해 파일이름을 검증하고 확장자를 명시해 그외 확장자는 업로드할 수 없게합니다.

 

- File download attack

취약점 : 이용자가 다운로드할 파일의 이름을 임의로 정하면 정상적인 파일 경로가 아닌 다른 파일들을 다운로드할 수 있습니다. 이를 file download vulnerablity라고 합니다.

공격 목표 : password 파일이나 개인정보파일을 다운로드합니다.

공격 방법 : 

1. 파일을 다운로드하는 부분에서 파일의 경로를 넣을 수 있는지 확인합니다.

2. ../../경로등을 이용하여 원하는 곳의 파일의 경로를 값으로 집어넣어 다운로드합니다.

기본적인 대응책 : 이용자가 준 값을 검증해야합니다.

실무에서 쓰는 구체적인 대응책 :  basepath함수를 통해 파일이름을 검증거나 파일이름과 1대1로 매핑되는 키를 만들어 사용자에게 파일의 이름이 아닌 키를 요청합니다.

 

- Direct URL attack

취약점 : 서버접속 URL을 직접 손쉽게 변경할 수 있습니다.

공격 목표 : 서버가 정상적인 방법으로 접근할 수 없는 파일들을 직접 접근할 수 있습니다. 예를들어 /etc/password가 있습니다.

공격 방법 : url에 있을만한 파일경로들을 넣어서 원하는 파일을 얻어냅니다.

기본적인 대응책 : 보통 url 임의값을 많이 넣어보면서 공격하기때문에 한계점을 두어서 여러번 url 값을 넣어보면 ip를 차단합니다.

실무에서 쓰는 구체적인 대응책 :

 

- SSRF(server side request forgery)

취약점 : 독립된 서비스를 가지고 하나의 큰 서비스를 만들어내는 서버 구조에서 독립된 서비스를 마이크로서비스라고 합니다. 마이크로서비스끼리 통신을 하면서 서비스를 만들어내는데, 이때 사용자의 임의값이 검증없이 마이크로서비스에 통신하는데 사용된다면 내부적인 기능을 사용할 수 있습니다.

공격 목표 : 마이크로서비스를 원하는 동작을 수행하도록 할 수 있습니다.

공격 방법 : 마이크로서비스가 어떻게 동작하는지 예측해서 원하는 동작을 수행하는 코드를 넣습니다.

기본적인 대응책 :

실무에서 쓰는 구체적인 대응책 :

Comments