카테고리 없음

25.02.04

highstar9413 2025. 2. 4. 14:27

오전수업

1. SQL

숫자형 : INT, FLOAT
날짜형 : DATE

숫자형---->문자형<----날짜형
날짜형, 숫자형 데이터를 문자형으로 변환하는 TO_CHAR()

- 문자형 데이터를 숫자형 데이터로 암시적으로 변환한다.
오라클은 문자형과 숫자형 두 개를 비교할 때는 문자형을 숫자형으로 암시적으로 변환하기 때문에 에러가 발생하지 않고 검색이 가능하다.

Q1> 이름이 SCOTT인 사원의 이름과 입사한 요일을 출력하고, SCOTT의 월급에 천 단위 기호를 붙여 출력한다.
    조건1 입사일을 요일로 출력
    조건2 월급을 천단위 기호 표시로 출력
    조건3 SCOTT사원의 정보만 출력
SELECT ename, hiredate, sal, TO_CHAR(hiredate, 'DAY') as 요일, TO_CHAR(sal, '999,999') as 월급
        FROM emp
                WHERE ename = 'SCOTT';

Q2> 1981년도에 입사한 사원의 이름과 입사일을 출력한다.
SELECT ename, hiredate
        FROM emp
                WHERE TO_CHAR(hiredate, 'RRRR') = '1981';
                
SQL의 데이터를 검색할 수 있는 폼 -> office(액세스)

날짜 형식 : 81/12/12 --> 연도 -> YYYY, RRRR(Oracle연도 형식)
연도 : RR, RRRR
월 : M, MM
일 : D(요일/ 일=0 월=1 ...토=6), DD
요일 : DAY( 일=0 월=1 ...토=6)
주 : WW, IW, W
시간 : HH, HH24
분 : MI
초 : SS
Q3> SCOTT 사원의 이름과 입사 연도, 입사 월, 입사일을 출력한다.
SELECT ename, hiredate, TO_CHAR(hiredate, 'YYYY') AS 입사연도,
                                    TO_CHAR(hiredate, 'MM') AS 입사월,
                                    TO_CHAR(hiredate, 'DD') AS 입사일,
                                    TO_CHAR(hiredate, 'DAY') AS 입사요일,
                                    TO_CHAR(hiredate, 'D') AS 입사요일
        FROM emp
            WHERE ename = 'SCOTT';

Q4> EXTRACT 함수를 이용하여 연도/월/일/시간/분/초를 출력한다.
SELECT ename, hiredate,
                            EXTRACT(year from hiredate) as 년,
                            EXTRACT(month from hiredate) as 월,
                            EXTRACT(day from hiredate) as 일
        FROM emp;

 

Q5> 이름과 월급을 출력할 때 천 단위와 백만 단위를 표시하여 출력한다.
SELECT ename, sal*2000, TO_CHAR(sal*20, '999,999') as "월급1",
                        TO_CHAR(sal*2000, '999,999,999') as "월급2"
        FROM emp;

Q6> 이름과 월급을 출력할 때 원화 기호를 표시하여 출력한다.
SELECT ename, sal*2000, TO_CHAR(sal*20, 'L999,999') as "월급1",
                        TO_CHAR(sal*2000, 'L999,999,999') as "월급2"
        FROM emp;

- 특정 날짜 뒤에 돌아오는 특정 요일의 날짜를 출력하는 NEXT_DAY()
SELECT '2025/02/04' as 날짜, NEXT_DAY('2025/02/04', '월요일') as 다음요일
        FROM dual;

Q2> 오늘로부터 돌아올 화요일의 날짜를 출력한다.
SELECT NEXT_DAY(sysdate, '화요일') as 다음요일
        FROM dual;

Q3> 오늘부터 36달 뒤에 돌아오는 화요일의 날짜를 출력한다. ( ADD_MONTHS() )
SELECT NEXT_DAY(ADD_MONTHS(sysdate, 36), '화요일') as 다음요일
        FROM dual;

 특정 날짜가 있는 달의 마지막 날짜를 출력하는 LAST_DAY()
 Q1> 2025년 2월 4일 해당 달의 마지막 날짜를 출력한다.
SELECT '2025/02/04' as 날짜, LAST_DAY('2025/02/04') as 마지막날짜
        FROM dual;

Q2> 오늘부터 이번 달 말일까지 총 몇일 남았는지 출력한다.
SELECT LAST_DAY(sysdate) - sysdate as 남은날짜
        FROM dual;

SELECT ename, hiredate, LAST_DAY(hiredate) as "입사한 달의 마지막 날짜"
        FROM emp
                WHERE ename = 'SCOTT';

문자를 날짜형으로 출력하는 TO_DATE()
Q1> 81년 11월 17일에 입사한 사원의 이름과 입사일을 출력한다.
SELECT ename, hiredate
        FROM emp
            WHERE hiredate = TO_DATE('81/11/17', 'RR/MM/DD');

