DAY55
DAY55

트로이목마 만들기 프로젝트 수정안


호혁님이 제시한 수정방안
1. 공격자로 설정했던 윈도우를 피해자로 변경
2. 공격자는 칼리리눅스로 운영
3. 칼리리눅스에서 모든 서비스 가동 (아나콘다, 자바 설치 자바는 8버전 이하가 좋음)
4. 칼리리눅스의 서비스 경로는 /home/ubuntu/placeholder로 설정
5. 칼리에서 여는 웹은 5723번으로 설정 (python3 -m http.service 5723 웹 경로는 placeholder에 build임)
6. 모든 서비스를 실행 했다면 피해자 윈도우에서 바이러스와 합쳐져있는 java8_u25jar를 실행 
7. 피해자 윈도우는 트로이목마에 감염이 됨 -> 윈도우를 다시 시작해도 요청을 실행하는것을 확인했음
8. 공격자 칼리에서 tcpdump를 사용해서 피해자가 169.254.169.254에 NetBIOS 요청을 보내는 것을 확인
9. 169.254.169.254는 AWS의 주소???

py의 코드들은 윈도우에서 실행하게끔 설계되어 있음 (5715, 5720포트) 그러나 트로이 목마를 다운받는 경로는 /home/ubuntu로 우분투를 사용하는 것으로 보임 (5723포트) >> 쿠쿠처럼 vmware에서 윈도우설치 후 vbox를 설치하는 방향으로 수정??
>> 169.254.169.254???

하송님이 알려준 진행내용
kali 설정

1. 아나콘다 설치
Anaconda3-2024.10-1-Linux-x86_64.sh xshell에 붙여넣기
chmod 777 Anaconda3-2024.10-1-Linux-x86_64.sh
./Anaconda3-2024.10-1-Linux-x86_64.sh
	enter / q / yes / enter / yes

2. 자바 설치
openlogic-openjdk-8u422-b05-linux-x64-deb.deb xshell에 붙여넣기
sudo dpkg -i openlogic-openjdk-8u422-b05-linux-x64-deb.deb

nano .bashrc
export JAVA_HOME=/usr/lib/jvm/openlogic-openjdk-8-hotspot-amd64
export PATH=$JAVA_HOME/bin:$PATH

source .bashrc
오류시 bash --rcfile ~/.bashrc
source .bashrc

cd /placeholder-master/src/client
java -version
openjdk version "1.8.0_422-422"
javac -version
javac 1.8.0_422-422

3. 실행
javac Placeholder.java 오류시
//import com.sun.org.apache.regexp.internal.RE;
javac Placeholder.java

java Placeholder 오류시
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libxi6:i386 libxrender1:i386 libxtst6:i386
	Y

xshell에서 kali로 돌아와서
java Placeholder 시 트로이목마 ui가 실행이 된다 !!!!! (추후 기능추가하기)

Bootstrap Example

플라스크 또는 장고를 이용한 로그 분석 시스템 구축


기존에 사용되고 있는 로그 데이터와 센서 데이터를 연동하여 시각화해보자

