thebasshound.github.io

tips de ciberseguridad ofensiva en español

View on GitHub

Python básico

Ejemplo

kali@kali:~$cat pythonsample.py
#!/usr/bin/python
print("Scripting is fun!")

Existen diferencias importantes entre versiones de Python

Python es muy permisivo para el tratamiento de tipos de datos

Ejemplo útil para de manejo de cadenas

kali@kali:~$cat tagslice3.py
#!/usr/bin/python

tag = '<a href="https://www.offensive-security.com/blog">Blog</a>'
start = "http"
end = "\">"
url = tag[tag.index(start):tag.index(end)]

print(url)

kali@kali:~$python tagslice3.py
https://www.offensive-security.com/blog

Booleano, entero, flotante y cadena son los tipos de dato que se manejan, en caso de requerir hacer una conversión entre tipos de datos usaremos el siguiente ejemplo:

kali@kali:~$cat castTest.py
#!/usr/bin/python

numA = "86"
numB = "20"

print(type(numA))
print(type(numB))

newValue = int(numA) + int(numB)
print(newValue)
print(type(newValue))
print(type(str(newValue)))

kali@kali:~$python castTest.py
<class 'str'>
<class 'str'>
106<class 'int'><class 'str'>

Listas y diccionarios

ejemplo lista

kali@kali:~$cat listTest3.py
#!/usr/bin/python

fruitList = ["apple", "banana", "orange"]
fruitList.append("mango")

print(fruitList)

kali@kali:~$python listTest3.py
["apple", "banana", "orange","mango"]

kali@kali:~$ cat listTest5.py
#!/usr/bin/python

fruitList = ["apple", "banana", "orange"]
print(len(fruitList))

kali@kali:~$ python listTest5.py
3

ejemplo de diccionario

kali@kali:~$cat dictTest.py
#!/usr/bin/python

theOne = {
        "firstName":"Thomas",
        "lastName":"Anderson",
        "occupation":"Programmer"
        }

theOne["company"] = "MetaCortex"

print(theOne)theOne["occupation"] = "Superhero"

print(theOne)

kali@kali:~$./dictTest.py
{'firstName': 'Thomas', 'lastName': 'Anderson','occupation': 'Programmer', 'company': 'MetaCortex'}
{'firstName': 'Thomas', 'lastName': 'Anderson','occupation': 'Superhero', 'company': 'MetaCortex'}

Ciclos, condiciones y entradas de usuario

ejemplo for

kali@kali:~$cat forLoop.py
#!/usr/bin/python

for i in range(10):
    print(i)

kali@kali:~$./forLoop.py
0
1
2
3
4
5
6
7
8
9

ejemplo while

i = 0
while i < 10:
    print(i)
    i += 1

ejemplo recorrido diccionario

for key in guts.keys():
    print(key + ": " + guts[key])

ejemplo de if, else y elif

if numApples > 100:
    print("That's a lot of apples!")
elif numApples > 50:
    print("That's a very good amount of apples")
elif numApples > 30:
    print("That's a moderate amount of apples")
else:
    print("Running low on apples!")

ejemplo entrada de datos

name = input("Please enter your name: ")
age =int(input("Please enter your age: "))

Funciones y archivos

ejemplo lectura de archivos

f = open("data.txt", "r")

for line in f:
    print(line)

ejemplo escritura

myData = "I'm sample data to be written to a file"

f = open("data.txt", "a")

f.write(myData)

ejemplo de función

#!/usr/bin/python

def hello():
    print("Hi there!")

hello()

ejemplo función con argumentos

#!/usr/bin/python

def addNums(numA, numB):
    answer = numA + numB
    return answer

x = addNums(5, 7)

print(x)

ejemplo(best practice) de función para abrir y trabajar con el contenido de un archivo

#!/usr/bin/python

def storeFile(file):
    f = open(file, 'r')
    contents = f.read()
    f.close()
    return contents

# Variable to store the filename
fileVar = "notes.txt"

contents = storeFile(fileVar)
print(contents)

Ejemplo del uso de import con el módulo requests

#!/usr/bin/python

import requests

r = requests.get('https://www.offensive-security.com/offsec/game-hacking-intro/')
print(r.status_code)
print(r.text)

Sockets

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(("192.168.50.101", 9999))

print(s.recv(1024))
s.close()

el móudlo socket permite la comunicación entre dos equipos, el parametro AF_INET indica que se usara una ip de v4 y SOCK_STREAM indica que sera una conexión TCP mediante un puerto. 1024 será el tamaño del búffer, idealmente es la cantidad recomendada.

WebSpider.py

#!/usr/bin/python3
import requests

URL = "http://192.168.50.101/"
urlList = []
isFollowed = {}

def checkUrlList(URL):
   if URL in urlList:
       return True
   else:
       return False

def isFollowedCheck(URL):
   for entry in isFollowed.keys():
       if URL != entry:
           return False
       else:
           if isFollowed[URL] == "yes":
               return True
           else:
               return False

urlList.append(URL)

for URL in urlList:
   if isFollowedCheck(URL) != True:
       page = requests.get(URL)
       isFollowed[URL] = "yes"

       start = "http"
       for line in page.text.split("\n"):
           if "http" in line:
               if "192.168.50.101" in line:
                   if "\">" in line:
                       end = "\">"
                   else:
                       end = "\" "
                   sliced = line[line.index(start):line.index(end)]
                   if "\"" in sliced:
                       end = "\""
                       parsedURL = sliced[sliced.index(start):sliced.index(end)]
                   else:
                       parsedURL = sliced
                   if checkUrlList(parsedURL) == False:
                       urlList.append(parsedURL)
                       isFollowed[parsedURL] = "no"

for URL in urlList:
   print(URL)