ๅฃ“ๅ€’
Ye0L
ๅฃ“ๅ€’
Total
Home
Today
  • ByO (59)
    • ์•…์„ฑ์ฝ”๋“œ๋ถ„์„๐Ÿณ (10)
      • Android (2)
      • Windows (8)
    • ๋ฐฑ์ค€โŒจ (1)
    • ๊ฐœ๋ฐœ๐Ÿ’ป (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๋ฐฉ๋ช…๋ก
  • ๊นƒํ—ˆ๋ธŒ๐Ÿ˜€
  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • selenium
  • ์•…์„ฑ์ฝ”๋“œ๋ถ„์„
  • Crawling
  • CSRF
  • forensic
  • ๋ฆฌ๋ฒ„์‹ฑ
  • APK ๊ตฌ์กฐ
  • File Download Vulnerability
  • reversing
  • dreamhack
  • [DigitalForensic]with CTF
  • Background: Cookie & Session
  • PYTHON
  • Raccoon Stealer
  • web hacking
  • ClientSide: XSS
  • Background:Web Browser
  • ๋“œ๋ฆผํ•ต
  • ํฌ๋กค๋ง
  • Raccoon Stealer v2

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
ๅฃ“ๅ€’

Ye0L

๊ฐœ๋ฐœ๐Ÿ’ป/Python

[Python] self๋Š” ๋ฌด์—‡์ผ๊นŒโ“

2023. 1. 29. 20:29

๊ฐœ์š”


Dreamhack ์›น ํ•ดํ‚น ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋˜ ์ค‘ Blind SQL Injection ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ด๋•Œ๊นŒ์ง€ ํ•˜๋˜ ์ฝ”๋”ฉ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ๋А๊ปด ์ฝ”๋“œ ๋ถ„์„์„ ์„ธ๋ถ€์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๊ณ  Python์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Class ์™€ self์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•˜์˜€๋‹ค.

Python self


Dreamhack ๊ฐ•์˜ ์ค‘ ์ œ๊ณต๋œ ์ฝ”๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  self ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, github์— ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ๋“ค๋งŒ ๋ณด๋”๋ผ๊ณ  self๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

import requests
import sys
from urllib.parse import urljoin
class Solver:
    """Solver for simple_SQLi challenge"""
    # initialization
    def __init__(self, port: str) -> None:
        self._chall_url = f"๋Œ€์ƒ ์‚ฌ์ดํŠธ:{port}"
        self._login_url = urljoin(self._chall_url, "login")
    # base HTTP methods

self ๊ฐ€ ๋Œ€์ฒด ๋ญ˜๊นŒ?

์šฐ์„  self๋Š” ๋‹จ์–ด์˜ ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๊ทธ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ’ก
์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋งŒ์•ฝ ํด๋ž˜์Šค๊ฐ€ ๋ถ•์–ด๋นต ํ‹€์ด๋ผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ถ•์–ด๋นต์— ํ•ด๋‹นํ•œ๋‹ค. ๋˜ํ•œ, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค ๋’ค์— ()๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜์ธ ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐ˜๋“œ์‹œ self ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŽ์ด ์•Œ๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ํ•ด๋‹น ๋ง์€ ํ‹€๋ฆฐ ๋ง๋„ ์•„๋‹ˆ๋ฉฐ ๋ฌด์กฐ๊ฑด ์ ์œผ๋กœ ๋งž๋Š” ๋ง๋„ ์•„๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

Test๋ผ๊ณ  ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜๊ณ  test1, test2 ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํด๋ž˜์Šค Test ์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค test_instance๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.

class Test:
    def test1():
        print("test1")
    def test2(self):
        print("test2")
        
if __name__ == "__main__":
    test_instance = Test()

์ดํ›„ test2() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜ ์—†์ด test2๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

if __name__ == "__main__":
    test_instance = Test()
    test_instance.test2() # ์ถ”๊ฐ€(test2() ์‹คํ–‰)

ํ•˜์ง€๋งŒ, test1()์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ test1()์˜ ์ธ์ž๋Š” 0๊ฐœ ์ด์ง€๋งŒ ์ธ์ž๋ฅผ 1๊ฐœ ๋ฐ›์•˜๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Traceback (most recent call last):
  File "/test2.py", line 9, in <module>
    test_instance.test1()
TypeError: Test.test1() takes 0 positional arguments but 1 was given

์™œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

Python์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•ญ์ƒ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

test2()๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ฒซ๋ฒˆ์งธ ์ธ์ž๊ฐ€ self ์ด๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ, test1()์˜ ๊ฒฝ์šฐ ์ธ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „๋‹ฌ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

[Python] self ๋Š” ๋ฌด์—‡์ผ๊นŒ?

๊ฒฐ๋ก 


๊ฒฐ๋ก ์ ์œผ๋กœ self๋Š” ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๊ทธ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•˜๊ณ  ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.

References


์ ํ”„ ํˆฌ ํŒŒ์ด์ฌ
์ด ์ฑ…์€ ํŒŒ์ด์ฌ์ด๋ž€ ์–ธ์–ด๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ด๋ณด๋Š” ๋…์ž๋“ค๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ ๋ฒˆ๋„ ํ•ด ๋ณธ์ ์ด ์—†๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ „๋ฌธ์ ์ธ ์šฉ์–ด๋“ค์„ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ํ’€์–ด์„œ ...
https://wikidocs.net/1742
[Re:Python] 1. self ์ดํ•ดํ•˜๊ธฐ
ํด๋ž˜์Šค ๋‚ด๋ถ€ ํ•จ์ˆ˜์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ def ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. set_info ๋ผ๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋„ค ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ, name, email, addr์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ž์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด self๋Š” ๋ฌด์—‡์ผ๊นŒ? ์ฒ˜์Œ์—๋Š” ์–ด๋ ต๊ธฐ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜์ธ ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐ˜๋“œ์‹œ self์—ฌ์•ผ ํ•œ๋‹ค. ๋ผ๋Š” ์‹์œผ๋กœ ์™ธ์šฐ๊ณ  ์ง€๋‚˜๊ฐ”๋‹ค.
https://velog.io/@magnoliarfsit/RePython-1.-self-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ์  ๋˜๋Š” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉดย ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”โ—


Uploaded by N2T

'๊ฐœ๋ฐœ๐Ÿ’ป > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ(List)  (1) 2022.11.22
[Python] most likely due to a circular import ์˜ค๋ฅ˜  (0) 2022.11.11
[Python] Argparse ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ• ๋ฐ Cli ์˜ต์…˜  (0) 2022.11.11
[Crawling] ํ•ฉ๋ฒ•์ ์ธ Web Crawling ํ•˜๋Š” ๋ฒ•  (0) 2022.11.06
[Python] Shadow DOM ํฌ๋กค๋ง - Selenium  (0) 2022.11.01
    '๊ฐœ๋ฐœ๐Ÿ’ป/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python] ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ(List)
    • [Python] most likely due to a circular import ์˜ค๋ฅ˜
    • [Python] Argparse ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ• ๋ฐ Cli ์˜ต์…˜
    • [Crawling] ํ•ฉ๋ฒ•์ ์ธ Web Crawling ํ•˜๋Š” ๋ฒ•
    ๅฃ“ๅ€’
    ๅฃ“ๅ€’
    ์•…์„ฑ์ฝ”๋“œ ๋ถ„์„, ๊ฐœ๋ฐœ, ๋ฐฑ์ค€ ๋“ฑ ๋‚˜์˜ ์ผ์ง€

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”