Telegram Bot2017. 6. 26. 13:48

Bittrex API를 이용하기 위해서는 API Key, Secret Key를 발급받아야 한다.

이를 위해서 로그인을 한다.

* 회원가입은 여기를 참고해 진행하길 바란다.



[그림 1] Setting 화면


로그인을 한 뒤 [그림 1]의 ① 을 클릭하여 Setting 화면에 들어와 ②를 클릭해 2중 인증 등록하는 페이지로 이동한다.

* API Key를 발급받을 때 2중 인증이 반드시 필요하다.


[그림 2] 2중 인증 페이지


2중 인증 페이지는 [그림 2]와 같다. ①에 QR 코드가 있는데 이를 이용해 6 자리 암호( OTP ) 를 얻어와야 한다. Bittrex는 google authenticator를 이용한다고 중앙상단에 설명이 되어있다. google authenticator는 스마트폰 어플로 다운받아야 한다. 이 어플을 이용해 QR Code를 찍으면 OTP 암호가 나타난다.

이 암호를 중앙 하단에 있는 입력 창에 넣고 Enable 2FA 버튼을 누르면 2중인증 설정이 진행된다.

[그림 3] 2중 인증 진행 1


이메일로 인증하라고 한다. 메일을 보면 Bittrex에서 온 메일이 하나 존재한다. 해당 메일을 열어 Verify 관련 링크를 누르면 다음과 같은 화면을 볼 수 있다.

[그림 4] 2중 인증 진행 2


[그림 4] 와 같은 화면이 나타나면 google authenticator 어플을 이용해 6자리 숫자를 입력해 주면 다음과 같은 화면이 나타난다.

[그림 5] 2중 인증 완료


[그림 5]와 같은 화면이 나타나면 2중 인증이 모두 완료된다.


[그림 6] Setting 페이지


다시 Setting 페이지로 넘어와서 ①을 눌러 API Key 발급받는 페이지로 이동한다.

②를 눌러 API Key를 생성한다.

[그림 7] Add API Key


API Key 추가버튼을 누르면 [그림 7]과 같이 나타난다. 4가지 기능중 어떤 것들을 사용할지 토글 형식의 버튼을 이용해 설정한다. 필자는 모든 기능을 사용하도록 설정했다.

설정을 하고 ① 입력창에 google authenticator에 나타난 OTP를 입력하고 update kyes 버튼을 누르면 API Key가 발급된다.

[그림 8] API Key & Secret Key


[그림 8]에 나타난 Key와 Secret 값을 잘 적어두도록 하자.

지금까지는 Bittrex API를 이용할 수 있는 API Key를 발급받았다. 여기까지 따라오느라 고생이 많았다.

다음 포스팅은 python을 이용해 Bitrex API를 사용하는 법을 알아보도록 하자.

Posted by Imp3rio
Wargame/pwnable2017. 6. 25. 19:15

pwnable.kr 사이트의 collision 문제를 보면 다음과 같다.

문제를 보니 MD5 해쉬 충돌과 관련된 문제인 것 같다.

해쉬 충돌이란 해쉬 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 갖는 것을 의미한다.


우선 ssh로 접속해 코드를 보면 다음과 같다.

우선 코드를 분석해보자.

main 함수를 보면 인자가 20바이트가 아니면 "passcode length should be 20 bytes" 문자열을 찍어내고 종료한다. 이를 통해 20바이트의 인자를 넘겨주어야 하는 것을 알 수 있다.

hashcode는 0x21DD09EC 이고, check_password() 함수의 결과 값이 hashcode와 같으면 문제가 풀리는 것 같다.


인자의 값이 0x21DD09EC와 같아야 하는데, 총 20바이트를 넘겨주어야 한다.

총 20바이트의 값이 0x21DD09EC( 4바이트 )와 같아야 하기 때문에 0x21DD09EC를 5로 나눈 값을 넘겨주면 된다.