- NULL 값 대신 다른 값을 출력하는 NVL()
SELECT ename, comm, NVL(comm, 0) as 커미션
        FROM emp;

Q2> 이름, 월급, 커미션, 월급 + 커미션을 출력한다.
SELECT ename, comm, sal, NVL(comm, 0) + sal as "월급+커미션"
        FROM emp;

Q3> 이름, 월급, 커미션을 출력한다. 단, NULL이 아닌 사원들은 월급 + 커미션을 출력하고, NULL인 사원들은 월급을 출력한다.
SELECT ename, sal, comm, NVL2(comm, sal+comm, sal)
        FROM emp;

IF문을 SQL로 구현해주는 DECODE()
Q1> 부서번호가 10이면 보너스 300, 부서번호가 20이면 보너스 400, 부서번호가 10,20이 아니면 보너스를 0으로 출력한다.
SELECT ename, deptno, DECODE(deptno, 10, 300, 20, 400, 0) as 보너스 
        FROM emp;
        
**기본 프로그램으로 작성할 경우
IF deptno = 10 THEN 300
ELSEIF deptno = 20 THEN 400
ELSE 0

Q2> 사원번호와 사원번호가 짝수인지 홀수인지를 출력한다.
SELECT ename, empno, DECODE(MOD(empno, 2), 0, '짝수', 1, '홀수') as 보너스
        FROM emp;

Q3> 이름, 직업, 보너스를 출력할 때, 직업이 SALESMAN이면 보너스 5000, 나머지 직업은 보너스 2000을 출력한다.
SELECT ename, job, DECODE(job, 'SALESMAN', 5000, 2000) as 보너스
        FROM emp;

IF문을 SQL로 구현해주는 CASE ~END
Q1> 이름, 직업, 월급, 보너스를 출력할 때 월급이 3000이상이면 보너스 500, 
월급이 2000이상이고 3000미만이면 보너스 300, 
월급이 1000이상 2000미만이면 보너스 200, 
나머지 사원들은 보너스 0을 출력한다.
SELECT ename, job, sal, CASE WHEN sal>=3000 THEN 500 
                                            WHEN sal >= 2000 THEN 300
                                            WHEN sal >= 1000 THEN 200
                                            ELSE 0 END  as 보너스
        FROM emp;

Q2> 이름, 직업, 커미션, 보너스를 출력할 때, 커미션이 NULL이면 보너스 500, 커미션이 NULL이 아니면 보너스 0을 출력한다.
SELECT ename, job, comm, CASE WHEN comm is NULL THEN 500
                                                ELSE 0 END as 보너스
        FROM emp;

Q3> 이름, 직업, 보너스를 출력할 때, 직업이 SALESMAN, ANALYST이면 보너스 500, CLERK, MANAGER이면 보너스 400을 나머지 직업은 보너스 0을 출력한다.
SELECT ename, job, CASE WHEN job IN('SALESMAN','ALALYST') THEN 500
                                    WHEN job  IN('CLERK','MANAGER') THEN 400
                                    ELSE 0 END as 보너스
        FROM emp;

2. 모의 해킹 - 웹 해킹( 모의해킹 + 포렌식 + 악성코드분석 + 서버구축)

OS : KAli, Rocky9-Board게시판, Ubuntu SERVER-Board게시판, DVWA

Network : NAT 자동할당

SERVICES : HTTP, TLENET, SSH, FTP

Tools : GNS3, Wireshark, NMap, dsniff, Tcpdump


KALI : 172.1.8.134 172.1.8.2

Rocky9-Board : 172.1.8.135 172.1.8.2


US-Board: 172.1.8.132 172.1.8.2

DVWM : 172.1.8.136 172.1.8.2

 

우분투 서버 NAT변경법
network:
  ethernets:
    ens32:
      dhcp4: true
  version: 2

모의 해킹
1) 시스템 해킹 -> 악성코드 분석 + 포렌식
2) 네트워크 해킹 -> LAN/WAN -> 스니핑, 스푸핑, DDoS
3) 인터넷 해킹(웹 해킹) -> 인젝션

DoS 서비스 거부 공격 -> 핵미사일 1방
DoS를 세밀하게 쪼개면 DDoS
DDoS 분산 서비스 거부 공격 -> 미사일 500방

C:\Windows\System32 <--여기가 운영체제 다운로드
메일 서버
1) SMTP		메일 송신서버
2) POP3		메일 수신서버
3) IMAP		메일 알림서버
4) S/MIME	대용량 첨부파일

메일 역할
1) MUA		메일 작성 프로그램 - 아웃룩 익스프레스, 썬더버드
2) MDA		메일 임시 저장소 (우체통 - 전송 버튼 누른 순간 꺼내고 수정할 수 없음.)
3) MTA		메일 전송 서버 = Sendmail, OutlookExpress, Posrfix, Qmail...

** 부인 방지 - 읽음 확인

http://www.ktword.co.kr/test/view/view.php?no=5465

 

