본문 바로가기
  • 이게 왜 되지...?
시큐리티아카데미 7기 - sk쉴더스트랙/4주차 (2026.03.16 ~ 2026.03.20)

[시큐리티 아카데미 7기 - sk쉴더스 트랙] 16일차 - 2026.03.17

by smisooth 2026. 3. 17.

 

오늘 역대급 식단이었다

또이언니가 구워온 스팸에 할머니가 싸주신 참치마요까지ㅠㅠ

개맛도리에염ㅠㅠㅠ

 

우리 식도락팸 포에버ㅠㅠㅠ

 

 

 

1.  복습
   1) A01:취약점 접근 제어 
        ① 파일 다운로드잘 들어가면 화면에 뜨고 200이 뜨겠죠?
        ② 파일에 키워드를 넣어 놓든가
        ③ 대상
            i.  page/param?id=1
        ④ 공격패턴
            i.  ../../../etc/passwd
        ⑤ 공격탐지조건
            i.  200 and “root:x:0:0:”

    2) 파일 업로드
        ① 올라갔으면 1단계 통과고 이제는 어디에 올라가 있는지 알아야지
        ② 그걸 호출해서 웹 브라우저에 쉘 스크립트 만들어놓는다(?)
        ③ 요즘은 업로드가 되더라도 파일 이름을 랜덤하게 바꾸기 때문에 찾기게 매우 어려움
        ④ 문제는 정상적인 운영페이지인데 옛날 거를 삭제하지 않고 그대로 가져가면 공격 당하는 것
        ⑤ 올릴 때 보면 헤더의 콘텐트 타입이 뭔지를 봐야함
            i.  혹은 개발자 측면에서 콘텐트 타입을 필터링 해서 블록하겠다고 하는 경우도 있음


2.  위험한 형식 파일업로드
    1) 파일 업로드 

        ① 자 이제 파일을 업르드 했으니까 파일 위치를 찾아야 겠지?
            i.  위치 추측
            ii.  디렉터리 구조 확인

    2) 웹셀 열기 

        ① 요기에다가 명령어 넣어서 서버 창 장악하면 되겠죠?
        ② 권한을 뺏어서 아예 안나오게 하는 방법도 있음

    3) 방어
        ① 상식선으로 어떻게 방어해야할까?
        ② 실제 시큐어코딩 할거면 화이트리스트 하고 아니면 블락한다  


    4) 툴
        ① Sast
        ② Sca
        ③ Dast

    5) Shift+left
        ① 가장 왼쪽에 있는 단계부터 해라

 

    6) 매직넘버 (93P)
        ① 포렌식해서 검사들이 압수수색 하는데
        ② 그때 포렌식 툴은 docs 파일에 매직넘버로 어떤 파일인지 확인함
            i.  4,8 바이트 정도만 확인해주면 됨
            ii.  사진 




3.  자바스크립트 우회
    1) 쿠팡
        ① 글을 작성하고 글 번호를 다른 걸로 변경해보거나
        ② 다른 사람들의 비밀 글을 보거나 등등..

    2) 소스 부분 같이 보기
        ① 관리자만 들어올 수 있는 곳인데 접근 제어를 잘 설정해놓으면 되겠죠?
        ② 아니면 관리자 기능 페이지가 2개가 있는데 클릭을 하면 관리자 권한이 없다는 메시지가 즉시 뜰 수 있도록 하는 건데 그건 대부분 소스 기반임
        ③ 쿠키 체크하는 것도 잇음ㅇㅇ

    3) burp 동작하는 방법
        ① proxy 툴이고
        ② 웹 서버 간의 가로채기 가능한 역할
        ③ 헤더 값도 같이 넘어가고 리스펀스는 헤더에 자바스크립트를 같이 넣어놓는데
        ④ 우리는 그걸 가로채서 자바스크립트 수정했던 거 기억하지?
        ⑤ 자바 스크립트는 실제로 어디서 돌가?
            i.  자바스크립트는 100퍼 로컬 웹브라우저임

    4) 보안 주체
        ① 사용자 측면
            i.  웹 브라우저에서 동작
                -  Js, ts
            ii.  중요한 결정하면 안됨
        ② 서버 측면
            i.  서버에서 동작
                -  Java, aspx, php
            ii.  여기서 결정


