DAY8
DAY8

보안: 핑 스캔 활용하기


수업 목적
1. 핑 스캔을 할 수 있다
2. 핑 스캔을 막을 수 있다.

su
*nmap
-v ; increase verbosity level
-sn ; ping scan - disable port scan

[ip찾기]
nmap -v -sn 10.0.2.0/24 > result.txt
cat result.txt
      Nmap scan report for 10.0.2.2
Host is up (0.00066s latency). ; gw
      Nmap scan report for 10.0.2.101
Host is up (0.0023s latency).
      Nmap scan report for 10.0.2.102
Host is up (0.00089s latency).
      Nmap scan report for 10.0.2.103
Host is up (0.0010s latency).


[port찾기]
nmap -v -p1-65535 10.0.2.101
      PORT STATE SERVICE
      22/tcp open ssh(취약)
      53/tcp open domain(취약x)
      80/tcp open http
      110/tcp open pop3
      111/tcp open rpcbind
      139/tcp open netbios-ssn
      143/tcp open imap
      445/tcp open microsoft-ds
      993/tcp open imaps
      995/tcp open pop3s
      2049/tcp open nfs
      3128/tcp open squid-http
      34819/tcp open unknown
      41859/tcp open unknown
      46421/tcp open unknown
      48267/tcp open unknown
      58859/tcp open unknown

ssh master@10.0.2.101 (접속 가능)
(단, id/pw 필요 => 무차별 대입 공격!!)

~무차별 대입 공격하기~
touch user.txt(파일생성)
touch passwd.txt(파일생성)

nano user.txt(내용수정)
nano passwd.txt(내용수정)

hydra -L user.txt -P passwd.txt 10.0.2.101 ssh(공격)

cd /var/log
ls
tail -f auth.log (실시간 기록 확인)


[master@domain]
nmap -v -p1-65535 10.0.2.101
hydra -L user.txt -P passwd.txt 10.0.2.101 ssh

[master@web]
nmap -v -p1-65535 10.0.2.102
hydra -L user.txt -P passwd.txt 10.0.2.102 ssh

[master@email]
nmap -v -p1-65535 10.0.2.103
hydra -L user.txt -P passwd.txt 10.0.2.103 ssh

Bootstrap Example

id/pw만 알면 접속할 수 있는 서비스 종류


ftp
ssh
telnet
imap
mysql


Bootstrap Example

미션1: 핑스캔이 안되도록 막아라!


*ping을 서버에서 막는 방법
sudo tcpdump
sudo tcpdump -i enp0s3 icmp
sudo sysctl -a | grep icmp
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
또는
iptables -A INPUT -p icmp -j DROP
iptables -L로 확인
sudo iptables -A INPUT -p icmp -j DROP
sudo iptables -F

=> ping은 막았지만(icmp) tcp를 사용하는 nmap은 막을 수 없었음 ㅠㅠ

Bootstrap Example

미션2: 미션2 www를 외부 접속이 가능하도록 설정하라(웹서버 구축하기)


www 네트워크 설정을 NAT로 한 뒤 포트포워딩 설정(사진;portpwding)


xshell
ssh 192.168.0.214

*user st 생성
sudo adduser st (123456/enter)
      info: Adding user `st' ...
      info: Selecting UID/GID from range 1000 to 59999 ...
      info: Adding new group `st' (1001) ...
      info: Adding new user `st' (1001) with group `st (1001)' ...
      info: Creating home directory `/home/st' ...
      info: Copying files from `/etc/skel' ...

cd /home
*user jyb 생성
sudo adduser jyb (123456/enter)

*권한 설정 이해
st.kr > /home/st/public_html ;st
jyb.kr > /home/jyb/public_html ;jyb
navre.com > /home/naver/public_html ;naver

/var/www/html (웹 기본 페이지) ; root


su
sudo passwd root (123456)
su

cd st
mkdir public_html (디렉토리 생성)
ls
***info: Copying files from `/etc/skel' ...
(만들어야할 권한이 많은 경우 `/etc/skel' 경로 내 public_html 만들면 복사가 가능하다.)

