Basiese Python
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Python Basiese Beginsels
Nuttige inligting
list(xrange()) == range() β> In python3 is range die xrange van python2 (dit is nie βn lys nie, maar βn generator)
Die verskil tussen βn Tuple en βn Lys is dat die posisie van βn waarde in βn tuple dit betekenis gee, maar die lyste is net geordende waardes. Tuples het strukture, maar lyste het βn volgorde.
Hoofbedrywighede
Om βn getal te verhef gebruik jy: 3**2 (nie 3^2)
As jy 2/3 doen, keer dit 1 terug omdat jy twee ints (heelgetalle) deel. As jy desimale wil hΓͺ, moet jy floats deel (2.0/3.0).
i >= j
i <= j
i == j
i != j
a en b
a of b
nie a
float(a)
int(a)
str(d)
ord(βAβ) = 65
chr(65) = βAβ
hex(100) = β0x64β
hex(100)[2:] = β64β
isinstance(1, int) = True
βa bβ.split(β β) = [βaβ, βbβ]
β β.join([βaβ, βbβ]) = βa bβ
βabcdefβ.startswith(βabβ) = True
βabcdefβ.contains(βabcβ) = True
βabc\nβ.strip() = βabcβ
βapbcβ.replace(βpβ,ββ) = βabcβ
dir(str) = Lys van al die beskikbare metodes
help(str) = Definisie van die klas str
βaβ.upper() = βAβ
βAβ.lower() = βaβ
βabcβ.capitalize() = βAbcβ
sum([1,2,3]) = 6
sorted([1,43,5,3,21,4])
Voeg karakters saam
3 * βaβ = βaaaβ
βaβ + βbβ = βabβ
βaβ + str(3) = βa3β
[1,2,3]+[4,5]=[1,2,3,4,5]
Dele van βn lys
βabcβ[0] = βaβ
βabcβ[-1] = βcβ
βabcβ[1:3] = βbcβ van [1] tot [2]
βqwertyuiopβ[:-1] = βqwertyuioβ
Kommentaar
# Eenlyn kommentaar
βββ
Verskeie lyn kommentaar
Nog een
βββ
Lusse
if a:
#somethig
elif b:
#something
else:
#something
while(a):
#comething
for i in range(0,100):
#something from 0 to 99
for letter in "hola":
#something with a letter in "hola"
Tuples
t1 = (1,β2,βthreeβ)
t2 = (5,6)
t3 = t1 + t2 = (1, β2β, βthreeβ, 5, 6)
(4,) = Singleton
d = () leΓ« tuple
d += (4,) β> Voeg by βn tuple
KAN NIE! β> t1[1] == βNuwe waardeβ
list(t2) = [5,6] β> Van tuple na lys
List (array)
d = [] leΓ«
a = [1,2,3]
b = [4,5]
a + b = [1,2,3,4,5]
b.append(6) = [4,5,6]
tuple(a) = (1,2,3) β> Van lys na tuple
Dictionary
d = {} leΓ«
monthNumbers={1:βJanβ, 2: βfebβ,βfebβ:2}β> monthNumbers ->{1:βJanβ, 2: βfebβ,βfebβ:2}
monthNumbers[1] = βJanβ
monthNumbers[βfebβ] = 2
list(monthNumbers) = [1,2,βfebβ]
monthNumbers.values() = [βJanβ,βfebβ,2]
keys = [k for k in monthNumbers]
a={β9β:9}
monthNumbers.update(a) = {β9β:9, 1:βJanβ, 2: βfebβ,βfebβ:2}
mN = monthNumbers.copy() #Onafhanklike kopie
monthNumbers.get(βkeyβ,0) #Kontroleer of sleutel bestaan, Teruggee waarde van monthNumbers[βkeyβ] of 0 as dit nie bestaan nie
Set
In stelle is daar geen herhalings
myset = set([βaβ, βbβ]) = {βaβ, βbβ}
myset.add(βcβ) = {βaβ, βbβ, βcβ}
myset.add(βaβ) = {βaβ, βbβ, βcβ} #Geen herhalings
myset.update([1,2,3]) = set([βaβ, 1, 2, βbβ, βcβ, 3])
myset.discard(10) #As dit teenwoordig is, verwyder dit, as nie, niks
myset.remove(10) #As dit teenwoordig is, verwyder dit, as nie, gooi βn uitsondering
myset2 = set([1, 2, 3, 4])
myset.union(myset2) #Waardes in myset OF myset2
myset.intersection(myset2) #Waardes in myset EN myset2
myset.difference(myset2) #Waardes in myset maar nie in myset2
myset.symmetric_difference(myset2) #Waardes wat nie in myset EN myset2 is (nie in albei)
myset.pop() #Kry die eerste element van die stel en verwyder dit
myset.intersection_update(myset2) #myset = Elemente in beide myset en myset2
myset.difference_update(myset2) #myset = Elemente in myset maar nie in myset2
myset.symmetric_difference_update(myset2) #myset = Elemente wat nie in albei is nie
Classes
Die metode in __It__ sal die een wees wat deur sort gebruik word om te vergelyk of βn objek van hierdie klas groter is as βn ander
class Person(name):
def __init__(self,name):
self.name= name
self.lastName = name.split(β β)[-1]
self.birthday = None
def __It__(self, other):
if self.lastName == other.lastName:
return self.name < other.name
return self.lastName < other.lastName #Return True if the lastname is smaller
def setBirthday(self, month, day. year):
self.birthday = date tame.date(year,month,day)
def getAge(self):
return (date time.date.today() - self.birthday).days
class MITPerson(Person):
nextIdNum = 0 # Attribute of the Class
def __init__(self, name):
Person.__init__(self,name)
self.idNum = MITPerson.nextIdNum β> Accedemos al atributo de la clase
MITPerson.nextIdNum += 1 #Attribute of the class +1
def __it__(self, other):
return self.idNum < other.idNum
kaart, zip, filter, lambda, gesorteer en een-liners
Kaart is soos: [f(x) vir x in iterable] β> map(tutple,[a,b]) = [(1,2,3),(4,5)]
m = map(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) β> [False, False, True, False, False, True, False, False, True]
zip stop wanneer die korter van foo of bar stop:
for f, b in zip(foo, bar):
print(f, b)
Lambda word gebruik om βn funksie te definieer
(lambda x,y: x+y)(5,3) = 8 β> Gebruik lambda as βn eenvoudige funksie
sorted(range(-5,6), key=lambda x: x** 2) = [0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5] β> Gebruik lambda om βn lys te sorteer
m = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) = [3, 6, 9] β> Gebruik lambda om te filter
reduce (lambda x,y: x*y, [1,2,3,4]) = 24
def make_adder(n):
return lambda x: x+n
plus3 = make_adder(3)
plus3(4) = 7 # 3 + 4 = 7
class Car:
crash = lambda self: print('Boom!')
my_car = Car(); my_car.crash() = 'Boom!'
mult1 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x%3 == 0 ]
Uitsonderings
def divide(x,y):
try:
result = x/y
except ZeroDivisionError, e:
print βdivision by zero!β + str(e)
except TypeError:
divide(int(x),int(y))
else:
print βresult iβ, result
finally
print βexecuting finally clause in any caseβ
Assert()
As die voorwaarde vals is, sal die string op die skerm geprint word.
def avg(grades, weights):
assert not len(grades) == 0, 'no grades data'
assert len(grades) == 'wrong number grades'
Generators, yield
βn Generator, in plaas daarvan om iets terug te gee, βgeeβ dit iets. Wanneer jy dit benader, sal dit die eerste waarde wat gegenereer is, βteruggeeβ, dan kan jy dit weer benader en dit sal die volgende waarde wat gegenereer is, teruggee. So, al die waardes word nie terselfdertyd gegenereer nie en baie geheue kan bespaar word deur dit te gebruik in plaas van βn lys met al die waardes.
def myGen(n):
yield n
yield n + 1
g = myGen(6) β> 6
next(g) β> 7
next(g) β> Fout
Gereelde Uitdrukkings
import re
re.search(β\wβ,βholaβ).group() = βhβ
re.findall(β\wβ,βholaβ) = [βhβ, βoβ, βlβ, βaβ]
re.findall(β\w+(la)β,βhola caracolaβ) = [βlaβ, βlaβ]
Spesiale betekenisse:
. β> Alles
\w β> [a-zA-Z0-9_]
\d β> Getal
\s β> Witruimte karakter[ \n\r\t\f]
\S β> Nie-witruimte karakter
^ β> Begin met
$ β> Eindig met
+ β> Een of meer
* β> 0 of meer
? β> 0 of 1 voorkoms
Opsies:
re.search(pat,str,re.IGNORECASE)
IGNORECASE
DOTALL β> Laat kolletjie toe om nuwe lyn te pas
MULTILINE β> Laat ^ en $ toe om in verskillende lyne te pas
re.findall(β<.*>β, β<b>foo</b>and<i>so on</i>β) = [β<b>foo</b>and<i>so on</i>β]
re.findall(β<.*?>β, β<b>foo</b>and<i>so on</i>β) = [β<b>β, β</b>β, β<i>β, β</i>β]
IterTools
produk
from itertools import product β> Genereer kombinasies tussen 1 of meer lyste, moontlik herhalende waardes, kartesiese produk (distributiewe eienskap)
print list(product([1,2,3],[3,4])) = [(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]
print list(product([1,2,3],repeat = 2)) = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
permutasies
from itertools import permutations β> Genereer kombinasies van alle karakters in elke posisie
print list(permutations([β1β,β2β,β3β])) = [(β1β, β2β, β3β), (β1β, β3β, β2β), (β2β, β1β, β3β),β¦ Elke moontlike kombinasie
print(list(permutations(β123β,2))) = [(β1β, β2β), (β1β, β3β), (β2β, β1β), (β2β, β3β), (β3β, β1β), (β3β, β2β)] Elke moontlike kombinasie van lengte 2
kombinasies
from itertools import combinations β> Genereer alle moontlike kombinasies sonder om karakters te herhaal (as βabβ bestaan, genereer nie βbaβ)
print(list(combinations(β123β,2))) β> [(β1β, β2β), (β1β, β3β), (β2β, β3β)]
kombinasies_met_vervanging
from itertools import combinations_with_replacement β> Genereer alle moontlike kombinasies vanaf die karakter voort (byvoorbeeld, die 3de is gemeng vanaf die 3de voort, maar nie met die 2de of eerste)
print(list(combinations_with_replacement(β1133β,2))) = [(β1β, β1β), (β1β, β1β), (β1β, β3β), (β1β, β3β), (β1β, β1β), (β1β, β3β), (β1β, β3β), (β3β, β3β), (β3β, β3β), (β3β, β3β)]
Dekorateurs
Dekorateur wat die tyd meet wat βn funksie benodig om uitgevoer te word (van hier):
from functools import wraps
import time
def timeme(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Let's call our decorated function")
start = time.time()
result = func(*args, **kwargs)
print('Execution time: {} seconds'.format(time.time() - start))
return result
return wrapper
@timeme
def decorated_func():
print("Decorated func!")
As jy dit uitvoer, sal jy iets soos die volgende sien:
Let's call our decorated function
Decorated func!
Execution time: 4.792213439941406e-05 seconds
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


