20일차

●20일차(20250115)
엘라스틱 웹에 들어가자(discovery)
> edit plus로 볼수도 있지만 오래걸림
> 시각화 해서 볼것임
> 필터 client ip 추가 > 들어오는 ip확인 가능

[packetbeat]
nano /etc/packetbeat/packetbat.yml
> 많은 포트들이 써있다
> 이런 많은 포트들로부터 접근이 되면 엘라스틱 아웃풋(10.0.2.3)으로 가자
> hosts: ["10.0.2.3:9200"] 으로 수정
> systemctl restart packetbeat

[엘라스틱 웹]
줄3개 > stack management > index management(data) > packetbeat가 들어온걸 확인할 수 있다.
> 데이터베이스가 들어온것
> docs count > 실시간 데이터가 점점 쌓임
> 확인하려면 kibana로 가져오자

index patterns
> packetbeat가 있다
> name : 이름 그대로 복붙
> timestamp field : @timestamp
> kibana로 index path
> create index patterns
> 시간을 today로 맞추고 refresh 시간을 3초로 맞추자

kali에서 nslookup, dnsenum, nikto -host, hydra -L user.txt -P passwd.txt st.kr ssh
> 엘라스틱에서 뜬다
> nikto는 포트가 80으로 달라진다

> nikto

> hydra

+) logstash

[filebeat]
nano /etc/filebeat/filebeat.yml
-----------------------------
filebeat.inputs:
enabled: false > enabled: true

output
> 엘라스틱 주석 처리
> logstash 주석 제거, hosts: ["10.0.2.3:5044"] 수정

systemctl start logstash
> log 서버에서 systemctl start filebeat
systemctl enable filebeat
systemctl enable packetbeat
reboot

다시 엘라스틱 웹으로 들어가는지 확인
index > 원래 logstash가 떠야하지만 log서버가 준비가 안됨

로그 서버로 들어가
cd /etc/logstash
nano sample.conf

input {
  beats {
     port => 5044
  }
}
output {
   elasticsearch {
   hosts => ["localhost:9200"]
   index => "IP15_logstash-%{+YYYY.MM.dd}"
   }
}
systemctl start logstash
netstat -ant | grep 5044
> 엘라스틱 index에 떠야함
> host id, message
> 5044로 들어오라고 해야됨
> 인덱스로 넣어서 kibana로 가져가서 엘라스틱으로 보내

[burp suite]
kali dvwa
kali burp suite를 들어가보자
> 웹공격을 하자

target
open browser

proxy (대리인)
> openbrowser > dvwa.st.kr
> target > sitemap > dvwa.st.kr 사이트가 뜬다

[web2.st.kr]

(sitemap request)
GET / HTTP/1.1
Host: web2.st.kr
Accept-Language: en-US
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

(sitemap response)
HTTP/1.1 200 OK
Date: Wed, 15 Jan 2025 03:11:38 GMT
Server: Apache/2.4.62 (Ubuntu)
Last-Modified: Tue, 07 Jan 2025 01:27:28 GMT
ETag: "0-62b13a5e6c000"
Accept-Ranges: bytes
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
> 모든 웹이 이런식으로 반응한다

브라우저로 web2.st.kr/login.html
> sitemap에 코드가 보인다
> 아이디 비밀번호 임의로 넣으면 login.php가 sitemap에 뜬다
> php에서 오류가 남

[editplus 수정]
> web2.st.kr
> login.php에서 127.0.0.1 web2 123456 web2 로 수정
> login.html > name: id_param, pw_param
> name에 맞춰서 login.php 수정

user라는 테이블을 불러야 하는 코드가 있음
> 서버에서 web2 데이터베이스 추가
mysql
localhost
192.168.0.201
> workbench 접속

tables에 user 추가
idx
id_param
pw_param
idx에 PK,NN,AI 체크
>kali burp suite로 들어갔던 브라우저로 가서 아이디 비밀번호를 치면 php로 넘어가진다

