‘쿼리’ 태그가 포함된 글 모두 보기

Mass SQL 인젝션으로 삽입된 악성코드 일괄 삭제 하기!

2008년 10월 20일 월요일, 오후 5시 17분

이전 포스트에서 언급했다시피 최근 쿠키 취약점을 토대로 들어오는 Mass SQL 인젝션의 경우, 기존 DB 내용을 변조하지 않고, 악성코드가 덧붙여 삽입되는 형식이기 때문에 악성코드 일괄 삭제 쿼리로 손쉽게 정상 상태로 복원이 가능하다. 하지만 SQL 인젝션 특성 상 언제 또 코드가 바뀔지 모르는 일이기 때문에 현재에 안주해서는 안 된다. 반드시 웹 취약점을 보완해야 한다는 것을 명심하시길…

SQL 인젝션으로 인해 DB 내용이 변조되었을 때 SQL 인젝션 코드를 역으로 이용하여 악성코드만 삭제하는 쿼리다. 참고로 DB 내용의 일부분이 손상 및 변조되고, 악성코드가 그 자리에 치환되는 수법이라면 정상 상태로 복원되지 않는다.

당시 이 쿼리를 만들기 위해 여러 웹사이트들을 참조했었는데 죄송스럽게도 지금은 정확하게 기억이 나지 않아서… (만일, 본인이 만들었던 스크립트라면 댓글 부탁 드립니다. 출처 명시해 드리겠습니다.)

이하 주의 사항 입니다.

이 스크립트의 단점이라 하면 로그인 아이디가 해당 DB에 DBO 권한을 가지고 있어야 하며 테이블의 소유자가 DBO로 설정되어 있어야 합니다. 물론 그 부분를 보안하기 위해 추가 처리가 되어있긴 합니다만, 필히 참고해 주셔야 하는 부분이므로 미리 공지합니다. 또한 SA 계정이나 윈도우즈 로그인 등을 통해 DB 서버의 최상위 권한으로 쿼리를 실행시켜 주어야 합니다. 그 외 중요한 부분들은 주석으로 설명이 되어 있으니 필히 주석을 참고해 주십시오. 궁금하신 사항들은 댓글로 부탁 드립니다.

이미 로그인 아이디가 DBO 권한을 가지고 있고, 테이블의 소유자가 DBO로 설정되어 있는 경우와 그렇지 않을 경우로 나누어 SQL 파일을 공개합니다. 다운로드에 유념해 주시기 바라며 실제 스크립트를 돌리시기 전에는 미리 원본 DB를 반드시 백업 받아 두세요.

 [다운로드1] 로그인 아이디가 해당 DB의 DBO 권한을 가지고 있고, 테이블의 소유자가 DBO로 설정되어 있는 경우.

 [다운로드2] 로그인 아이디가 해당 DB의 DBO 권한을 가지고 있지 않고, 테이블의 소유자 역시 해당 로그인 아이디로 설정되어 있는 경우.

 

이상입니다. 그럼~

태그: , , , ,


About Windows Security 카테고리 | 7개의 댓글이 등록되어 있습니다. »





MSSQL 테이블 별 사용 용량 조회

2008년 08월 06일 수요일, 오후 4시 02분

엔터프라이즈관리자(EM) - 작업창 – 테이블 정보에서도 확인할 수 있는 내용이긴 하나 쿼리분석기에서 아래 쿼리를 실행시키면 테이블 별 사용 용량을 좀 더 일목요연하게 확인할 수 있다.

use 디비명

go

select table_name = convert(varchar(30), min(o.name)), table_size = ltrim(str(sum(reserved) * 8192 / 1024.,15,0) + 'KB') from sysindexes i inner join sysobjects o on (o.id = i.id) where i.indid in (0, 1, 255) and o.xtype = 'U' group by i.id

참고로 MSSQL 2000에서 뿐만 아니라 MSSQL 2005에서도 활용 가능한 쿼리다. 단순히 SELECT 구문만 날리는 것이기 때문에 DB 자체에 문제가 생길 일은 없으니 안심하시길…

뭐, 테이블 수가 좀 많다면 약간의 부하는 있을 수 있겠지만…

SQL 파일로 다운로드 받기

태그: , ,


About MSSQL 카테고리 | 현재 등록된 댓글이 없습니다. »





특정 DB의 오브젝트 소유자 일괄 변경 쿼리

2008년 07월 28일 월요일, 오후 5시 47분

1. 들어가기 앞서…


특정 DB의 오브젝트 소유자를 일괄로 변경해 주는 쿼리입니다. 특히 DB 서버 이전 시 가장 유용하게 사용되지 않을까 싶습니다. 구간마다 주석을 달아 두었으니 실행하시기 전에 한 번 쭈욱~ 훑어보시고 수정이 필요한 부분이나 굳이 실행할 필요가 없는 부분은 미리 수정 및 삭제하시기 바랍니다

 

2. 특정 DB의 오브젝트 소유자 일괄 변경 쿼리


/* 수정하셔야 될 부분 시작 */

declare @old_user varchar (50)
declare @new_user varchar (50)

set @old_user = '기존사용자명'
set @new_user = '변경할사용자명'
use
DB명

/* 수정하셔야 될 부분 끝 */


/* 작업에 필요한 변수 선언 시작 */

declare @object_name varchar (50)
declare @object_owner varchar (50)
declare tcursor cursor

/* 작업에 필요한 변수 선언 끝 */


/* sysobjects 테이블에서 유저 테이블과 저장프로시저 가져오는 부분 시작. 만일 view 오프젝트의 소유자도 함께 변경하고 싶으시다면 바로 아래줄에 or xtype='V'를 추가해 주세요.
ex) for select name from sysobjects where xtype='U' or xtype='P' or xtype='V' and name <> 'dtproperties' */

for select name from sysobjects where xtype='U' or xtype='P' and name <> 'dtproperties'
open tcursor fetch next from tcursor into @object_name

while @@fetch_status = 0
begin
exec ('sp_changeobjectowner "' + @old_user + '.' + @object_name + "', ' + @new_user + ")
fetch next from tcursor into @object_name
end

close  tcursor
deallocate tcursor

/* sysobjects 테이블에서 유저 테이블과 저장프로시저 가져오는 부분 끝 */


/* DB소유자 SA로 변경 부분 시작 */

exec sp_changedbowner 'SA'

/* DB소유자 SA로 변경 부분 끝 */


/* 서버 내에 사용자 매핑 부분 시작 */

exec sp_change_users_login 'Auto_fix', @new_user

/* 서버 내에 사용자 매핑 부분 끝 */

SQL 파일로 다운로드 받기

태그: , ,


About MSSQL 카테고리 | 현재 등록된 댓글이 없습니다. »