Telegram Bot2017. 6. 25. 17:33

이전 포스팅에서는 telegram 봇을 생성하는 것을 다뤘다.

이번 포스팅은 이전에 만든 telegram 봇을 이용해 Twitter 게시물을 가져오도록 해보자.


필자는 python을 이용해 봇이 동작하도록 하고자 한다.

python은 2.7.10 버전을 사용하고 있으며, 2.7 버전 아무거나 사용해도 무방하다.

단, python 3버전은 코딩 방식이 다르므로 동작하지 않을 수 있다.


우선 tweepy 라이브러리를 이용하기 위해 tweepy를 설치해야 한다.

tweepy는 여기에서 설치가 가능하다.

* tweepy 라이브러리는 twitter에서 제공해주는 API를 쉽게 사용할 수 있도록 만든 wrapper 라이브러리다.


설치방법은 다음과 같다.

[ 그림 1 ] tweepy github 페이지 화면


[ 그림 1 ] 에서 Clone or download 버튼을 클릭해 zip으로 다운로드 받고 압축을 풀어준다.

터미널 혹은 커맨드창을 열어 압축이 풀린 tweepy 폴더로 이동한다.

python setup.py install


위 명령을 이용해 설치를 한다.

설치가 완료 되면 tweepy 라이브러리를 사용할 수 있다.


twitter API를 사용하기 위해서는 twitter 사이트에서 키를 받아와야 한다.(LINK)

LINK를 타고 들어가 로그인을 한다.

[ 그림 2 ] twitter app 등록 사이트


로그인을 하면 [ 그림 2 ]와 같은 화면을 볼 수 있다.

우상단에 [Create New App] 버튼을 클릭한다.

[ 그림 3 ] Create App 화면


[ 그림 3 ] 과 같은 화면을 볼 수 있는데, 순서대로 App 이름, App 설명, URL 이 필수로 되어 있다.

App 이름은 T3st_Tweet_Bot, App 설명은 crawl tweet and send telegram, URL은 127.0.0.1을 입력한 뒤 Developer Agrement를 체크하고 Create 버튼을 누른다.

* App 이름은 이미 사용중이라 위와 같이 설정했다.


[ 그림 4 ] App 설정 화면


App이 정상적으로 만들어지면 [ 그림 4 ] 와 같은 화면을 볼 수 있다.

Keys and Access Tokens 탭에 들어가면 다음과 같은 화면을 볼 수 있다.

[ 그림 5 ] Keys and Access Tokens


API Key, API Secret 키를 따로 적어두고 아래 Your Access Token 부분에 Create Access Token 버튼을 클릭해 Access Token을 발급받는다.

[ 그림 6 ] Access Token 발급


Access Token, Access Token Secret 값도 따로 적어놓는다.


이로써 Twitter API를 사용할 준비가 끝났다.

다음 포스팅은 실제 Python 코드를 작성하여 Tweet_Bot이 작동되도록 한다.

Posted by Imp3rio
Telegram Bot2017. 6. 25. 16:52

이번에 다룰 내용은 Telegram을 이용한 Bot 만들기이다.

필자는 python을 이용해 트위터의 특정 계정의 최신 트윗 내용을 보내주는 봇을 만든다.


Telegram에서는 이용자들이 쉽게 Bot을 만들어 사용할 수 있도록 API를 제공하고 있다.

봇과 관련된 API 문서는 여기에서 볼 수 있다.


우선, 텔레그램 봇을 이용하기 위해서는 텔레그램에 BotFather를 추가해야 한다.

BotFather는 텔레그램 봇을 관리하는 관리자같은 거라고 생각하면 이해하기 쉽다.


텔레그램 친구목록에서 @BotFather를 검색해 친구추가한다.

[ 그림 1 ] 텔레그램 친구 목록에서 @BotFather를 검색한 화면

[ 그림 2 ] BotFather 를 클릭하면 나타나는 화면


[ 그림 2 ] 에서 Start를 눌러 활성화 한다.

[ 그림 3 ] BotFather 활성화한 화면


BotFather를 활성화하면 어떤 명령어들을 사용할 수 있는지 보여준다.

봇을 만들어야 하기 때문에 /newbot 명령어를 이용한다.

[ 그림 4 ] /newbot 명령어 입력시 화면


봇의 이름을 정하라고 한다.

필자는 Tweet_Bot 으로 봇 이름을 설정한다.

[ 그림 5 ] 봇 이름 설정


봇의 username을 설정하라고 한다. username은 반드시 'bot'으로 끝나야 한다고 한다.

Tweet_Test_Bot으로 한다.

* Tweet_Bot으로 설정하려고 했지만 이미 사용중이라 하기 때문에 다른 이름을 사용했다.


[ 그림 6 ] 봇의 username을 설정한 화면


봇의 username을 설정하면 [ 그림 6 ] 과같은 화면을 볼 수 있다.

API 값을 따로 적어두도록 하자.

그 다음 Tweet_Test_Bot 링크가 걸려있는데 이 링크를 클릭해 방금 만든 봇을 활성화 하자.

[ 그림 7 ] Tweet_Bot 활성화


Tweet_Bot을 활성화 한 화면이다.

아직 봇만 활성화 시켰기 때문에 아무 동작도 하지 않는다.