0x21DD09EC를 5로 나누면 0x6C5CEC8이고, 0x6C5CEC8에 5를 곱하면 0x21DD09E8이 나온다.

즉, 4만큼 차이가 난다.

따라서 0x6C5CEC8 * 4 + 0x6C5CECC를 넘겨주면 된다.

이 값을 python 코드로 넘겨주도록 하자.

python -c 'print "\xC8\xCE\xC5\x06"*4+"\xCC\xCE\xC5\x06"'


위 코드를 인자로 넘겨주면 된다.

위와 같이 플래그가 툭 튀어 나온다.

이 값을 Auth에 넘겨주면 문제가 풀린다.

'Wargame > pwnable' 카테고리의 다른 글

[pwnable.kr] bof  (0) 2017.07.25
[pwnable.kr] fd  (0) 2017.06.18
Posted by Imp3rio
Telegram Bot2017. 6. 25. 18:28

지금까지 Telegram Bot을 만들고 Twitter API 설정 및 tweepy 설치까지 했다.

이번에는 python 코드를 작성하여 Tweet_Bot이 동작하도록 하자.


tweet_Test.py 라는 이름으로 파일을 생성했고, python 코드는 다음과 같다.



위 코드를 설명하겠다.

웹에 접근하기 위해 urllib, urllib2 라이브러리를 사용하며, 디렉터리와 파일의 유무 및 생성을 위해 os 라이브러리를 사용한다. 그리고 twitter API를 쉽게 사용하기 위해 wrapper 모듈인 tweepy 라이브러리를 사용한다. 마지막으로 60초마다 동작하도록 하기 위해 time 라이브러리를 사용한다.


API키, API Secret 키, Access 키, Access Secret 키 들을 선언한다.

send_telegram() 함수를 정의하며 이 함수는 BOT_ID( 봇 고유 번호 )를 이용해 해당 봇에 CHAT_ID( 채팅방 고유번호 )를 가진 채팅방에 인자로 전달받은 sendData를 보내는 함수이다.

즉, Tweet_Bot이 사용자에게 데이터를 보내주는 역할을 한다.


main 함수부분은 다음과 같다.

먼저 현재 디렉터리에 "latest" 라는 이름의 디렉터리가 있는지 판별하고, 없으면 "latest" 디렉터리를 생성한다.

API_KEY, API_SECRET 을 이용해 사용자 검증을 하고, ACCESS_KEY, ACCESS_SECRET 을 이용해 검증된 사용자에게 access_token을 셋팅한다.

UserID는 숫자로 되어 있는데 이 숫자는 여기에서 확인할 수 있다. '@'로 시작하는 사용자 명을 '@'를 떼고 적어주면 된다. 

필자는 @CoinKor 계정의 트윗을 받아오기 위해 CoinKor를 검색하여 나온 ID를 사용하였다.


name은 파일을 생성할 때 사용하는 변수로 필자는 CoinKorea의 데이터를 가져오므로 CoinKorea로 설정했다. 


무한 루프를 돌면서 특정 사용자의 타임라인을 읽어와 timeline 변수에 저장한다.

타임라인의 가장 최신의 글을 text 변수에 저장한 뒤 latest 디렉터리 안에 "CoinKorea_latest.txt" 파일이 있는지 판단하고 없으면 isNotEqual 변수를 True로 설정해 파일을 생성하여 최신글을 저장한다.

"CoinKorea_latest.txt" 파일이 존재하면 파일을 읽어 before 변수에 저장하고 text 변수와 비교하여 다르면 isNotEqual을 True로 설정한다.

즉, 가장 최신의 글이 올라오게 되면 해당 글을 텔레그램으로 보내주는 역할을 한다.


위 루틴을 60초 마다 반복하도록 sleep() 함수를 이용한다.


[ 그림 1 ] tweet_Test.py를 실행한 후 Tweet_Bot 채팅방


이렇게 Tweet_Bot을 만들어봤다.

위 봇을 응용해서 다른 봇도 만들어볼 수 있을 것 같다.

Posted by Imp3rio