개발코스 4주차 WIL

jungjaelee·2026년 1월 30일

WIL

저번에 chromaDB(벡터db)에 적재했던 데이터셋을 이용해서 이번엔 langchain, langgraph를 구현했다.
langchain은 직렬성 구조로, 즉 단발성이라서 한번 실행된다음에 끝나는게 특징이고, 이를 graph형태로 변환시킨게 langgraph이다.

langgraph의 큰 특징은 state를 경유하여 진행된다는건데, 쉽게 얘기하면 RUN, STAY, BLOCK 등 실행, 대기, 멈춤 등으로 계속 state를 돌면서 진행된다고 보면 된다.

로직 : 정찰(Recon) → 검색(RAG) → 적응형 생성(Adaptive Gen) → 정밀 검증(Expert Exploit) → 루프(Loop)

그런 다음에 프롬프트 엔지니어링을 이요해서 보고서를 작성한다.

# [Node 5] 보고서 생성
def report_node(state: AgentState):
    print("\n[*] 단계 5: 보고서 작성 중...")
    
    # 간단한 보고서 직접 생성 (LLM 오류 방지)
    report = f"""
**테스트 결과 보고서**

**1. 테스트 개요**
* 대상: {state['target_url']}
* IP: {state['target_ip']}
* 기술: {state['detected_tech']}
* 테스트 목적: SQL Injection 취약점 발견

**2. 사용된 공격 기법**
* 공격 타입: SQL Injection (OR 1=1)
* HTTP 메소드: {state.get('http_method', 'POST')}
* 페이로드: {state['final_payload']}
* 특징: **이메일 주소를 사전에 알지 못해도 공격 가능**
  - "' OR 1=1--" 페이로드 사용
  - SQL 쿼리의 논리 조건을 항상 참(True)으로 만듦
  - 첫 번째 사용자(일반적으로 관리자)로 자동 로그인

**3. 발견된 취약점**
* {' 취약점 발견 (공격 성공)' if state['is_success'] else ' 취약점 미발견'}
* 시도 횟수: {state['attempts']}회
* 상세:
  - 입력값 검증 미흡: 사용자 입력이 SQL 쿼리에 직접 삽입됨
  - 특수문자 필터링 부재: ', --, OR 같은 SQL 제어 문자 차단 안됨
  - Prepared Statement 미사용

**4. 잠재적 영향**
*  높음 (Critical)
* 관리자 권한 탈취 가능
* 전체 사용자 데이터베이스 접근 가능
* 개인정보 유출 위험
* 데이터 조작 및 삭제 가능

**5. 권장 조치사항**
1. **즉시 조치 (Critical)**
   - Prepared Statements (매개변수화된 쿼리) 사용
   - 입력값 검증 및 이스케이프 처리
   
2. **보안 강화**
   - WAF(Web Application Firewall) 도입
   - 입력값 길이 제한
   - SQL 에러 메시지 숨김
   
3. **모니터링**
   - 비정상적인 로그인 시도 탐지
   - 데이터베이스 접근 로그 모니터링

**참고: 이 테스트는 OWASP Juice Shop (교육용 취약 애플리케이션)을 대상으로 수행되었습니다.**
"""
    
    print("\n" + "="*60)
    print("레드팀 침투 테스트 보고서")
    print("="*60)
    print(report)
    print("="*60)
    
    return {"context": state["context"] + "\n\n[FINAL REPORT]\n" + report}

이런식으로 구현했었다.

1개의 댓글

comment-user-thumbnail
2026년 1월 30일

개발 코스 4주차, 중간 데모데이 고생하셨습니다!! LangGraph를 활용해 에이전트 시스템을 구축하는 과정이 인상적이네요. 앞으로도 파이팅입니다!!

답글 달기