Меню

Mssqlclient py не работает

Прохождение лабораторной машины для пентеста «Hackthebox — Querier»

Привет, Хабр! Из этой статьи вы узнаете о способе атаки на удаленный сервер, используя особенности MsSQL, создания reverse shell для закрепления в системе и пример эксплуатации плохо сконфигурированной групповой политики в ОС Windows.

Под катом пойдет речь про свой опыт прохождения лабораторной машины Querier на портале hackthebox.

Для тех, кто не знает, что такое hackthebox — это портал, на котором вы можете проверить свои умения пентеста на практике, имеются CTF таски и собственно лабораторные машины.

Сбор информации

Начнем разведку с запуска сканирования портов с помощью nmap.

Перечислим найденные порты.

Enumerate 139/445/tcp (smb)

Воспользуемся утилитой smbclient для доступа к SMB ресурсам сервера.

Пройдясь по всем ресурсам, находим в директории Reports файл “Currency Volume Report.xlsm”.

Если открыть этот файл стандартным Microsoft Excel, то он окажется на первый взгляд совершенно пустым.

Проанализируем файл, используя утилиту binwalk, которая поможет взглянуть на встроенные файлы xlsm- документа.

Из вывода binwalk обнаружили несколько интересных файлов, содержащихся в xlsm.
Используя флаг –e, распакуем его.

Теперь воспользуемся утилитой strings для вывода печатных символов. Пробежавшись по файлам, находим интересные данные в vbaProject.bin. Похоже, что мы нашли учетные данные для mssql server’а.

Подытожим полученную информацию на текущий момент:

  • Мы знаем, что на порту 10.10.10.125:1433 крутится mssql server;
  • У нас есть учетные данные от пользователя mssql server.

Так давайте попробуем подсоединиться к серверу, используя скрипт из модуля impacket.

Получаем доступ к MsSQL.

Enumerate MsSQL

Перечислим полезную для нас информацию, используя команды из статьи.
Выполнив SQLi, получаем хеш от пароля пользователя mssql-svc.

Чтобы получить пароль в явном виде, необходимо его сбрутить, используя любой удобный для вас инструмент.

Получаем пароль от mssql-svc.

Подключаемся к SQL с новыми кредитами учетными данными.

Права этого пользователя позволяют нам выполнять xp_cmdshell

Получаем reverse shell

Пробуем получить оболочку через netcat, для этого нам необходимо загрузить его на атакуемый сервер.

Переходим в директорию на нашей машине, где находится netcat и запускаем:

В оболочке mssql для загрузки netcat (nc.exe) на удаленный сервер, выполняем команду powershell, указав путь сохранения.

Запускаем netcat на прослушивание порта 4444.

Запускаем на своей стороне netcat, указав ip и порт, атакуемого сервера и получаем оболочку.

Запускаем скрипт от PowerShellMafia для повышения привилегий.

В результате выполнения скрипта получили учетные данные администратора.

Заходим на ресурсы smb с новыми учетными данными и полномочиями.

Источник

Mssqlclient py не работает

No definitions found in this file.

  • Go to file T
  • Go to line L
  • Go to definition R
  • Copy path
  • Copy permalink
Читайте также:  Вылетает ручка межкомнатной двери как починить

5 contributors

Users who have contributed to this file

Copy raw contents

Copy raw contents