4.  SSRF – 실습
    1) 최근 취약점임
    2) 조건
        ① 요청한 도메인으로 이동할 수 있는 리다이렉션 기능이 포함되엉 ㅣㅆ어야 함
    3) 테스트 페이지  
    4) 미리 만들어 놓은 파일로 들어가보기  

        ① 이걸 우리가 우회해야 겠죠?

    5) Burp 열기 


    6) 요청해보기 - 네이버


    7) 확인  

        ① http://localhost:8080/vulnerable/ssrf/hr요청하고
        ② Intercept on 시켰던 걸 꺼주면 아깐 권한이 없다고 한 게 잘 들어가는 것을 볼 수 있다

    8) 정리
        ① Open redirect
            i.  임의의 도메인 이동 취약점
            ii.  GET /vulnerable/ssrf?imageUrl=https%3A%2F%2Fnaver.com HTTP/1.1
        ② Ssrf
            i.  내부 시스템 이동
            ii.  내부 서버 직접 호출 및 접속
            iii.  http://localhost:8080/vulnerable/ssrf/hr
        ③ 내부 서버에 직접 호출이 안되는 이유는
            i.  방화벽 등에서 차단을 하고 있으니께
        ④ 웹서버는 개발자 입장에서 막으면 안되니까 우리는 거길 공격하는 거임


5.  Xss
    1) `악의적인 스크립트 삽입 및 실행을 통한 사용자의 정보(쿠키) 가로채기에 사용
    2) 타입 


    3) https://demo.testfire.net/
        ① 오른쪽 상단 검색창에 1234를 넣으면 그대로 나오는데 이러면 xss 의심해야함
            i.  취약할 가능성이 있다~
        ② 예시 : <script>alert("1")</script> 

            i.  이렇게 팝업으로 뜸

    4) xss cheat sheet
        ① 패턴을 다양하게 두고 다 해봐야 함 

            i.  많이 있쥬?

    5) 정리
        ① 입력값을 html로 출려하는 경우 -> xss
        ② 시큐어코딩 : 출려값을 변환해서 안전하게 처리
        ③ “<” -> &lt
        ④ “>” -> &gt

 

 

6.  모의 해킹 – union
    1) 접속
        ① http://testphp.vulnweb.com/listproducts.php?cat=1

    2) 결과
        ① 아이디, 비번 싹 다 확 볼 수 있음

    3) 블라인드
        ① 뒤에서 설명할 거긴 한데 얘는 한번에 못봄
        ② 하나씩 요청해서 따와야함


7.  Sqlmap
    1) http://testaspnet.vulnweb.com/Comments.aspx?id=2
    2) python sqlmap.py "http://testaspnet.vulnweb.com/Comments.aspx?id=2" --batch 

        ① 한줄한줄 잘 넘어가는 것을 볼 수 있음
        ② 배치처리 = 응답자동

    3) 옵션을 하나 더 넣어줄 수도 있음
        ① python sqlmap.py "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch –dbs
            i.  dbs = db 정보 유출
        ② python sqlmap.py "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch -D acuart --tables
            i.  –tables = 추출된 db를 이용하여 테이블정보 추출
        ③ python sqlmap.py "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch -T users --columns
            i.  –columns = 추출한 테이블 중 1개를 선택하여 컬럼 이름 추출
        ④ python sqlmap.py "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch -T users -C uname, name, pass --dump
            i.  -C = 컬럼이름 지정
            ii.  -dump = 추출한 모든 정보 출력
        ⑤ 위험도/레벨 설정 (1-5, 높을수록 공격적)
            i.  sqlmap -u "URL" --level=5 --risk=3


8.  SQL Injection (SQL 삽입)
    1) 안전한 로그인 

        ① 성공


    2) 시큐어코딩
        ① 취약한 인터페이스는 내부로 돌어오면 변수에 각각 저장하고 try로 쿼리 생성해서 실행함
        ② 이렇게 쿼리에 직접적으로 들어가는 게 보이는 걸 statement 방식이라고 함
        ③ 즉 외부 입력값이 쿼리에 직접 삽입되는 방식인거임

    3) 해결
        ① 외부 입력값을 쿼리를 조작하지 못하는 방식으로 만들어 버리기
        ② 아까는 변수가 직접 들어갔다면 prepared는 ?로 대신해서 setString으로 아이디 비번을 받음
        ③ Sql injection 절대 안 먹힘


9.  Spotbug
    1) 플러그인에서 설치 후 실행


    2) 결과


    3) 시큐리티 들어가보기 

        ① 아까 얘기했던 statement 방식이 취약하다고 표시되는 것을 볼 수 있음

 

 

10.  부적절한 XML 외부개체 참조 (XXE)
    1) 그냥 1234를 입력했을 경우

        ① brup에서 proxy로 확인


    2) 변경
        <?xml version="1.0"?>
        <!DOCTYPE request [
          <!ENTITY xxe SYSTEM "file:///c:/">
        ]>
        <request>
          <input>&xxe;</input>
        </request>


    3) 다시 확인 

        ① 요렇게 변경되서 나오는 것을 볼 수 있음


    4) 코드에서 확인하기 

        ① 트루, 펄즈로 되어있는 거 보이지?
        ② 그거임