호혁님이 제시한 수정방안 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가 실행이 된다 !!!!! (추후 기능추가하기)
기존에 사용되고 있는 로그 데이터와 센서 데이터를 연동하여 시각화해보자 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\securitycmd 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">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'
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 배포용 설정 완료 ***