#!/usr/bin/env python
# Impacket — Collection of Python classes for working with network protocols.
#
# SECUREAUTH LABS. Copyright (C) 2021 SecureAuth Corporation. All rights reserved.
#
# This software is provided under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Description:
# [MS-TDS] & [MC-SQLR] example.
#
# Author:
# Alberto Solino (@agsolino)
#
# Reference for:
# Structure
#
from __future__ import division
from __future__ import print_function
import argparse
import sys
import os
import logging
from impacket . examples import logger
from impacket . examples . utils import parse_target
from impacket import version , tds
if __name__ == ‘__main__’ :
import cmd
class SQLSHELL ( cmd . Cmd ):
def __init__ ( self , SQL ):
cmd . Cmd . __init__ ( self )
self . sql = SQL
self . prompt = ‘SQL> ‘
self . intro = ‘[!] Press help for extra shell commands’
def do_help ( self , line ):
print ( «»»
lcd — changes the current local directory to
exit — terminates the server process (and this session)
enable_xp_cmdshell — you know what it means
disable_xp_cmdshell — you know what it means
xp_cmdshell — executes cmd using xp_cmdshell
sp_start_job — executes cmd using the sql server agent (blind)
! — executes a local shell cmd
«»» )
def do_shell ( self , s ):
os . system ( s )
def do_xp_cmdshell ( self , s ):
try :
self . sql . sql_query ( «exec master..xp_cmdshell ‘%s'» % s )
self . sql . printReplies ()
self . sql . colMeta [ 0 ][ ‘TypeData’ ] = 80 * 2
self . sql . printRows ()
except :
pass
def sp_start_job ( self , s ):
try :
self . sql . sql_query ( «DECLARE @job NVARCHAR(100);»
«SET @job=’IdxDefrag’+CONVERT(NVARCHAR(36),NEWID());»
«EXEC msdb..sp_add_job @job_name=@job,@description=’INDEXDEFRAG’,»
«@owner_login_name=’sa’,@delete_level=3;»
«EXEC msdb..sp_add_jobstep @job_name=@job,@step_id=1,@step_name=’Defragmentation’,»
«@subsystem=’CMDEXEC’,@command=’%s’,@on_success_action=1;»
«EXEC msdb..sp_add_jobserver @job_name=@job;»
«EXEC msdb..sp_start_job @job_name=@job;» % s )
self . sql . printReplies ()
self . sql . printRows ()
except :
pass
def do_lcd ( self , s ):
if s == » :
print ( os . getcwd ())
else :
os . chdir ( s )
def do_enable_xp_cmdshell ( self , line ):
try :
self . sql . sql_query ( «exec master.dbo.sp_configure ‘show advanced options’,1;RECONFIGURE;»
«exec master.dbo.sp_configure ‘xp_cmdshell’, 1;RECONFIGURE;» )
self . sql . printReplies ()
self . sql . printRows ()
except :
pass
def do_disable_xp_cmdshell ( self , line ):
try :
self . sql . sql_query ( «exec sp_configure ‘xp_cmdshell’, 0 ;RECONFIGURE;exec sp_configure «
«‘show advanced options’, 0 ;RECONFIGURE;» )
self . sql . printReplies ()
self . sql . printRows ()
except :
pass
def default ( self , line ):
try :
self . sql . sql_query ( line )
self . sql . printReplies ()
self . sql . printRows ()
except :
pass
def emptyline ( self ):
pass
def do_exit ( self , line ):
return True
# Init the example’s logger theme
logger . init ()
print ( version . BANNER )
parser = argparse . ArgumentParser ( add_help = True , description = «TDS client implementation (SSL supported).» )
parser . add_argument ( ‘target’ , action = ‘store’ , help = ‘[[domain/]username[:password]@] ‘ )
parser . add_argument ( ‘-port’ , action = ‘store’ , default = ‘1433’ , help = ‘target MSSQL port (default 1433)’ )
parser . add_argument ( ‘-db’ , action = ‘store’ , help = ‘MSSQL database instance (default None)’ )
parser . add_argument ( ‘-windows-auth’ , action = ‘store_true’ , default = False , help = ‘whether or not to use Windows ‘
‘Authentication (default False)’ )
parser . add_argument ( ‘-debug’ , action = ‘store_true’ , help = ‘Turn DEBUG output ON’ )
parser . add_argument ( ‘-file’ , type = argparse . FileType ( ‘r’ ), help = ‘input file with commands to execute in the SQL shell’ )
group = parser . add_argument_group ( ‘authentication’ )
group . add_argument ( ‘-hashes’ , action = «store» , metavar = «LMHASH:NTHASH» , help = ‘NTLM hashes, format is LMHASH:NTHASH’ )
group . add_argument ( ‘-no-pass’ , action = «store_true» , help = ‘don \’ t ask for password (useful for -k)’ )
group . add_argument ( ‘-k’ , action = «store_true» , help = ‘Use Kerberos authentication. Grabs credentials from ccache file ‘
‘(KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ‘
‘ones specified in the command line’ )
group . add_argument ( ‘-aesKey’ , action = «store» , metavar = «hex key» , help = ‘AES key to use for Kerberos Authentication ‘
‘(128 or 256 bits)’ )
group . add_argument ( ‘-dc-ip’ , action = ‘store’ , metavar = «ip address» , help = ‘IP Address of the domain controller. If ‘
‘ommited it use the domain part (FQDN) specified in the target parameter’ )
if len ( sys . argv ) == 1 :
parser . print_help ()
sys . exit ( 1 )
options = parser . parse_args ()
if options . debug is True :
logging . getLogger (). setLevel ( logging . DEBUG )
# Print the Library’s installation path
logging . debug ( version . getInstallationPath ())
else :
logging . getLogger (). setLevel ( logging . INFO )
domain , username , password , address = parse_target ( options . target )
if domain is None :
domain = »
if password == » and username != » and options . hashes is None and options . no_pass is False and options . aesKey is None :
from getpass import getpass
password = getpass ( «Password:» )
if options . aesKey is not None :
options . k = True
ms_sql = tds . MSSQL ( address , int ( options . port ))
ms_sql . connect ()
try :
if options . k is True :
res = ms_sql . kerberosLogin ( options . db , username , password , domain , options . hashes , options . aesKey ,
kdcHost = options . dc_ip )
else :
res = ms_sql . login ( options . db , username , password , domain , options . hashes , options . windows_auth )
ms_sql . printReplies ()
except Exception as e :
logging . debug ( «Exception:» , exc_info = True )
logging . error ( str ( e ))
res = False
if res is True :
shell = SQLSHELL ( ms_sql )
if options . file is None :
shell . cmdloop ()
else :
for line in options . file . readlines ():
print ( «SQL> %s» % line , end = ‘ ‘ )
shell . onecmd ( line )
ms_sql . disconnect ()

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

mssqlclient : ‘SSL routines’, ‘state_machine’, ‘internal error’ #856

Comments

MA24th commented May 14, 2020 •

I have this issue,

Impacket version == «Impacket v0.9.22.dev1+20200513.101403.9a4b3f52 — Copyright 2020 SecureAuth Corporation»

The text was updated successfully, but these errors were encountered:

francoataffarel commented May 26, 2020

` python3 mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth
Impacket v0.9.21 — Copyright 2020 SecureAuth Corporation

Password:
[*] Encryption required, switching to TLS
[-] [(‘SSL routines’, ‘state_machine’, ‘internal error’)]
`

kazkansouh commented May 29, 2020

Yep I just got this too.

I think its related to python 3.8. What is odd is both mssql-cli and mssqlclient both issued the internal error message when I tried them against a MSSQL 2014.

However, trying again after pulling a docker image with python 3.7 the impacket mssqlclient script worked fine. So probably its python 3.8 or one of the dependencies.

LeviPesin commented Jun 20, 2020

Also look into #866. I opened this issue on pyOpenSSL: pyca/pyopenssl#916

LeviPesin commented Jun 20, 2020

Hmm. I looked into the impacket/tds.py and I found this:
if resp[‘Encryption’] == TDS_ENCRYPT_REQ or resp[‘Encryption’] == TDS_ENCRYPT_OFF:
LOG.info(«Encryption required, switching to TLS»)
Is it what it is supposed to be? Maybe it should be TDS_ENCRYPT_ON instead of TDS_ENCRYPT_OFF?

Mastermjr commented Nov 18, 2020 •

on python 3.8.5 and ubuntu 20.04 I was able to fix this issue by changing the TLS context method to a newer version, the original code uses v1, and changing the following lines allows me to connect just fine:

qbit uses v1_2 in the linked issue above

ichig069 commented Mar 27, 2021

I’ve been having the same issue. I’ll include a wireshark capture if anyone want’s to check it out. If you can see what’s going on please get back to me.x-special/nautilus-clipboard

nbaAnomaly commented Jul 18, 2021 •

on python 3.8.5 and ubuntu 20.04 I was able to fix this issue by changing the TLS context method to a newer version, the original code uses v1, and changing the following lines allows me to connect just fine:

qbit uses v1_2 in the linked issue above

Источник

Adblock
detector