봇이 동작하도록 하기 위해서는 Bot의 Chat-id 를 알아야 한다.

Chat-id를 알아내기 위해 다음 URL을 참고해서 들어가자.

https://api.telegram.org/bot[API값]/getUpdates


BotFather한테 받은 API 값을 [API값] 부분에 넣어주면 된다.

* 대괄호는 넣지 않도록 한다.


[ 그림 8 ] Tweet_Bot의 getUpdates 화면


[ 그림 8 ] 과 같이 ok 부분이 true로 되어 있어야 한다. 만약 false로 나타나면 API 값이 틀렸을 확률이 높다.

chat-id가 나타나지 않는다. 이는 Tweet_Bot 채팅방에 아무 입력이 없었기 때문이다.

Tweet_Bot 채팅방에 아무 말이나 입력하자.


[ 그림 9 ] Tweet_Bot 채팅방에 '헤헤헤헷'을 입력한 후의 getUpdates 화면


Tweet_Bot 채팅방에 아무 말이나 입력한 뒤 getUpdates 화면을 새로고침하면 [ 그림 9 ] 와 같은 화면을 볼 수 있다. 여기서 id 값을 따로 적어놓도록 하자.


지금까지 Telegram 봇 만들기를 했다.

다음에는 twitter API 설정 및 tweepy를 설치하도록 하자.

Posted by Imp3rio
Wargame/webhacking2017. 6. 19. 09:36

webhacking.kr 13번 문제를 보면 다음과 같다.

SQL INJECTION 문제인 것 같고, 힌트로 select 문이 주어져있다.

페이지 소스를 보면 다음과 같다.

다른 힌트는 주어져있지 않다.


일단 어떤 문자열이 필터링되어 있는지 확인할 필요가 있다.

select를 넣어보자.

result 가 0으로 나온다.

필터링이 되는 것 같지는 않다.

힌트에 있는 문자열을 한 단어씩 넣어보면 모두 필터링 되지 않는다.

두 단어씩 끊어 입력해보면 다음과 같이 필터링이 된다.

문자열 사이에 공백이 있으면 필터링이 되는 것 같다.

공격을 하기 위해 필요한 문자열을 넣어보자.

if, union, count, length, substr 등 여러 문자열을 넣어보면 다음과 같이 필터링이 되지 않는다.


 필터링 되지 않는 것

 if, count, length, substr, min, max, concat, in, 0x

 필터링 되는 것

 union, order by, group by, limit, like


입력창에 1, 2 숫자를 넣어봤더니 각각 다음과 가같은 화면을 볼 수 있다.

1을 넣었을 때 위와 같이 result 는 1이 출력되었다.

2를 넣었을 때 위와 같이 result는 0이 출력되었다.


이를 봤을때 1은 True, 0은 False 같다는 느낌이 들었다.

즉, 참일 때와 거짓일 때의 화면이 다르다는 것이고, 이는 BLIND INJECTION을 해야 할 것 같다.


URL에 다음과 같은 쿼리문을 날려보자.

no=if((select(count(flag))from(prob13password))in(1),1,2)

위 쿼리문은 prob13password 테이블에서 flag의 개수가 1개 이면, 1을 no에 저장하고, 그렇지 않으면 2를 저장한다. no가 2가 됐기 때문에 위 처럼 result가 0으로 나왔다.

즉, flag 칼럼에 데이터가 2개 이상이 있음을 알 수 있다.

아래 쿼리문을 이용해 개수를 알아내면 flag 칼럼에 데이터가 2개 있음을 알 수 있다.

no=if((select(count(flag))from(prob13password))in(2),1,2)

min 함수와 max 함수를 이용해 데이터 각각의 길이를 알아낼 수 있다.

다음 쿼리를 이용해 알아보자.

no=if((select(min(length(flag)))from(prob13password))in(4),1,2)

길이가 가장 짧은 flag의 길이는 4임을 알 수 있다.

위 쿼리문을 이용하면 가장 긴 flag의 길이도 알아낼 수 있다.


다음 쿼리를 이용하면 한글자씩 알아낼 수 있다.

no=if((substr((select(max(flag))from(prob13password)),1,1)in(0x66)),1,2)

max(flag)의 첫 번째 글자가 0x66(f) 임을 알 수 있다.

min과 max는 최소값, 최대값을 의미하는데, 이 함수들을 이용해서 글자를 뽑아낼 때, min이 최대길이의 flag를 max가 최소길이의 flag를 가져온다. 이 것에 대해서는 조금 더 알아봐야 할 것 같다.


이를 이용한 python 코드는 다음과 같다.



위 코드의 python 파일을 아래 첨부한다.

13.py


SESSION 값은 사용자의 쿠키 값을 넣으면 된다.

최대 길이의 flag 값을 Auth에 입력하면 문제가 풀린다.

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

[webhacking.kr] 21번 문제  (0) 2017.06.18
[webhacking.kr] 58번 문제  (0) 2017.06.18
[webhacking.kr] 54번 문제  (0) 2017.06.18
[webhacking.kr] 53번 문제  (0) 2017.06.18
[webhacking.kr] 49번 문제  (0) 2017.06.18
Posted by Imp3rio