[강의] 2주차 웹 해킹- 웹 해킹 기술 탐색 1

6주간의 해킹 스터디 두번째 시간

이번 시간에는 본격적인 웹 해킹 기술에 대해서 공부할 것이다! 크게 브루트 포스와 커맨드 인젝션 공격을 알아보고 실습을 해볼것입니다 😉

강의를 듣고 싶으면 여기로 gogo~! => goormedu


먼저 저번주차에 설치한 DVWA를 살펴보자

DVWA

실습에 앞서 localhost/dvwa 에 접속이 안되는 문제를 겪었다.🥵

2가지 방법으로 해결했는데..! 본인에게 맞는 해결법을 실행하면 될 것 같다.

(1) /opt/lampp/lampp restart 를 실행 한 후 다시 접속해보면 된다!

(2) 버프스위트의 proxy intercept 가 off 인지 확인하기

만약 on 이라면 클릭해서 off 로 다음과 같은 상태로 바꾸어야 한다.

image

(3) firefox의 preference에서 proxy 설정 확인하기

순서는 아래 따라하면 된다 ㅎㅎ

-1- preference 클릭

pre

-2- preference클릭 후 나오는 페이지의 맨 아래쪽으로 이동하면 Network Proxy가 보인다! Settings… 버튼을 누르자

network

-3- 아래와 같이 ‘Manual proxy configuration’ 에 burpsuite에 설정된 http 주소인 127.0.0.1, port = 8080 으로 설정해주고 나머지 칸은 빈칸으로 되어있는지 확인하자

image

⭐️⭐️ 지난번 공부했던 내용 인 웹 해킹 1주차를 참고해 버프스위트 부분을 참고하자.



이제 웹해킹 기술에 대해서 알아봅시다!

브루트 포스 공격이란?

사용자 패스워드를 알아내기 위한 공격이고 아이디와 패스워드가 일치하는지 알아보기 위해 패스워드를 계속 대입하는 방법이다.

이 대입 방법의 종류에는

  1. 알파벳 순서
  2. 딕셔너리 공격

image

✏️이제 브루트포스 공격을 실습을 통해 알아보자

DVWA에 로그인해 들어간 후 왼쪽 메누에서 Brute Force로 들어간다. 아래와 같이 맞지 않는 아이디/비번을 입력하면 맞지 않는다고 경고 문자가 나온다.

image

이런식으로 일일히 대입해 알아보는 방법을 dvwa를 통해 실습해보았다.

자동 브루트 포스 공격

✏️이번에는 자동으로 브루트 포스 공격을 하는 법을 알아보자

우선 burp suite 의 proxy에서 intercept is on -> intercept is off 로 변경해주자

image


password에 abcd를 입력하고 proxy-> HTTP history에서 가장 최근의 요청을 더블클릭해서 내용을 확인해보면

아래와 같이 쿼리스트링 부분을 보면 username=admin , password=abcd 임을 확인할 수 있다.

KakaoTalk_20210708_203506419


이제, send to intruder로 intruder로 요청을 보내본다

스크린샷(25)


intruder -> position 메뉴로 들어가면 어떤 영역이 하이라이트 된 것을 확인할 수 있으며,

그림에 표시한것과 같이 쿼리스트링 부분과 쿠키 부분이 사용자가 입력한 값이 변수의 값으로 처리되어있는 부분이다.

캡처

clear$ 버튼으로 하이라이트를 제거하고 지금 당장 테스트 해볼 password 영역만 선택하여 Add$ 버튼을 누른다.

이런식으로 $$로 선택된 영역을 다양한 문자열로 치환해 테스트 할 수 있게 된다.

image


payloads 메뉴로 들어가서 payload type을 Brute forcer로 바꿔준다. options를 살펴보면 대입해 볼 수 있는 character가 알파벳 a~z, 숫자는 0~9까지 사용할 수 있고, 길이는 4자리로 지정되어있어 4자리 글자로 만들 수 있는 password의 조합은 총 1,679,616 개이다.

대입할 character이 늘어날 수록, max length 길이를 크게 총 조합의 수가 많아진다.

Inkedpayload_LI

이제 공격을 실행해보자! 우측 상단의 Start attack 버튼을 누르자

다음과 같이 패스워드가 일치할때까지 4자리의 조합을 시도해보는 것을 볼 수 있다.

image

하지만 password의 조합이 복잡해질수록 시간이 오래걸린다는 단점이 있다.

이를 위한 것이 딕셔너리 공격이다


딕셔너리 공격

공격에 앞서 password 파일 하나를 살펴보자.

gedit /usr/share/john/passowrd.lst 파일을 열면 여러 password 조합들이 딕셔너리 형태로 작성된 파일을 볼 수 있다.

image

자세히 보면 어떤 password가 많이 사용되는지 알 수 있다.


이제 burpsuite로 돌아가서 payloads를 다시보자!

load 버튼을 눌러 아까 보았던 password.lst 경로를 따라 파일을 업로드 한다.