0)기존 데이터 확인
cat /etc/*release*
로그 데이터 : 192.168.0.118 (우분투 > syslog)
센서 데이터 : 192.168.0.98 (Raspbian GNU ; 라즈베리파이)

show databases;
use master;
show tables;
desc sensor_data;
select * from sensor_data order by idx desc limit 0,10;

+-------+------------+-------------+----------+---------------------+
| idx   | distance   | temperature | humidity | regdate             |
+-------+------------+-------------+----------+---------------------+
| 81429 | 96.2481141 | 20          | 41       | 2025-02-28 00:00:00 |
| 81428 | 2807.55491 | 22          | 43       | 2025-02-28 00:00:00 |
| 81427 | 2774.25917 | 22          | 43       | 2025-02-28 00:00:00 |
| 81426 | 2774.16104 | 21          | 42       | 2025-02-28 00:00:00 |
| 81425 | 2806.18105 | 20          | 41       | 2025-02-28 00:00:00 |
| 81424 | 2771.73225 | 21          | 42       | 2025-02-28 00:00:00 |
| 81423 | 1929.69311 | 23          | 43       | 2025-02-28 00:00:00 |
| 81422 | 2760.2793  | 22          | 43       | 2025-02-28 00:00:00 |
| 81421 | 2764.26595 | 21          | 42       | 2025-02-28 00:00:00 |
| 81420 | 2787.82607 | 20          | 40       | 2025-02-28 00:00:00 |
+-------+------------+-------------+----------+---------------------+

1) 플라스크 경로 이해하기
cmd
mysite
flask run
http:127.0.0.1:5000

ci4에서 routes에 경로 지정해둔 것과 같은 과정 필요
ci4 > mvc (model, view, controller)
flask, django > mtv(model, template, view)

비교
ci4 : routes > controller > view
flask : init > view > template


edit+
c:\projects\flask\security

main.py 생성

1트
from flask import Blueprint


bp = Blueprint('main',__name__,url_prefix='/')
@bp.route('/')

def index():
   return 'Hello'

2트-------------------------------
from flask import Flask

def create_app():
   app = Flask(__name__)

   from .views import main
   app.register_blueprint(main.bp)

   #@app.route('/')
   #def index():
   #   return 'Hello'
   return app

3트-------------------------------
from flask import Blueprint

bp = Blueprint('main',__name__,url_prefix='/')
@bp.route('/init')
def init():
	return 'init'

@bp.route('/profile')
def profile():
	return 'profile'

@bp.route('/')
def index():
	return 'Hello'
cmd run flask => 똑같이 실행됨! ***정리 경로 c:\projects\flask\security security > __init__.py 경로 생성 from .views import auth를 따라 views > .py 생성 return render_template('auth/mypage.html')를 따라 templates > auth > mypage.html 생성 127.0.0.1:5000/ 127.0.0.1:5000/init 127.0.0.1:5000/profile 127.0.0.1:5000/syslog/ 127.0.0.1:5000/sensor/ ------------------------------- https://startbootstrap.com/ 2) 플라스크 응용하기 header와 footer 만들기 위치: templates base.html A {% block content %} {% endblock %} main > base.html {% extends 'base.html' %} {% block content %} AA {% endblock %} =>'.html'의 내용을 불러올 수 있음 ! A AA 현출 base.html header.php내용 넣기 {% block content %} {% endblock %} {% include "footer.html"%} 절대경로 사용해보기!! < link href="../static/css/sb-admin-2.min.css" rel="stylesheet"> < link href="{{url_for('static',filename='sb-admin-2.min.css ')}}" rel="stylesheet">

Bootstrap Example

천재소녀 조은님 flask 서버 셋팅 설정


sudo apt update
sudo apt -y install lrzsz
sudo apt -y install unzip

date 
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
cd ~
mkdir venvs
cd venvs
python3 -m venv mysite
	오류시 sudo apt install python3.10-venv
python3 -m venv mysite
cd mysite
cd bin
. activate

pip install wheel
pip install flask
pip install Flask-Migrate
pip install Flask-WTF
pip install email_validator
pip install Flask-Markdown
pip install pymysql
pip install mysql-connector-python
pip install cryptography


경로
cd /home/master/venvs

nano mysite.sh
#!/bin/bash
cd ~/projects/flask
export FLASK_APP=security
export FLASK_ENV=production
export APP_CONFIG_FILE=/home/master/projects/flask/config/production.py
. ~/venvs/mysite/bin/activate


경로
cd ~

nano .profile
alias mysite='export FLASK_APP=security;export FLASK_ENV=production;export APP_CONFIG_FILE=/home/master/projects/flask/config/production.py; cd ~/projects/flask; . /home/master/venvs/mysite/bin/activate'

source .profile
mysite #cmd처럼 mysite만 쳐도 플라스크 접속 가능

***/home/master/projects/flask 경로 있어야함
mkdir projects
cd projects
mkdir flask
cd flask


경로
cd /home/master/venvs