cd public_html/
mkdir includes
mkdir logs
mkdir auth
mkdir board
touch index.php
ls
(rmdir ; 삭제)

cd includes/
touch header.php
touch tail.php
touch db.php


cd /home
cd /var/www/html
nano index.php
      < ?php
            echo phpinfo();
      ? >

ls
index.php , index.html가 둘다 있을 경우 html이 php보다 우선순위가 높아서 먼저 현출된다.
index.php를 보고 싶으면 경로를 기입한다. (192.168.0.214/index.php)

apache의 경우 www_html만 사용 가능하므로 root 대신 새 계정(jyb)을 만들어서 운용한다.
a2enmod userdir
systemctl restart apache2
cd /home/st/public_html
touch index.html


cd /home/st
mkdir public_html
chown st:st public_html (소유자:소유그룹을 st로 변경)
chown st:st index.html (소유자:소유그룹을 st로 변경)
ls -al
su st
cd ~
chmod 711 $HOME (권한설정)
chmod 755 ~/public_html (권한설정)


apt update
apt -y install vsftpd (ftp 설치)
cat /etc/netplan/50[tab]
      version: 2
        ethernets:
        enp0s3:
        dhcp4: no
            addresses: [10.0.2.102/24]
            gateway4: 10.0.2.2
            nameservers:
                  addresses: [168.126.63.1]

nano /etc/vsftpd.conf
      write_enable=YES
      xferlog_file=/var/log/vsftpd.log
      chroot_local_users=YES
      chroot_list_enable=YES
      ls_recurse_enable=YES
      allow_writeable_chroot=YES
      chroot_list_file=/etc/vsftpd.chroot_list
      local_root=public_html

nano /etc/vsftpd.chroot_list
      st
      master
      jyb
      naver

systemctl restart vsftpd


에디트플러스
ftp서버 ; 192.168.0.214 (passive ftp check 해제) 연결
(html; 현출 페이지, php; 작동 페이지이므로 php가 더 취약해질 수 있다.
웹이 취약한 이유는 잘 못 만들어진 프로그램의 경우 접속을 할 수 있기 때문이다.
따라서 apt -y install lamp-server^만 설치하면 일반 사용자에서는 php가 정상적으로 작동하지 않는다.)


index.php 저장 오류
해결 => (권한) chown st:st index.php


sudo apt -y install lrzsz (파일업로드 프로그램 설치)
su st

apt -y install php8.3-fpm (php-fpm(fpm: fastCGI process manager) 설치)

a2enmod proxy_fcgi setenvif
a2enconf php8.3-fpm
systemctl restart php8.3-fpm apache2

chown st:st auth (소유자:소유그룹 변경)
chown st:st board (소유자:소유그룹 변경)
chown st:st includes (소유자:소유그룹 변경)
chown st:st logs (소유자:소유그룹 변경)
Bootstrap Example

미션3: hydra 사용해서 id, pw, name, level, regdate 알아내기!


mysql

create database st; (db생성)
create user st@localhost identified by '123456';
grant all on st.* to st@localhost;
flush privileges;

create database jyb; (db생성)
create user jyb@localhost identified by '123456';
grant all on jyb.* to jyb@localhost;
flush privileges;

create database naver; (db생성)
create user naver@localhost identified by '123456';
grant all on naver.* to naver@localhost;
flush privileges;

exit


cd st/public_html
dbconfig.php
< ?php
$host = 'localhost';
$dbname = 'st';
$user = 'st';
$passwd = '123456';
? >

root@
mysql -u st -p st < webhack.sql


mysql

use st;
show tables;
show databases;
select * from auth;

truncate table auth; (auth table 비우기)

INSERT INTO `auth` (`id`, `pw`, `name`, `level`, `regdate`) VALUES
('admin', 'admin1234', 'admin', 9, '2024-12-31 17:10:16');

exit


웹페이지
login_chk.php
메세지가 db 연결 성공 -> 'fail' 로 변경