Skip to content
This repository has been archived by the owner on Aug 27, 2023. It is now read-only.

Latest commit

 

History

History
58 lines (35 loc) · 3.21 KB

README-TW.md

File metadata and controls

58 lines (35 loc) · 3.21 KB

Pubu PoC

English version

這份程式碼實作了公開於HITCON ZeroDay的ZD-2023-00144漏洞。攻擊者可以利用這個漏洞在沒有購買的狀態下將pubu.com.tw網站上的電子書下載下來。 關於這個漏洞的更多資訊,請參考這篇部落格文章

注意⚠️: 這份程式碼只是用來證明漏洞的可行性,僅限於學術用途。下載具有版權的檔案可能會觸犯法律以及網站規範,使用前請三思

更新 (2023/08/27):目前這個漏洞已被修補。

Demo

Watch the video

使用方法

這份程式碼需要python3 (版本 >= 3.8)以及一些額外套件。

  1. 下載程式碼:git clone https://github.com/joeywang4/Pubu-PoC
  2. 切換至程式碼資料夾:cd Pubu-PoC
  3. 安裝額外套件:pip install -r requirements.txt
  4. 開始下載電子書:python main.py -v [book_id ...]
  5. 下載好的電子書會存放於output/資料夾中。

下載電子書時會需要用到book_id,這是電子書的編號,可以在電子書的網址中找到。 舉例來說,https://www.pubu.com.tw/ebook/999這個網址為編號999的電子書網址,而下載此書時需執行python main.py -v 999

執行參數

在執行main.py時可以提供一些額外參數來改變執行模式以及下載資料夾。以下將列出一些主要參數,完整列表可以執行python main.py -h查看。

  • -v--verbose:執行時顯示更多資訊
  • -t--threads:調整爬蟲的執行緒數量
  • -o--output:設定下載資料夾(預設為output/)
  • -c--change-decode:調整產生PDF文件時的解碼模式。當電子書檔案發生錯誤時可以使用這個參數。

已知問題

  1. 解碼錯誤:有時電子書在進行解碼時會發生問題,導致書本頁面排列有誤,此時可以重新下載書籍並使用-c參數進行修正。
  2. 卡在搜尋步驟:有些電子書的書頁排列不連續導致搜尋需花費相當長的時間才能完成。若遇到此狀況請耐心等候或在下載前先預載離線資料庫(也需花費許多時間)。

離線資料庫

在下載書籍時需要搜尋書頁資料,而這個步驟有時需等待很久。這份程式碼也提供了預先下載離線資料庫的功能,在下載電子書時即可跳過搜尋的步驟。

若是想要先預載離線資料庫,可以執行python main.py -u pages來預載書頁資料,或是使用-u all參數將書籍資料一併下載至離線資料庫中。關於離線資料庫的更多資訊,請參考這份文件(僅限英文)。

注意:預載離線資料庫需花費數天,而這些資料將會占用約1G的空間。

測試

可以執行pytest來執行test/中的測試程式碼。

改進程式碼

歡迎發送PR來對程式碼進行修改! 修改程式碼之後請執行blackpylint,可能的話也請新增測試程式碼。