본문 바로가기

화이트 해커가 되기 위한 8가지 웹 해킹 기술

2주차 브루트 포스 공격, 커맨드 인젝션 공격

HTTP 프록시- 클라이언트와 서버 중간에서 중개인 역할

              메시지의 내용을 볼 수 있고, 내용을 수정해 보내기가 가능하다.

              웹 해킹이나 보안 취약점을 찾을 때 유용하다.

버프스위트- 대표적인 HTTP 프록시 리스너 프로그램

            optionProxy Listenersrunning을 누르면 프록시 기능 켜짐

            intercept: 키면 메시지를 가로채서 내용 수정 가능.

                        끄면 메시지가 프록시 통과하지만 메시지가 표기되지 않음.

           인터셉트를 하면 메시지가 서버로 가지 않고 묶여있는다.

           (HTTP는 타이머 개념이 없기 때문에 장시간 인터셉트해도 문제없음)

           forward를 누르면 메시지 통과, Drop을 누르면 메시지 누락됨

            Target: 접속한 호스트나 url을 트리 형태로 표현

                   직접 방문한 것은 진하게. 간접 방문(포함된 링크)은 흐리게 표시

            spider: 웹사이트를 분석하는 기능

            scanner: 웹사이트를 분석해서 보안취약점을 찾아내는 기능

            intruder: 요청 메시지의 일부분을 지정하여 여러 개의 데이터를 반복해서 전송

            repeater: 수동으로 테스트할 때 유용

 

DVWA- 기본 계정 admin 비밀번호 password

        웹 해킹을 실습할 수 있도록 제작된 웹 어플리케이션

        instruduction- 설치과정, 사용법 정리

        Setup/ Reset DB- 설치 과정에 문제가 없는지 확인. 데이터베이스 초기화 가능

        다음 메뉴들은 실습해 볼 웹 해킹 기술

        DVWA Security- 보안 레벨을 설정 가능. 4단계로 구성(low, medium, high, impossible)

 

//칼리리눅스를 종료/재부팅 한 적이 있으면 dvwa 접속이 불가능하다.

/opt/lampp/lampp restart 명령어 터미널에서 실행

 

 

부르트포스 공격

- 사용자의 패스워드를 알아내기 위해 무식하게 패스워드를 계속 대입하는 공격

    알파벳순, 딕셔너리 순(사람들이 자주 쓰는 순위)

    버프 스위트의 intruder기능 사용해 공격

1. 자동 부르트포스 공격

intercept 기능 끄기.

dvwa 로그인 실행 후 HTTP history에서 최근 기록을 send to intruder

position 확인 clear 후 원하는 값을 누른 후 add

payload에서 payload typebrute forcer로 선택

character set: 값에 넣을 수 있는 캐릭터 집합

payload count: character set에 나열된 문자들 중에서 n개를 조합한 수

attack/ payload: 요청에 넣은 값

attack/ Status: 요청의 응답 코드. Length: 응답 메시지의 길이

언젠가는 패스워드를 찾을 수 있지만 시간이 오래 걸림

패스워드가 길면 사실상 불가능

2. 딕셔너리 공격

칼리 리눅스 안에 있는 딕셔너리 파일 확인(geidt /usr/share/john/password.lst)

통계적으로 많이 쓰이는 패스워드를 사용하기 때문에 시간 절약 가능

파일에 등록되지 않은 패스워드는 찾지 못함.

intercept 기능 끄기.

dvwa 로그인 실행 후 HTTP history에서 최근 기록을 send to intruder

position 확인 clear 후 원하는 값을 누른 후 add

payload에서 payload type simple list로 선택

payload option에서 geidt /usr/share/john/password.lst 파일 가지고오기

파일의 주석 부분 remove하기

attack/ length가 다른 요청을 발견하면 그것이 패스워드라고 의심 가능함.

 

부르트포스 공격 대응

1. 패스워드 틀리면 2초 후 결과 전

- 부르트포스 공격을 지연시킬 수 있음

2. 패스워드 실패 후 0~3초 랜덤 지연

- 항상 2초 지연이면 2초가 지나면 틀린 것을 판단할 수 있으므로 랜덤기능 추가

3. 로그인 시도가 많아지면 계정이 lock되고 15분 후 입력 가능함

- 사실상 불가능. 하지만 해커가 일부로 계정을 lock하기 위해 시도할 수 있음

4. 그림에 있는 것을 사람이 적는 capcha를 사용

- 실제 사람이 로그인하는 지 확인할 수 있음

 

 

커맨드인젝션 공격

- 명령어를 삽입한다는 뜻

- 웹 요청에 커멘드를 삽입해 사용자가 실행하도록 하는 공격

- 웹을 통해 시스템 명령어(커멘드)를 실행하는 공격

- 웹 내부에서 시스템 명령어를 실행하는 경우, 입력값을 제대로 검사하지 않고 시스템 내부로

전달하면 해커가 마음대로 시스템 명령어를 실행할 수 있음

- 해커가 정상적으로 IP 주소를 입력해 웹페이지 접속-> 웹서버에서 ping명령어(해당 IP주소를 가진 시스템이 현재 동작하고 있는지 확인)를 실행하고 결과값을 리턴

  만약 해커가 IP주소 뒤에 세미콜론을 입력하고 다른 명령어를 추가한다면(IP; cat/etc/passwd- 리눅스의 사용자 목록 확인) 웹 서버가 입력값을 제대로 검사하지 않는다면 위험함.

 

실습(low)- IP주소를 입력하면 내부에서 shell_exec 명령어 실행. (시스템 명령어를 내리는 함수)

        입력받은 값을 target변수로 정의해 shell exec에 삽입

        -c: ping을 보내는 횟수를 의미. 4ping을 보냄

        ; id를 입력하면 현재 권한을 알 수 있음

        웹 어플리케이션을 수행하는 권한이 root면 커멘드 인젝션 공격이 성공되었을 시 root권한으로 모든 명령어를 사용할 수 있음.

(커멘드 인젝션을 통해 얻은 권한이 일반 사용자라면 권한 상승 단계를 지나야 함)

실습(Medium)- ‘;’, ‘&&’(윈도우 버전) 특수문자를 지워서 커멘드인젝션 공격에 대응함.

                    ‘|’ : 앞 명령어의 결과를 뒤 명령어의 입력 값으로 전송하는 특수문자

                    ‘&’: 백 그라운드로 명령어를 실행하는 특수문자

실습(high)- 대응하는 특수문자가 늘어남.

 

대응- 사용자의 입력값이 원래의 의도에 맞는지 검사해야 함.

      사용자의 입력값을 ‘.’으로 구분해 각 부분이 숫자가 맞는지 확인

      문자열이 입력값에 들어가야하는 경우 Medium에서처럼 특수문자 제거 과정 필요

 

 

부르트포스 공격 suninatas 8

0~9999개의 경우의 수를 직접 시도

suninatas 8번
suninatas 8번
suninatas 8번

커맨드인젝션 공격 webhacking 44

‘;ls’을 입력을 하니 아래 화면이 나오면서 성공함.

그러나 ‘;’ls를 입력해도 성공한 것을 알게 됨.

이유: 리눅스에서 명령어를 입력할 때 싱글 쿼테이션(‘)을 문자 사이에 입력해도 인식이 되기 때문.

때문에 ‘;l’s 또한 인식이 가능하다는 것을 알게 되었다.

webhacking 44번
webhacking 44번