img

前言

因為之前有在用別人寫的HITCON ZeroDay BOT

可是最近好像壞惹,都收不到通知

所以就想說,好吧,那就自己來寫一個吧!

開寫

首先,我想要的BOT功能是:

  • 每天同一時間,自己爬HITCON ZeroDay

  • 如果有新的Open漏洞,就傳通知給我

Telegram BOT可以去找一個叫做BOTFather的帳號申請

連結在這 https://telegram.me/botfather

輸入/newbot,之後填寫帳號名稱等資訊就申請完成了

申請完後會拿到Token

有了這個Token,我們才能對BOT做一些操作


接著,因為我們定位是給自己使用的

所以只要讓BOT傳訊息給我們就好

傳訊息要有使用者ID才能傳

使用者ID怎麼取得呢?

可以先用自己的帳號加BOT

然後隨便傳個訊息給BOT

之後去https://api.telegram.org/bot$TOKEN/getUpdates就可以看到自己的ID惹

($TOKEN這邊填我們前面拿到的Token)


有了IDToken,我們就能傳訊息惹

例如:https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=8787&text=Hello+Kaibro

就會傳Hello Kaibro的訊息給id=8787的使用者

(這邊訊息要用URL Encode過)

潮簡單der


爬蟲

接著,就要開始寫我們的爬蟲惹

基本上,ZeroDay一天更新一次Open漏洞

(似乎是每天半夜3點左右)

所以不需要一直Polling爬網站

只要24小時爬一次就行,這邊可以用Crontab達成

爬的方式很簡單,把公開漏洞的頁面抓下來

然後用正規表達式抓出漏洞名稱和連結

再去和之前抓過的比對,如果有沒看過的

就傳送該漏洞訊息給使用者

詳細實作如下: (Ruby)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
require 'net/http'
require 'uri'
require 'cgi'

$userid = 'YOUR_ID'
$token = 'YOUR_BOT_TOKEN'
$log_path = 'YOUR_LOG_PATH'

f = File.open($log_path, "r+")
prev = f.read()

def get_vul()
  uri = URI('https://zeroday.hitcon.org/vulnerability/disclosed')
  http = Net::HTTP.start(uri.host, uri.port,:use_ssl => uri.scheme == 'https')
  request = Net::HTTP::Get.new(uri.request_uri)
  r = http.request(request)
  vuls = r.body.scan(/<a href="(.*)">(.*)<\/a><\/h4>/)
end

new_vuls = get_vul()
new_vuls.each do |s|
  if !prev.include? s[0]  # link
    $msg = URI.encode s[1]  # title
    sendMsg = "https://api.telegram.org/bot#{$token}/sendMessage?chat_id=#{$userid}&text=#{$msg}"

    uri = URI(sendMsg)
    Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
      request = Net::HTTP::Get.new uri
      response = http.request request 
    end
    f.write(s[0] + "\n")
    sleep(0.5)
  end
end
f.close()

github repo連結在這: https://github.com/w181496/TG_Zeroday

IDTOKEN換成你自己的

再設定log檔的絕對路徑就OK了

之後設定crontab

crontab -e

設定每天19點5分跑一次script:

5 19 * * * /usr/bin/ruby /home/kaibro/bot/zero.rb

到這邊就大功告成惹

Easy Peasy

不過Telegram BOT當然不只有這樣而已

Telegram BOT有各式各樣的類型

這個只是其中一種通知型的BOT

Reference

https://www.forsomedefinition.com/automation/creating-telegram-bot-notifications/