nano mysite.env
FLASK_APP=security
FLASK_ENV=production (#배포용 <-> development #디버깅모드)
APP_CONFIG_FILE=/home/master/projects/flask/config/production.py

config 폴더 없는 것 확인
기본 디렉토리, 파일 생성
c:\projects\flask\config
config
__init__.py
default.py
production.py
development.py

default.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

***개발자버전과 배포용 분리하기***
서버와 개발환경을 위한 config 분리

development.py#개발환경
from config.default import *
SQLALCHEMY_DATABASE_URI='sqlite:///{}'.format(os.path.join(BASE_DIR,'security.db'))
SQLALCHEMY_TRACK_MODIFICATIONS=False
SECRET_KEY="dev"

production.py#배포환경
from config.default import *
SQLALCHEMY_DATABASE_URI='sqlite:///{}'.format(os.path.join(BASE_DIR,'security.db'))
SQLALCHEMY_TRACK_MODIFICATIONS=False
SECRET_KEY="b'\xe0\xd9\xc3\xee\xa5\x8f\x1dm\xe6\xc2'\x19M\xc1\xf0\xe1'"

cmd
python -c "import os;print(os.urandom(16))"
=> b"\xe0\xd9\xc3\xee\xa5\x8f\x1dm\xe6\xc2'\x19M\xc1\xf0\xe1"
==> 결과값을 development.py와 production.py의 SECRET_KEY=""에 붙이기

c:\venvs
mysite.cmd
@echo off
cd c:\projects/flask
set FLASK_APP=security
set FLASK_ENV=development
set APP_CONFIG_FILE=c:\projects\mysute\config\development.py
c:\venvs\mysite\scripts\activate

c:\projects\flask\security
__init__.py
	app.config.from_envvar('APP_CONFIG_FILE') 추가하기

flask 실행시 개발자 모드일 경우
cmd
set APP_CONFIG_FILE=C:\projects\flask\config\development.py
flask run
=> 개발자 모드로 시작
***************************

sudo apt -y install nginx
(아파치로도 운용할 수 있지만 교재를 따라 nginx로 설치)


경로
cd /etc/nginx/sites-available

sudo nano mysite
server {
  listen 80;
  server_name 192.168.0.24;
  location = /favicon.ico { access_log off; log_not_found off; }
  location /static {
    alias /home/master/projects/flask/security/static;
  }
  location / {
    include proxy_params;
    proxy_pass http://unix:/tmp/mysite.sock;
  }
}


cd /etc/nginx/sites-enabled
sudo rm -rf default

sudo ln -s /etc/nginx/sites-available/mysite

sudo systemctl restart nginx
sudo nginx -t
sudo systemctl start nginx

오류시
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl restart nginx


pip install gunicorn

경로
sudo nano /etc/systemd/system/mysite.service
[Unit]
  Description=gunicorn daemon
  After=network.target
[Service]
  User=master
  Group=master
  WorkingDirectory=/home/master/projects/flask
  EnvironmentFile=/home/master/venvs/mysite.env
  ExecStart=/home/master/venvs/mysite/bin/gunicorn \
    --workers 2 \
    --bind unix:/tmp/mysite.sock \
    "security:create_app()"
[Install]
  WantedBy=multi-user.target


sudo systemctl enable nginx
sudo systemctl enable mysite

c:위치의 flask 압축해두기

unzip flask.zip

sudo reboot

sudo systemctl restart nginx
sudo systemctl restart mysite


그외 오류 해결
1. app 확인이 어렵다는 오류
c:\projects\flask\config\__init__.py
	def init_app(app):
    app.config.from_envvar('APP_CONFIG_FILE')로 변경
2. flask 실행 안됨
경로
c:\venvs\mysite.cmd
set APP_CONFIG_FILE=c:\projects\mysite\config\development.py
	mysute로 오타 났었음 !!!!


마지막 미션
로그인 페이지 만들기

base.html
< h6 class="collapse-header">Login Screens:
                        < a class="collapse-item" href="{{url_for('auth.login')}}">Login
로 절대경로로 수정

auth.py
@bp.route('/')
def login():
	return render_template('auth/login.html') 추가


login.html
{% extends 'base.html' %}
{% block content %}

~login.html 내용 넣기~

{% endblock %}

=> 127.0.0.1:5000 /login


***
로컬 >>> development 개발자용 설정 완료
서버 >>> production 배포용 설정 완료
***