curl 개요


curl은 명령어로 데이터를 전송할 수 있는 도구이다.

업로드, 다룬로드 모두 가능하며 HTTP, HTTPS, FTP, LDAP, TELNET, SMTP, POP3, SCP등 주요 프로토콜을 지원한다.

윈도우, 유닉스, 리눅스등 다양한 플랫폼에서 실행가능한다.



설치


리눅스나 Mac OS X는 기본적으로 설치되어 있다.

윈도우에서는 

https://winampplugins.co.uk/curl/ 에서 다운로드 받아서 설치한다. 




curl 사용법


 curl [options...] <URL>


옵션은 -short 형식 과 --long형식 두가지를 사용할 수 있다.




HTTP/HTTPS 옵션 정리


-k  --insecure 


https 사이트를 SSL certificate 검증없이 연결한다.


-l  --head 


HTTP header 만 보여주고 content 는 표시하지 않는다


-D  --dump-header <file> 


<file> 에 HTTP header 를 기록한다.


-L  --location


서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.

--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다


curl -v daum.net 을 실행하면 결과값으로 다음과 같이 HTTP 302 가 리턴된다.

< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/

-L 옵션을 추가하면 www.daum.net 으로 재접속하여 결과를 받아오게 된다.


-d  --data

HTTP Post data

FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다


-v  --verbose

동작하면서 자세한 옵션을 출력한다.


-J   --remote-header-name

어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다.


-o  --output  FILE

curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용)


-O  --remote-name

file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다.


-s  --silent

정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다.

HTTP response code 만 가져오거나 할 경우 유리하다.




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

WebGoat 8 설치 및 실행방법은 

(1) Docker를 사용해서,

(2) maven을 사용해서 springboot으로 빌더 해서 사용한다.


여기서는 maven을 사용해서 빌더해서 사용하는 방법으로 실행 보자.


STEP-1.  JAVA 8 설치


기본적으로 칼리 리눅스(2017.1 이후버전은) 는 Java 8이 설치되어 있다. 

확인해 보자.

 

 # java -version 




STEP-2.  maven 설치 


칼리에는 기본적으로 메이븐이 설치되어 있지 않아서 Apache Maven을 다운로드 받아서 설치한다. 


다운로드 링크: https://maven.apache.org/download.cgi



apache-maven-3.6.0-bin.tar.gz 다운로드 한다.



  # cd Downloads

  # ls -l 

  # tar xvzf apache-maven-3.6.0-bin.tar.gz

  # cd apache-maven-3.6.0/bin

  # export PATH=$PATH:/root/Downloads/apache-maven-3.6.0/bin

  # mvn -version






STEP-3. Git 설치


칼리 리눅스는 기본적으로 Git이 설치 되어 있다.



  # git --version




STEP-4. WebGoat 설치


칼리 리눅스는 기본적으로 Git이 설치 되어 있다.

메이븐으로 WebGoat 서버를 빌드한다.(시간이 꽤 걸림..)



  # git clone https://github.com/WebGoat/WebGoat.git


 # cd WebGoat


 # mvn clean install


 # mvn -pl webgoat-server spring-boot:run





STEP-5. 브라우저로 WebGoat 서버에 접속


서버가 정상적으로 구동되었다면 이제 브라우저에서 서버로 접속해 보자 



 http://localhost:8080/WebGoat



[참고] 서버의 IP를 변경하려면 

 WebGoat/webgoat-container/src/main/resources/

 application.properties 파일에서 다음과 같이 변경한다.



 server.address=x.x.x.x





로그인화면에서 [Register new user]를 클릭해서 새로운 계정을 만들어서 로그인 한다.




설치와 실행이 끝이 났네요.

자 이제 열심히 웹 취약점을 학습해 보아요~~~ ^^


'보안 > 시큐어코딩' 카테고리의 다른 글

Kali(칼리)리눅스에 WebGoat 8 설치하기  (0) 2018.12.06
Canonicalization(정규화)  (0) 2018.11.20
KISIA 시큐어코딩 사전설문 링크  (0) 2018.03.14
금융보안원 설문지 링크  (0) 2018.03.06
BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[체크 또 체크] 이더리움 스마트 컨트랙트 프로그램을 작성할 때 반드시 주의 해야 하는 사항들 



(1) 접근제어자(Access Modifier) 설정


실수를 방지하기 위해서는 최소한의 접근 권한을 가지도록 접근제어자를 설정한다.


public: 어디에서나 호출가능

external: 해당 컨트랙트 내부에서는 호출 불가능, 외부에서만 호출 가능

private: 해당 컨트랙트 내부에서만 호출 가능

internal: 해당 컨트랙트와 derived 컨트랙트만 호출 가능 



(2) 오버플로우/언더플로우


오버플로우는 숫자가 최댓값 이상으로 증가하는 경우이다.


   0xFFFF.......FF

+ 0x000.........01

-----------------

   0x0000......00


연산을 수행하는 경우 오픈제플린에서 제공하는 safeMath를 사용하여 연산을 수행하게 되면 오버플로우나 언더플로우가 발생시 예외를 발생시키고 revert되어서 안전하게 연산을 수행할 수 있다.


오픈제플린: https://openzeppelin.org/api/docs/math_SafeMath.html

오픈제플린Git: https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol



(3) 함수의 Reenter 방지


외부 스마트 컨트랙트 함수를 호출하는 경우, 그 함수에서 호출한 함수를 재귀 호출하게 되어 있다면 반복적으로 토큰을 전송하는 등 예상치 못한 결과를 발생 시킬 수 있다.


사례) The DAO 해킹

2016년 6월17일, 다오의 기능 중 하나인, 투자자들이 클아우드 세일에 참여해서 다오 토큰 구매를 위해 지불했던 이더를 환불받는 기능에서, 이더를 환불신청(,split)해서 이더를 먼저 받고, 자신의 다오토큰을 되돌려주기전에 다시 이더를 환불 받는 재귀 call 코드 (Recursive calling vulnerability)를 통해 무한환불 공격을 수행하여 총 243만 이더(약 750억)가 해킹당함.


이를 방지하기 위해서는 nonReentrant라는 modifier 사용.

noReentrant를 사용하면 reentrancy_lock이라는 플래그 변수로 lock 상태로 전환되어, 해당 함수가 실행되는 도중에 해당 함수 재귀 호출을 막아준다.



[작성중]


(4)  Storage 변수 사용 주의


(5) memory 변수 선언 


(6) 버전 선언 규칙 지정


(7) 다중 상속 주의 


(8) 컨트랙트 오너 관리 




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바