전체 글92 [HTTP] Cache Control 캐시는 자주 사용되는 데이터나 값을 임시로 저장해 두는 공간으로, 이를 통해 데이터 접근 속도를 향상시키는 역할을 합니다.웹캐시는 웹 페이지나 기타 웹 리소스를 임시로 저장해 두는 공간으로, 이를 통해 웹 페이지 로딩 속도를 향상시키고 서버 부하를 줄이는 역할을 합니다.캐시 설정 방법서버에서 캐시 설정CDN(중간 서버)에서 캐시 설정프론트에서 캐시 설정 1. 서버에서 캐시 설정1-1. HTTP Response Header의 Cache-Control 속성속성설명no-store데이터를 캐싱하지 않음no-cache데이터를 캐싱하긴 하지만, 매 요청마다 서버 측에서 유효성 검사를 해야 함max-age={seconds}{seconds} 동안은 캐싱된 데이터를 사용하며, {seconds}가 지나면 서버 측에서 유효.. 2026. 10. 7. [실습] Spring4Shell(CVE-2022–22965) 시작은 미약했으나 끝은 … 모르겠는 Spring4Shell 취약점 검증기 Spring4Shell(CVE-2022–22965) 취약 환경 구축 및 Black-box 분석이번 글에서는 Docker Desktop Kubernetes 환경에서 Spring4Shell(CVE-2022–22965) 취약 환경을 구성하고, 공격자 Pod에서 대상 Pod로 접근하면서 취약점이 어떻게 동작하는지 확인해본다.단순히 POC를 실행하는 것보다, 공격자가 대상 환경에 대한 정보를 모르는 상태에서 하나씩 확인해나가는 과정에 집중했다. Step 1. PreRequisite먼저 Spring4Shell(CVE-2022–22965)이 어떤 환경에서 문제가 되는지 확인했다.실습 환경은 다음 조건을 만족하도록 구성했다.JDK 9 이상Spri.. 2026. 10. 7. [실습] RCE 공격 (Blue) 지난 내용에 이은 방어자 관점docker target-app 내부 접속확인 리스트1. Web Server Log# uploads 경로에 접근했거나 php 파일을 실행한 로그 검색grep "shell.php" /var/log/apache2/access.log# 업로드 폴더 내 위장된 실행 파일(.php 등) 검색find /var/www/html/ -name "*.php" -type f# 웹 서버 액세스 로그에서 침해 지표 탐지tail -n 100 /var/log/apache2/access.log | grep -E "POST|GET.*(\.php|\.phtml)" 2. 웹 서버 계정(www-data)이 띄운 셸 프로세스 확인# www-data 권한으로 실행 중인 shell 프로세스가 있는지 확인ps -ef .. 2026. 10. 7. [실습] RCE 공격 (Red) CLI 환경에서의 파일 업로드 자동화와 리버스 쉘 획득 1. PreRequisiteWindows 11WSL2Docker Desktop (Compose Spec) / Kali Linux / DVWA2. Isolation[Host PC (Windows)] └── Docker Engine (WSL2) └── [poc-net] (172.20.0.0/16 Bridge Network) ├── Target: target-app (172.20.0.10:80) localhost:8080 (Host Browser) └── Attacker: attacker (172.20.0.20) 공격 패킷 및 리버스 쉘 트래픽은 172.20.0.0/16 내부망에서만 처리.로컬 .. 2026. 10. 5. [용어] SNMP 1. 각 호스트로부터 정기적으로 여러 관리정보를 자동으로 수집하거나 실시간으로 상태를 모니터링 및 설정할 수 있는 서비스의 프로토콜 2. 구성요소 1. 관리 시스템: Manager - 162/udp 2. 관리 대상: Agent - 161/udp 3. 네트워크 관리를 위한 목적으로 주로 서버나 네트워크 장비에서 SNMP를 설정한 후 MRTG 프로그램을 이요해 트래픽 관리를 위해 사용된다 1. MRTG: Multiple Router Traffic Grapher: 네트워크 트래픽 사용량 모니터링. 벤더에서 제공하는 SNMP MIB값을 사용하여 다양한 정보수집 가능 4. 계층: OSI 7, 전송계층: UDP 3. Manager와 A.. 2026. 10. 4. [툴] Burp suite 1. 정의 https://portswigger.net/burp/communitydownload - 웹 애플리케이션 보안 취약점을 점검하는 통합 플랫폼 - 프록시(Proxy)를 통한 HTTP/S 트래픽 가로채기 및 수정 - 자동화된 스캐너, Intruder를 통한 자동화 공격, Repeater를 이용한 요청 반복 테스트, 확장 스토어(BApp)를 통한 기능 확장 등을 지원하여 웹 모의해킹의 표준 도구로 사용됩니다. 2. 실습https://www.youtube.com/watch?v=GxvFqgCBW-8 1. Open browser 2. DVWA: Damn Vulnerable Web App를 로컬에 띄운다. 3. 화면 확인 가능 - .. 2026. 10. 4. [Network] Websocket 소켓 원리 💡 처음엔 웹소켓이라고 제목을 달았는데, 여기서 다루는 건 TCP/UDP 위에서 동작하는 일반 소켓이다. 웹소켓(WebSocket)은 http 요청으로 연결을 시작한 뒤(Upgrade 헤더) 하나의 tcp 연결 위에서 서버와 클라이언트가 양방향으로 메시지를 주고받는 별도의 프로토콜(ws://, wss://)이다. 웹소켓도 결국 내부적으로는 tcp 소켓을 사용한다. 하나의 서버가 여러 클라이언트와 통신하려면 연결들을 쪼개서 구분하는 것을 생각했다.1:1 통신 일때는 어차피 하나밖에 없어서 통으로 써도 되는데 2개이상 되면 누가 누군지 분류 and 패키징을 해줘야한다고 이해했다.→ 이 분류는 포트번호로 한다. tcp 연결 하나는 (출발지 ip, 출발지 port, 목적지 ip, 목적지 port) .. 2026. 10. 4. [Spring] spring security 💬 시큐리티 기본 작동 원리→ 사람이 많아져서 시큐리티로 통하는 문이 많아짐 (로드밸런싱) → 카드키 발급 명부는 같이써야 회원이 어느 문으로 들어가든 확인가능→ 카드키 명부를 rdbms로 사용해 매번 db조회를 하면 굉장히 비효율적이므로 이 경우에는 캐시형 db인 redis를 선호한다.참고 : https://www.youtube.com/watch?v=cv6syIv-8eo&list=PL93mKxaRDidERCyMaobSLkvSPzYtIk0Ah&index=13💬 CORS엄밀히 말하면 시큐리티와 관련된 기능은 아니다브라우저가 다른 origin에서 커뮤니케이션 하려고할때 발생하는 디폴트 보안이다.다른 originhttp or https다른 도메인다른 포트만약 다른 origin을 갖는 1,2,3인 경우에도.. 2026. 10. 4. [Kotlin] coroutine 용어 정리blockingvar data = getData() // 1println(data)// 2데이터를 반환하는 함수의 리턴값을 변수에 할당.데이터를 사용할 수 있게 되면 데이터가 출력됨.데이터를 완전히 얻을 때 까지 프로그램이 멈추게 된다 (1~2 사이) 이를 블로킹작업이라고 한다.병렬성 : 코딩을 하면서 음악을 듣기 (’손’과 ‘귀’을 동시에 사용) - 멀티코어 프로세서의 멀티스레드동시성 : 코딩을 하면서 과자를 먹기 (손을 ‘키보드’와 ‘과자’에 사용) - 코루틴1. Coroutine이란?애플리케이션을 개발하는 동안 네트워크, 데이터베이스호출 또는 복잡한 계산, api호출, 데이터 다운로드 등등..과 같이 긴 시간에 걸쳐 작업을 수행해야하는 상황이 자주 발생할때 사용한다.백그라운드에서 또는 비동.. 2026. 10. 4. [Windows] ASLR https://readmeplz.tistory.com/186 [리버싱] 실행 코드 분석간단한 코드를 디스어셈블리로 뜯어본 기록1. 개요WinExec으로 cmd 창을 띄우는 간단한 코드를 작성하고, 이걸 디스어셈블리로 들여다보면서 어셈블리 레벨에서 어떤 일이 일어나는지 확인해본 기readmeplz.tistory.com 이전 실습에서 디버거에서 확인한 함수 주소를 직접 사용해 보면서, 실행 환경에 따라 메모리 주소가 달라질 수 있다는 점도 확인할 수 있었습니다. 이와 관련된 대표적인 보안 기능이 ASLR(Address Space Layout Randomization)입니다. 이번 글에서는 ASLR과 함께, 프로그램이 실행될 때 프로세스가 만들어지고 DLL이 로드되는 과정까지 정리해 보겠습니다.ASLR(Ad.. 2026. 10. 4. [JPA] Proxy proxy뜻은 가짜 or 대리 라는 뜻이 있다.hibernate(jpa)에서는 매번 객체를 호출할때마다 연관된 모든 데이터를 조회하기보다 실제 사용할때만 불러올 수 있도록 대리객체를 만들어 db조회에 사용되는 리소스낭비를 줄인다.사용 방법 : EntityManager.getReference(); → 지연 로딩(LAZY)으로 설정된 연관 엔티티도 내부적으로 이 프록시 객체로 채워진다.처음 사용할때, db에서 데이터를 조회해서 가져오는 과정을 초기화라고 한다. 프록시 객체가 영속성 컨텍스트에 초기화를 요청하면, 영속성 컨텍스트가 db에서 데이터를 조회해 실제 엔티티를 생성하고, 프록시의 target이 그 실제 엔티티를 참조하게 된다. → 프록시가 실제 엔티티로 바뀌는 게 아니라, 프록시를 통해 실제 엔티티에.. 2026. 10. 4. [JPA] Mapping 같은 속성도 JAVA (JPA)내에서 실행되는지, DB에서 실행되는지, 어떤 db로 실행되는지 등등 에 따라 지원될 수도 있고 아닐 수도 있다.각각의 경우에 가능 여부, 장단점에 대해 알아보려고 한다 매핑할 때 고려해야할 요소는 3가지이다.1:N , N:1 , 1:1 , N:N?단방향 ? 양방향 ?→ database의 관점이 아닌 java 객체관점이다. db는 foreign key 1개만 설정해놓으면 방향 상관없이 데이터가 조회 가능하기 때문.연관관계의 주인→ 이것 또한 java객체관점이다. 양방향으로 설정했을시에 서로 참조하면 외래키 관리 하는 객체를 명시해줘야한다. ✅ 실무에서는 @ManyToMany의 조인 링크테이블을 이용해서 주로 사용해왔는데 이유는 사용자가 무언가를 신청 할 때마다 매번 쪼개지는.. 2026. 10. 4. [JPA] EntityManager 엔티티 매니저를 장바구니에 비유한 그림영속(managed) : 장바구니에 들어있는 entity들비영속(new/transient) : 장바구니에 들어간 적도 없는 entity들준영속(detached) : 들어갔다가 나온 entity들삭제(removed) : 삭제된 entity들❓ 그럼 언제 장바구니(EntityManager)에 담긴 entity들이 checkout(DB에 반영)될까?❗ 아래와 같은 경우에 영속성 컨텍스트의 변경 내용이 DB에 SQL로 반영된다. 하지만 DB에 SQL이 반영되었다고 해서 EntityManager가 리셋되는 것은 아니다.(계산대에 물건을 전달했다고 해서 장바구니가 없어지는 것은 아니다.)flush()transaction.commit()JPQL 쿼리 실행 시 필요한 경우 자동 f.. 2026. 10. 4. [JPA] hibernate 0. HibernateJava 객체를 SQL을 직접 작성하지 않고 데이터베이스에 저장하고 조회할 수 있도록 해주는 기술, ORM(Object-Relational Mapping) 프레임워크Spring에서는 보통 JPA의 구현체로 Hibernate를 많이 사용한다. JPA는 Java Persistence API의 약자로, Java 객체를 관계형 데이터베이스에 저장하고 관리하기 위한 표준(규칙)입니다.JPA 자체가 구현체가 아니라는 것. a. pom.xml mysql mysql-connector-java org.hibernate hibernate-entitymanager 5.3.7.Final b. persistence.xml위치 : resources/META-INF/persisten.. 2026. 10. 4. [용어] WAF 1. 웹 애플리케이션 보안에 특화되어 개발된 솔루션 2. SQL Injection, Cross-Site Scripting(XSS)등과 같은 웹 공격을 탐지하고 차단 3. 종류 1. 화이트리스트 방식: 신뢰할 수 있는 트래픽, 블랙리스트: 차단하는 트래픽 4. 세대 1. 1세대: 화이트리스트 + 블랙리스트 2. 2세대: 모니터링, 분석 후 화이트리스트를 자동 생성. 3. 3세대: 공격 유형별로 화이트리스트, 블랙리스트 탐지 및 컨텐츠 분석하여 공격을 탐지 5. 형태 1. 하드웨어형: LAN 2. 소프트웨어형: vm 3. 클라우드형 6. 지능형 웹 방화벽 (WAPPLES) 1. 웹방화벽, 방화벽.. 2026. 10. 4. [관제] PROFIND WebDAVWeb based Distributed Authoring and Versioning웹기반 분산형 저작 및 버전관리웹을 통하여 웹서버에 파일을 관리(목록 조회, 수정, 삭제, 이동 등)을 할 수 있는 확장된 http 프로토콜공유자원 불가(락킹 사용가능) - 동시성 제어웹을 읽기 전용 매체가 아닌 쓰기 가능한 공동매체롤 볼 수 있다.기능MS Office나 Librere Office등 문서에 대한 동시 편집 기능에 구현아파치 웹서버, nginx, synology nas등에파일 관리기술에 구현 존재 WebDAV에서 확장된 메서드PROFIND: 리소스르 위한 속성을 검색, 웹의 파일 목록과 속성을 검색한다.PROPATCH: 하나의리소스에 대한 속성을 변경Nginx의 ngx_http_dav_moduleN.. 2026. 10. 4. [리버싱] 실행 코드 분석 간단한 코드를 디스어셈블리로 뜯어본 기록1. 개요WinExec으로 cmd 창을 띄우는 간단한 코드를 작성하고, 이걸 디스어셈블리로 들여다보면서 어셈블리 레벨에서 어떤 일이 일어나는지 확인해본 기록이다.2. 소스 코드 작성 및 컴파일가장 먼저 테스트할 기본 C 소스 코드#include "windows.h"int main(){ char cmd[4] = { 'c', 'm', 'd', '\x0' }; WinExec(cmd, SW_SHOW); ExitProcess(1);}코드를 빌드하고 디버깅(F5)을 시작하면 정상적으로 cmd 창이 띄워지는 것을 볼 수 있다.3. 디스어셈블리 분석브레이크 포인트 잡고 WinExec코드에서 디스어셈블리로 이동main함수 코드 전체#include "windows.h.. 2026. 10. 3. [툴] MacBook(m1) 초기세팅 개인용 맥북에어 샀다 🍎회사에서 쓰는 맥북(m1) 처음 세팅했던 기억을 더듬어서 초기세팅 가이드 작성하려 함. homebrew더보기https://brew.sh/index_ko 접속 후 위 코드 복붙다운로드 완료되면 Next step 후의 내용 echo~부터 복붙 해서 실행한다.그다음 brew help 명령어 입력하고대충 이렇게 뜨면 다 설치된 것 iterm2https://iterm2.com/ iTerm2 - macOS Terminal ReplacementiTerm2 by George Nachman. Website by Matthew Freeman, George Nachman, and James A. Rosen. Website updated and optimized by HexBrainiterm2.com.. 2021. 8. 9. [Springboot] htmlConverter사용해서 pdf파일 만들기(+한글폰트설정) 1. 먼저 프론트단에서 head, body 등 코드를 string 형태로 가져온다.const head = document.head.innerHTML;const body = document.body.innerHTML; $('#pdfBtn').click(function(){ $.ajax({ type: "POST", dataType: 'application/json', url: "주소~~", data: { "head": head, "body": body, }, success: function (data) { .. 2021. 7. 29. [etc] Error Domain=NSPOSIXErrorDomain Code=86 맥북 M1 업데이트 후 인텔리제이에서 갑자기 자바 구동이 안되면서 이런 오류가 뜰때Rosetta 2 설치해주면 된다.(비밀번호 입력 필요)softwareupdate --install-rosetta 2021. 6. 21. [SQL] QueryDSL http://www.querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/ Querydsl - 레퍼런스 문서본 절에서는 SQL 모듈의 쿼라 타입 생성과 쿼리 기능을 설명한다. com.querydsl.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어, H2www.querydsl.com dependenciesquerydsl-aptquerydsl-jpaslf4j-log4j12 apt plugin ... com.mysema.maven apt-maven-plugin 1.1.3 .. 2021. 6. 16. 이전 1 2 3 4 5 다음