[burp suite(intercept)]
proxy > intercept > intercept on > 브라우저 로그인 > kali에서 forward안하면 안넘어가짐
workbench에서 user 오른쪽마우스 클릭 select > admin 123456 추가

로그인을 성공하면 login_access
성공하지 못하면 0이 나오도록
> edit plus에서 수정

intercept on
admin 12345 > 일부러 틀리게 접속
forward 클릭

http history
틀리게 접속한 login.php 로그에서 오른쪽 마우스 클릭
send to intruder
password : 12345 > 12345 드래그 > add
payloads 클릭
1 12 123 1234 12345 123456 추가
start attack
> 진짜 비밀번호만 길이가 달라서 예측할 수 있다
> hydra와 방식이 비슷하다


[dvwa.st.kr 공격]
kali에서 다시 공격
관리자pc에서 엘라스틱에 들어가자
> 너무 많은 로그가 있기 때문에 검색
> client.ip : 100.100.100.1 and destination.port : 80


client.ip : 100.100.100.1 and destination.port : 80 and url.query : Login=Login&password=1&username=admin

정보를 보면 공격했던 데이터라는 것을 알 수 있다


서버에 들어가
cd /home/dvwa/public_html/logs
tail -f access.log
> 엘라스틱에서 확인했던 최초공격시간과 일치한다

security를 impossible로 두고
로그인을 5번 틀리면 막아버림
> 무차별 대입 공격을 막아버림
> 이걸 설정해야함

#새로운 환경 (ip 대역대 바꿈)
kali 192.168.56.101
server 192.168.56.102
selk 192.168.56.103
win7 192.168.56.104

일단 핑가는지 확인
dns 192.168.56.102로 설정
st.kr.zone
resolv.conf
> 192.168.56.102로 바꿔주고
> nslookup st.kr
> systemctl start apache2/named/bind9

filebeat packet 아웃풋 바꿔줘
> 192.168.56.103

dvwa에서 사용된 user 테이블은 몇개의 필드로 구성되어 있고 왜 있는가?
dvwa에서 로그인을 몇번 시도하면 막힘
> 이렇게 해야 무차별 대입 공격을 막음

데이터베이스에서 중요한 테이블은?
first_name
last_name
user
password
avatar
last_login
failed_login
> last_login, failed_login으로 막는것
> last는 timstamp, login은 횟수

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

CREATE USER 'web2'@'192.168.56.104' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON web2.* TO 'web2'@'192.168.56.104';
FLUSH PRIVILEGES;
> client(win7 관리자)의 IP를 넣어주는것
> 그래야 workbench가 돌아감
> dvwa가 이 환경에서도 돌아갔던 이유는 데이터베이스에 %로 설정해줬기 때문

user 삭제(drop) 후 코드추가
CREATE TABLE users (
idx int(6),
id_param varchar(15),
pw_param varchar(32),
last_login TIMESTAMP,
failed_login INT(3),
PRIMARY KEY (idx)
);
> 번개모양 누르면 users가 생김

editplus에 web2.st.kr로 들어가서 login.php 수정
> 원래대로 하면 무차별 대입공격에 당한다

[login.php]

<?php
	include __DIR__ . "/includes/db.php";

	$id_param = $_GET['id_param'];
            $pw_param = $_GET['pw_param'];

	//디폴트 변수 선언
	$total_failed_login=3;
	$lockout_time=5;
	$account_locaked=false;
/*
	//기본틀
	if () {

		if () {

		}
	}

	if () {

	} else {

	}
*/
?>
> /includes/db.php를 만들어줘야한다

[db.php]

<?php
	$host="localhost";
	$user="web2";
	$pw="123456";
	$db="web2";
	$conn = mysqli_connect($host,$user,$pw,$db);

	if ($conn == false) {
		echo mysqli_connect_error();
	} else {
		echo "연결성공";
	}
?>
> web2.st.kr/login.php 에 들어가면 연결성공이 뜬다
> nano /etc/bind/default 그거 st, naver말고는 안해도됨