상세 컨텐츠

본문 제목

[보안 공부] 8주 차 - SQLi Point, SQLi 정리

컴퓨터/보안 수업(Segfault)

by 디멘터 2024. 6. 12. 12:46

본문

※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)


※ 공부 기록용 포스트이며, 검수를 하고 올리지만 간혹 잘 못된 정보가 있을 수도 있습니다.

[보안 공부] 8주 차 - SQLi Point


SQLi Point, SQLi 정리

1. SQLi Point 찾기


사용자 입력이 가능한 곳은 당연하고, SQL이 실행되는 모든 곳이 가능할 수 있다.
즉, 사용자가 직접 입력하지 않은 파라미터, 쿠키 값까지도 SQLi 대상이 될 수 있다.

게시판 검색 기능, 게시판의 페이지 넘버조차도 SLQi 대상이 될 수 있다. 값에 and true, and false, or true, 따옴표, 주석 등을 조합하여 넣어보고 반응을 보면 된다.

case when (일종의 if문)을 이용하여 SQLi point인지 확인해 볼 수도 있다.

 

강력한 SQLi 방어기법인 Prepared Statement도 잠재적 위험성이 존재한다.

  • 동적 쿼리 생성을 피할 수 없는 경우: 컬럼 이름, 테이블 이름, ORDER BY 절 등을 동적으로 지정해야 하는 경우
  • SQL 구문 오류 및 예외 처리 : 오류나 예외에 있어서는 민감한 정보가 노출될 가능성 존재
  • 비인증 데이터 소스 사용: 사용할 외부 데이터 소스가 검증되지 않으면 문제 발생 가능성 존재

다음은 SQLi point가 될 수 있는 예시이다.

  • 로그인 폼, 회원가입 폼, 비밀번호 변경 폼,
  • 게시글 작성 폼, 댓글 입력 폼, 파일 업로드 기능, 문의사항 입력 폼, 메시지 전송 폼,
  • 검색 기능, 필터링 기능, 정렬 기능,
  • URL 파라미터, HTTP 헤더, 쿠키, API 호출,
  • 전자상거래 트랜젝션, 채팅 애플리케이션, 자동완성 기능 등

아직까지 공부한 것으로는 예상하기 힘든 곳에도 SQLi 공격이 가능하다.

  • 자동완성에서 어떻게 공격이 가능할까 알아보면,
    자동완성 기능을 위해 사용자 입력이 DB에 저장되기 때문에 가능하다.
  • 정렬기능에서는 어떻게 가능할까 생각해 보면,
    prepared statement 사용이 어려운 테이블 이름, 컬럼 이름, order by절은 잠재적인 위험성이 있다.
    상품리스트 중에 'price' 기준으로 정렬한다고 버튼을 누를 때,
    개발자 도구로 'price' 값 대신 'price; DROP TABLE products; --;'를 넣고 서버에 전달하면 어떻게 될까 생각해 볼 수 있다.

2. SQLi 정리

 

SQLi 공격 및 방어, NoSQL 공격 및 방어 [ [보안 공부] 6주 차 - SQL Injection 생각해 보기 ]

  • 인젝션에 이용되는 다양한 구문
    → SELECT
    → INSERT (ex. 회원가입, 글쓰기)
    → UPDATE (ex. 비밀번호 수정)
    → DELETE
  • 잘못된 방어기법
    → 따옴표 필터링
    → 저장 프로시저 사용
  • Prepared Statement (매개변수화 된 쿼리) 사용 및 한계
  • 더욱 철저한 방어
    최소한의 권한
  • NoSQL MongoDB 인젝션 공격 및 방어

 

SQLi 공격 기법 [ [보안 공부] 7주 차 - Error Based, Blind SQL Injection ]

  • Error Based SQLi
    Group by 에러 유도
    EXTRACTVALUE와 UPDATEXML 함수 사용
  • Blind SQLi 
    Boolean (참 거짓 이용)
    Time (시간 기반)

CTF - Login Bypass3 [ Segfault CTF - (5주 차) Login Bypass 3 ]

  • UNION SQLi 공격
    → DB 이름
    → Table 이름
    → Column 이름
    → 값

CTF - SQL Injection 6 [ Segfault CTF - (7주 차) SQL Injection 6 ]

  • Error Based SQLi
  • 함수
    → EXTRACTVALUE
    → CONCAT
    → SUBSTR
    → ASCII

CTF - SQL Injection 6 [ Segfault CTF - (8주 차) SQL Injection Point 1 ]

  • SQLi Point 찾기
    → 쿠키, 검색 기능 파라미터, URL파라미터

관련글 더보기