ICMP 메세지

  ICMP Message   ICMP 메세지, ICMP 메세지 종류, ICMP 메세지 구분(2022-07-16)ICMP type, ICMP code 1. ICMPv4 주요 메세지 구분 ☞ IANA ICMPv4 Parameters ㅇ ICMP 오류 메세지 (Error Reporting Message) - 목적지도달불가 (Destin

www.ktword.co.kr

** ICMP 패킷 필터 (echo request = 8 & echo reply = 0)
(ip.src == 172.16.8.130) && (ip.dst == 172.16.8.133) or (icmp.type == 8) || (icmp.type == 8)
cat /proc/sys/net/ipv4/icmp_echo_ignore_all 로 확인
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
-> 0을 1로 바꾸면 다른 곳에서 ping치면 ping 안감.

Rocky9 설치
dnf install fping
Ubuntu 설치
apt install fping
살아있는 ip확인 가능
fping -q -a -s -g 172.1.8.0/24
VMware 네트워크 모드
				인터넷		호스트PC(실제 윈도우10)		게스트PC(VMware의 다른 OS)		IP설정
1) 브릿지			O				O				O			고정(각자 집에서는 자동)
2) NAT				O				O				X			자동(주의: 1~9까지는 사용하지 않는다.)
3) Host-Only			X				X				X <---GNS3 + VMware OS	자동
Rocky9 nmap 설치
dnf install nmap
Ubuntu nmap 설치
apt install nmap

https://nmap.org/download.html#windows

 

Download the Free Nmap Security Scanner for Linux/Mac/Windows

Download Reference Guide Book Docs Zenmap GUI In the Movies Older versions (and sometimes newer test releases) are available from the Nmap release archive (and really old ones are in dist-old). For the more security-paranoid (smart) users, GPG detached sig

nmap.org

nmap 포트 스캔
nmap -sT 172.1.8.135  <--Rocky9

nmap 스캔 옵션과 실행 옵션
-sT	connect()함수를 이용한 Open 스캔
-sS	세션을 성립시키지 않는 SYN 스캔
-sF	FIN 패킷을 이용한 스캔
-sN	NULL 패킷을 이용한 스캔
-sX	XMAS 패킷을 이용한 스캔
-sP	ping을 이용한 호스트 활성화 여부 확인
-sU	UDP 포트 스캔
-sR	RCP 포트 스캔
-sA	ACK 패킷에 대한 TTL 값의 분석
-sW	ACK 패킷에 대한 윈도우 크키 분석
-b	FTP 바운스 스캔

-f	스캔할 때 방화벽을 통과할 수 있도록 패킷을 조각냄
-v	스캔의 세부 사항 표시
-P0	스캔 전 ping을 하지않고 ICMP Echo Request를 허용하지 않는 호스트에 대한 스캔을 할 때 설정
-PT	ping의 대용 ICMP 패킷을 이용하지 않고, TCP 패킷을 이용해 해당 시스템이 작동 중인지 검사
-PS	TCP의SYN 패킷만을 보내 시스템 활성화 여부를 검사
-PI	시스템 활성화 여부를 ICMP로 검사
-PB	TCP와 ICMP 둘 다 사용해서 호스트 활성화 여부를 검사
-O	시스템 운영체제를 추정
-l	Ident 프로토콜(RFC1413)을 사용해 열려있는 프로세스가 어떤 사용자에 의한 것인지 검사
-n	DNS 룩업을 하지 않음
-R	DNS 룩업을 함
-T 시간차를 이용한 스캔을 하기 위한 것으로 Paranoid, Snaky, Normal, Aggressive, Insane이 각각 0부터 5까지의 숫자를 가짐.
공격기법
1) 스니핑 : 엿보기 ex) 도청, 전기적 신호를 템페스트 장비로 분석하는 것 등
2) 스푸핑 : 속임수
3) 스니핑 + 스푸핑 = 파밍(전화: 보이스피싱)

위 사진 차이 flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  가운데 뭐가 없는게 원래 정상.

promisc 설정방법
ifconfig eth0 promisc
설정해지 방법
ifconfig eth0 -promisc
자체 모니터링 프로그램 tcpdump
Rocky9
dnf install tcpdump
Ubuntu
apt-get install tcpdump

랜카드 해킹 프로그램
Rocky9
dnf install dsniff 
Ubuntu
apt-get install dsniff
아래 파일 각 서버에 다운로드 후 압축 풀기
tar xvfz fragrouter-1.6.tar.gz

fragrouter-1.6.tar.gz
0.26MB

 

telnet설치 후 설정
apt install -y xinetd
cd /etc/xinetd
vi telnet 후 아래 입력

service telnet
{
	disable		= no
    flags		= REUSE
    socket_type	= stream
    wait		= no
    user		= root
    server		= /usr/sbin/in.telnetd
    log_on_failure	+=USERID
}

중간에 가로챈 패킷 원래 경로로 전송
fragrouter -B1

dsniff 켜놓은 다음에 telnet 접속하기