image

remove 버튼을 이용해 위의 #!comment 부분을 싹 지우고 password의 조합만 나열하도록 하고 start attack!

image

공격 실행 결과이다

다음과 같이 status와 length를 확인할 수 있는데 맞는 password이면 length가 다르게 나온다. 하지만 password 가 password 임에도 불구하고 똑같이 나오는 에러를 발견해 해결중이다..

image

브루트 포스 공격 대응 👨‍🏫

브루트 포스 공격은 어떻게 막을 수 있는지 알아보자!

(1) medium level의 경우

먼저, DVWA Security의 level을 medium으로 올린다.

다시 Brute Force에 가서 잘못된 password로 로그인을 하면 응답이 느려진 것을 확인할 수 있다.

그렇다면 view source 버튼을 눌러 소스코드를 살펴보자

소스코드를 살펴보면 로그인 실패시 sleep을 해주어 응답을 느리게 한다. 이 방법으로 brute force 공격을 지연시킬 수 있다.

image

(2) high level의 경우

소스코드를 보면 login 실패 시 0~3 초를 랜덤하게 sleep 해주어 응답을 느리게 한다. 이런식으로 지연이 되면 해커 입장에서는 비번이 틀렸다고 간주하기 때문에 다음 요청으로 실행해버린다.

image

(3) impossible level 의 경우

수 차례 로그인에 실패하였기 때문에 일정 시간 이후 재 로그인을 할 수 있다고 뜬다. 이를 locking이라고 하는데 이 방법의 경우 사실상 brutefoce 공격을 거의 완전히 차단할 수 있다.

image

단, 반대로 부작용이 있는데 해커가 오히려 이 점을 느려 특정 사용자의 아이디를 이용해 일부러 password를 틀리게 해 사용자가 특정시간동안 로그인을 못하게 만든다. 🥵🥵

💡 정리하자면, brute force 공격을 대응하려면 잘못된 로그인 시도가 여러번 발생하면 응답시간을 느리게 하거나 locking을 걸어 반복되는 로그인 시도를 무력화 시켜야 한다.



커맨드 인젝션 공격

  • 웹을 통해 시스템명령어(커맨드) 를 실행하는 공격
  • 웹 내부에서 시스템 명령어를 실행하는 경우 입력값을 제대로 검사하지 않으면 해커 마음대로 시스템 명령어를 실행한다.

다음과 같이 리눅스에서는 ; 과 같은 특수문자로 두개의 명령어를 실행하게 된다. 그러면 cat /etc/passwd 명령어가 실행되게 되고 이 정보가 해커에게 넘어간다.

image

(ping 명령어는 ip주소를 가진 어떤 시스템이 현재 동작하고 있는지 확인할때 사용하는 명령어이다.)



이제 DVWA에서 실습해보자!🙆🏻‍♀️🙆🏻‍♀️

각 security level 단계별로 살펴보겠다.

(1) low level의 경우

127.0.0.1을 실행했을 때, 아래와 같은 결과가 나온다.

image

소스코드 확인

image

소스코드를 보니 ping -c 4 명령어를 terminal에서 사용하면 DVWA에서 한 것과 같은 command Injection 공격을 할 수 있는것을 알 수 있다.

다음은 터미널에서 ping을 날린 결과이다. -c 4 는 ping을 4번 보낸다는 뜻이다. DVWA와 같은 결과가 나오는 것을 볼 수있다.

image

이번에는 뒤에 다른 명령어를 추가해 보낸 결과이다. 내 디렉토리 결과를 함께 전송하는 것을 볼 수 있다.

image

그 외 결과

image

이런 식으로 ; & | 등의 특수문자 뒤에 해커가 원하는 명령어를 보낼 수 있다.


DVWA화면에서는 다음과 같이 실행하면 된다.

image

(2) medium level의 경우

소스코드를 보면 && 과 ; 문자를 지워주는 코드가 추가되어 있어 ping -c 4 ; id 와 같은 명령어는 ping -c 4 id이런 식으로 실행되게 된다. 따라서 잘못된 명령어가 실행되는 것이다.

image

단, 다른 특수문자의 경우에는 해커에게 공격당할 수 있다.

(3) high level의 경우

소스코드를 보면 medium level 보다 더 많은 문자들에 대해 대응이 가능해졌다.

image

커맨드인젝션 공격 대응 👨‍🏫

Impossible level을 보면서 커맨드 인젝션 대응은 어떻게 막을 수 있는지 알아보자!

다음은 impossible level에서의 소스코드 부분이다.

KakaoTalk_20210708_214437622

입력된 값이 ip 주소가 맞는지 검증하고 있다.

💡 정리하자면 이와 같이 커맨드 인젝션을 대응하기 위해서는 입력값을 확실히 검증하는 것이 관건이다.



이미지 출처

https://edu.goorm.io/lecture/4953/화이트해커가-되기-위한-8가지-웹-해킹-기술

댓글남기기