Basic Python
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
Python Basics
μ μ©ν μ 보
list(xrange()) == range() β> Python3μμ rangeλ Python2μ xrangeμ
λλ€ (리μ€νΈκ° μλλΌ μ λλ μ΄ν°μ
λλ€)
ννκ³Ό 리μ€νΈμ μ°¨μ΄λ ννμμ κ°μ μμΉκ° μλ―Έλ₯Ό λΆμ¬νμ§λ§ 리μ€νΈλ λ¨μν μ λ ¬λ κ°μ΄λΌλ κ²μ
λλ€. ννμ ꡬ쑰λ₯Ό κ°μ§μ§λ§ 리μ€νΈλ μμλ₯Ό κ°μ§λλ€.
μ£Όμ μ°μ°
μ«μλ₯Ό μ κ³±νλ €λ©΄: 3**2λ₯Ό μ¬μ©ν©λλ€ (3^2μ΄ μλ)
2/3μ νλ©΄ 1μ΄ λ°νλ©λλ€. μλνλ©΄ λ κ°μ μ μ(int)λ₯Ό λλκ³ μκΈ° λλ¬Έμ
λλ€. μμμ μ΄ νμνλ©΄ λΆλ μμμ (float)μ λλμ΄μΌ ν©λλ€ (2.0/3.0).
i >= j
i <= j
i == j
i != j
a and b
a or b
not 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) = μ¬μ© κ°λ₯ν λͺ¨λ λ©μλμ λͺ©λ‘
help(str) = str ν΄λμ€μ μ μ
βaβ.upper() = βAβ
βAβ.lower() = βaβ
βabcβ.capitalize() = βAbcβ
sum([1,2,3]) = 6
sorted([1,43,5,3,21,4])
λ¬Έμ κ²°ν©
3 * βaβ = βaaaβ
βaβ + βbβ = βabβ
βaβ + str(3) = βa3β
[1,2,3]+[4,5]=[1,2,3,4,5]
리μ€νΈμ λΆλΆ
βabcβ[0] = βaβ
βabcβ[-1] = βcβ
βabcβ[1:3] = βbcβ (μΈλ±μ€ [1]λΆν° [2]κΉμ§)
βqwertyuiopβ[:-1] = βqwertyuioβ
μ£Όμ
# ν μ€ μ£Όμ
βββ
μ¬λ¬ μ€ μ£Όμ
λ λ€λ₯Έ μ£Όμ
βββ
루ν
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"
νν
t1 = (1,β2,βthreeβ)
t2 = (5,6)
t3 = t1 + t2 = (1, β2β, βthreeβ, 5, 6)
(4,) = μ±κΈν€
d = () λΉ νν
d += (4,) β> ννμ μΆκ°
CANT! β> t1[1] == βNew valueβ
list(t2) = [5,6] β> ννμμ 리μ€νΈλ‘
리μ€νΈ (λ°°μ΄)
d = [] λΉ
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) β> 리μ€νΈμμ ννλ‘
λμ λ리
d = {} λΉ
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() #λ
립 볡μ¬
monthNumbers.get(βkeyβ,0) #ν€ μ‘΄μ¬ μ¬λΆ νμΈ, monthNumbers[βkeyβ]μ κ° λ°ν λλ μ‘΄μ¬νμ§ μμΌλ©΄ 0 λ°ν
μ§ν©
μ§ν©μλ μ€λ³΅μ΄ μμ
myset = set([βaβ, βbβ]) = {βaβ, βbβ}
myset.add(βcβ) = {βaβ, βbβ, βcβ}
myset.add(βaβ) = {βaβ, βbβ, βcβ} #μ€λ³΅ μμ
myset.update([1,2,3]) = set([βaβ, 1, 2, βbβ, βcβ, 3])
myset.discard(10) #μ‘΄μ¬νλ©΄ μ κ±°, μμΌλ©΄ μ무κ²λ νμ§ μμ
myset.remove(10) #μ‘΄μ¬νλ©΄ μ κ±°, μμΌλ©΄ μμΈ λ°μ
myset2 = set([1, 2, 3, 4])
myset.union(myset2) #myset λλ myset2μ κ°
myset.intersection(myset2) #myset λ° myset2μ κ°
myset.difference(myset2) #mysetμ κ°μ΄μ§λ§ myset2μλ μμ
myset.symmetric_difference(myset2) #myset λ° myset2μ μλ κ° (λ λ€ μλ)
myset.pop() #μ§ν©μ 첫 λ²μ§Έ μμλ₯Ό κ°μ Έμμ μ κ±°
myset.intersection_update(myset2) #myset = mysetκ³Ό myset2 λͺ¨λμ μλ μμ
myset.difference_update(myset2) #myset = mysetμ μμμ§λ§ myset2μλ μμ
myset.symmetric_difference_update(myset2) #myset = λ λ€ μλ μμ
ν΄λμ€
__It__μ λ©μλλ μ΄ ν΄λμ€μ κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ³΄λ€ ν°μ§ λΉκ΅νλ λ° μ¬μ©λλ λ©μλμ λλ€.
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
map, zip, filter, lambda, sorted and one-liners
Mapλ λ€μκ³Ό κ°μ΅λλ€: [f(x) for 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λ foo λλ bar μ€ μ§§μ κ²μ΄ λ©μΆ λ λ©μΆ₯λλ€:
for f, b in zip(foo, bar):
print(f, b)
Lambdaλ ν¨μλ₯Ό μ μνλ λ° μ¬μ©λ©λλ€.
(lambda x,y: x+y)(5,3) = 8 β> lambdaλ₯Ό κ°λ¨ν functionμΌλ‘ μ¬μ©
sorted(range(-5,6), key=lambda x: x** 2) = [0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5] β> lambdaλ₯Ό μ¬μ©νμ¬ λ¦¬μ€νΈλ₯Ό μ λ ¬
m = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) = [3, 6, 9] β> lambdaλ₯Ό μ¬μ©νμ¬ νν°λ§
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 ]
μμΈ
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()
μ‘°κ±΄μ΄ κ±°μ§μ΄λ©΄ λ¬Έμμ΄μ΄ νλ©΄μ μΆλ ₯λ©λλ€.
def avg(grades, weights):
assert not len(grades) == 0, 'no grades data'
assert len(grades) == 'wrong number grades'
Generators, yield
μ λλ μ΄ν°λ 무μΈκ°λ₯Ό λ°ννλ λμ βμμ±βν©λλ€. μ κ·Όν λ, 첫 λ²μ§Έλ‘ μμ±λ κ°μ βλ°νβνκ³ , λ€μ μ κ·Όνλ©΄ λ€μμΌλ‘ μμ±λ κ°μ λ°νν©λλ€. λ°λΌμ λͺ¨λ κ°μ΄ λμμ μμ±λμ§ μμΌλ©°, λͺ¨λ κ°μ ν¬ν¨νλ 리μ€νΈ λμ μ΄λ₯Ό μ¬μ©νλ©΄ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ μ½ν μ μμ΅λλ€.
def myGen(n):
yield n
yield n + 1
g = myGen(6) β> 6
next(g) β> 7
next(g) β> μ€λ₯
μ κ· ννμ
import re
re.search(β\wβ,βholaβ).group() = βhβ
re.findall(β\wβ,βholaβ) = [βhβ, βoβ, βlβ, βaβ]
re.findall(β\w+(la)β,βhola caracolaβ) = [βlaβ, βlaβ]
νΉλ³ν μλ―Έ:
. β> λͺ¨λ κ²
\w β> [a-zA-Z0-9_]
\d β> μ«μ
\s β> 곡백 λ¬Έμ[ \n\r\t\f]
\S β> λΉκ³΅λ°± λ¬Έμ
^ β> μμ
$ β> λ
+ β> νλ μ΄μ
* β> 0κ° μ΄μ
? β> 0κ° λλ 1κ° λ°μ
μ΅μ
:
re.search(pat,str,re.IGNORECASE)
IGNORECASE
DOTALL β> μ μ΄ μ€ λ°κΏκ³Ό μΌμΉνλλ‘ νμ©
MULTILINE β> ^μ $κ° λ€λ₯Έ μ€μμ μΌμΉνλλ‘ νμ©
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
product
from itertools import product β> 1κ° μ΄μμ 리μ€νΈ κ°μ μ‘°ν©μ μμ±νλ©°, κ°μ΄ λ°λ³΅λ μ μκ³ , μΉ΄λ₯΄ν
μμ κ³±(λΆλ°° λ²μΉ)
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)]
permutations
from itertools import permutations β> λͺ¨λ μμΉμμ λͺ¨λ λ¬Έμμ μ‘°ν©μ μμ±
print list(permutations([β1β,β2β,β3β])) = [(β1β, β2β, β3β), (β1β, β3β, β2β), (β2β, β1β, β3β),β¦ λͺ¨λ κ°λ₯ν μ‘°ν©
print(list(permutations(β123β,2))) = [(β1β, β2β), (β1β, β3β), (β2β, β1β), (β2β, β3β), (β3β, β1β), (β3β, β2β)] κΈΈμ΄ 2μ λͺ¨λ κ°λ₯ν μ‘°ν©
combinations
from itertools import combinations β> λ¬Έμκ° λ°λ³΅λμ§ μλ λͺ¨λ κ°λ₯ν μ‘°ν©μ μμ±(βabβκ° μ‘΄μ¬νλ©΄ βbaβλ μμ±νμ§ μμ)
print(list(combinations(β123β,2))) β> [(β1β, β2β), (β1β, β3β), (β2β, β3β)]
combinations_with_replacement
from itertools import combinations_with_replacement β> λ¬ΈμλΆν° μμνμ¬ λͺ¨λ κ°λ₯ν μ‘°ν©μ μμ±(μ: 3λ²μ§Έλ 3λ²μ§ΈλΆν° νΌν©λμ§λ§ 2λ²μ§Έλ 첫 λ²μ§Έμλ νΌν©λμ§ μμ)
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β)]
λ°μ½λ μ΄ν°
ν¨μκ° μ€νλλ λ° νμν μκ°μ μΈ‘μ νλ λ°μ½λ μ΄ν° (μ¬κΈ°μ):
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!")
μ€ννλ©΄ λ€μκ³Ό κ°μ λ΄μ©μ λ³Ό μ μμ΅λλ€:
Let's call our decorated function
Decorated func!
Execution time: 4.792213439941406e-05 seconds
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


