2019-02-25

Python 使用 Tesseract-OCR 做 Captcha 文字識別

markdown 使用 python 語言的 tesserocr 套件做 captcha 的文字驗證測試,此篇只簡要說明套件的安裝和使用。 # 簡介 在網站的登入或註冊過程,會在不同的網站遇到需要輸入驗證碼的場景,在自動化操作的過程可以透過光學文字識別(Optical Character Recognition,OCR)來將影像中的文字分析後輸出成文字。 Tesseract 是一款開源的 OCR 套件,在 python 中要使用 Tesseract-OCR 使用到 tesserocr。 ## 安裝 Tesseract-OCR 首先在系統中安裝 Tesseract-OCR: * 到 [Tesseract Wiki](https://github.com/tesseract-ocr/tesseract/wiki) 依自己使用的作業系統安裝 * Windows 安裝後要將 Tesseract-OCR 的路徑加到環境變數的 PATH 中。 將 `C:\Program Files (x86)\Tesseract-OCR` 加到 PATH 中 ## 安裝 tesserocr * Windows 系統必須下載 whl 檔安裝 step 1. 到[simonflueckiger/tesserocr-windows_build, github](https://github.com/simonflueckiger/tesserocr-windows_build/releases),下載 `tesserocr-2.4.0-cp37-cp37m-win_amd64.whl`。 step 2. 安裝 tesserocr ``` python -m pip install tesserocr-2.4.0-cp37-cp37m-win_amd64.whl ``` step 3. 設定環境設數 安裝完成要在環境變數指定 tessdata 路徑 `TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR\tessdata` 如果沒有`TESSDATA_PREFIX`的路徑設定,執行時會出現找不到 tessdata path ``` RuntimeError: Failed to init API, possibly an invalid tessdata path? ``` 解法一:將 `C:\Program Files (x86)\Tesseract-OCR\tessdata` 資料夾複製到 `C:\C:\Program Files\Python37\tessdata` 的資料夾 解法二:設定環境變數 `TESSDATA_PREFIX` 並指定正確的 tessdata 的路徑,設定好環境變數(可能需要重啟使用的編輯器 cmd 或 vs 才能正常取用新增的環境變數) ## 測試辨識 測試圖片 `000000.png` 測試從圖片中辨識 ``` from PIL import Image import tesserocr image = Image.open("00000.png") with tesserocr.PyTessBaseAPI() as api: api.SetVariable("tessedit_char_whitelist", "0123456789") ans = tesserocr.image_to_text(image) print(ans) ```

Python 將 Base64 字串還原為圖片

markdown ## 取得 Base64 格式 從網站取得 ``` import base64 img_data_base64 = request.POST.get("img_data") img_b64decode = base64.b64decode(img_data_base64) ``` 從檔案取得 Base64 然後將 base64 再解碼 ``` import base64 img_file = open(r'image.jpg','rb') img_b64encode = base64.b64encode(img_file.read()) img_file.close() img_b64decode = base64.b64decode(img_b64encode) ``` # Python 圖片 Base64 解碼還原 PIL.Image 或 Opencv Base64 解碼為 OpenCV 圖片: ``` import base64 import numpy as np img_data_base64= request.POST.get("img_data") img_data=base64.b64decode(img_data_base64) img_array = np.fromstring(img_data,np.uint8) img=cv2.imdecode(img_array,cv2.COLOR_BGR2RGB) cv2.imshow("img",img) cv2.waitKey() ``` Base64 解碼為 PIL.Image 圖片: ``` from io import BytesIO from PIL import Image #pillow img_data_base64= request.POST.get("img_data") img_data=base64.b64decode(img_data_base64) image = BytesIO(img_data) img = Image.open(image) ``` OpenCV 轉換成 PIL.Image 格式: ``` import cv2 from PIL import Image import numpy as np img = cv2.imread("image.jpg") cv2.imshow("OpenCV",img) image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) image.show() cv2.waitKey() ``` PIL.Image 轉換成 OpenCV 格式: ``` import cv2 from PIL import Image import numpy as np image = Image.open("image.jpg") image.show() img = cv2.cvtColor(np.asarray(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",img) cv2.waitKey() ``` 參考資料來源: https://blog.csdn.net/dcrmg/article/details/80542665 https://blog.csdn.net/qq_19707521/article/details/78403904 https://blog.csdn.net/qq_19707521/article/details/78367617

2019-02-18

Burp Suite 抓取 https 資料

markdown 因為 https 需要替換憑證才能取得資料,所以需要將 Burp Suite 的憑證安裝到瀏覽器中,這篇文章就按步驟在 firefox 中安裝 burp suite 產生的憑證,它可以抓取到 https 中的請求資料。 ## 啟動Burp,確認代理已啟動 Proxy Step 1. 開一個暫時專案,下一步(Next) Step 2. 使用預設設定,開啟(Start Burp) Step 3. 檢查代理監聽(Proxy Listeners)是啟動狀態 Step 4. 開啟瀏覽器的設定(Preferences) Step 5. 開啟 一般(General)/網路代理(Network Proxy) 的設定(Settings) Step 6. 填入手動設定代理。 host: 127.0.0.1, port: 8080,勾選「全部通訊協定使用這個代理(Use this proxy server for all protocols)」,按確定(OK) ## 下載憑證並安裝到瀏覽器 Step 1. 瀏覽器開啟 http://burp Step 2. 下載憑證 Step 3. 將 cacert.der 儲存到 `~/download/cacert.der` 資料夾 Step 4. 開啟瀏覽器的設定(Preferences) Step 5. 開啟「隱私和安全(Privacy & Secruity)」,找到憑證(Certificates)區段,開啟「檢視憑證(View Certificates...)」 Step 6. 選擇 Authorities 頁籤 Step 7. 匯入(Import) 步驟2下載的憑證 Step 8. 勾選「信任這個網站(Trust this CA to identity websites)」,按確定(OK) Step 9. 能在列表中看到剛才匯入的憑證「PortSwigger CA」 Step 10. 瀏覽器開啟 `https://www.google.com`,在網址列的驚嘆號圖型能看到網站使用的憑證被 Brup 換成 PortSwigger CA 了 Step 11. 至此在使用 Burp 時就能攔到 https 的包嘍。

2019-01-30

合法練習滲透測試的網站

markdown 進攻即是最好的防禦,這句話同樣適用於信息安全的世界。這裏羅列了很多合法的來練習黑客技術的網站,不管你是一名開發人員、安全工程師、代碼審計師、滲透測試人員,通過不斷的練習才能讓你成為一個優秀安全研究人員。以下網站希望能給各位安全小夥伴帶來幫助!若有其他的補充和推薦,歡迎給留言(排名不分先後) ## 國外 1. [bWAPP](http://www.itsecgames.com/) 免費和開源的web應用進程安全項目。它有助於安全愛好者及研究人員發現和防止web漏洞。 2. [Damn Vulnerable iOS App (DVIA)](http://damnvulnerableiosapp.com/) DVIA是一個iOS安全的應用。它的主要目標給移動安全愛好者學習iOS的滲透測試技巧提供一個合法的平台。APP涵蓋了所有常見的iOS安全漏洞,它免費並開放源碼,漏洞測試和解決方案覆蓋到iOS 10版本。信息安全工程师[@prateekg147](https://twitter.com/prateekg147)设计并开发。[Getting Started](http://damnvulnerableiosapp.com/2013/12/get-started/) 3. [Damn Vulnerable Web Application (DVWA)](http://www.dvwa.co.uk/) 基於 php 和 mysql 的虛擬 Web 應用,“內置”常見的 Web 漏洞,如 SQL 注入、xss 之類,可以搭建在自己的電腦上 4. [Game of Hacks](http://www.gameofhacks.com/) 基於遊戲的方式來測試你的安全技術,每個任務題目提供了大量的代碼,其中可能有也可能沒有安全漏洞! 5. [Google Gruyere](http://google-gruyere.appspot.com/) 一個看起來很low的網址,但充滿了漏洞,目的是為了幫助那些剛開始學習應用進程安全性的人員。 6. [HackThis!!](https://www.hackthis.co.uk/) 旨在教你如何破解、轉儲和塗改,以及保護網站的黑客技巧,提供超過50種不同的難度水平。 7. [Hack This Site](https://www.hackthissite.org/) 是一個合法和安全的測試黑客技能的網站,幷包含黑客資訊. 文章、論壇和教程,旨在幫助你學習黑客技術。 8. [Hellbound Hackers](https://www.hellboundhackers.org/) 提供了各種各樣的安全實踐方法和挑戰,目的是教你如何識別攻擊和代碼的補丁建議。主題包含應用進程加密和破解,社工和rooting。社區有接近10萬的註冊會員,也是最大的一個黑客社區之一。 9. [McAfee HacMe Sites](http://www.mcafee.com/us/downloads/free-tools/index.aspx) 邁克菲提供的各類黑客及安全測試工具 10. [Mutillidae](https://sourceforge.net/projects/mutillidae/) 是一個免費,開源的Web應用進程,提供專門被允許的安全測試和入侵的Web應用進程。其中包含了豐富的滲透測試項目,如SQL注入、跨站腳本、clickjacking、本地文檔包含、遠程代碼執行等. 11. [OverTheWire](http://overthewire.org/wargames/) 基於遊戲的讓你學習安全技術和概念的黑客網站 12. [Peruggia](https://sourceforge.net/projects/peruggia/) 一個提供安全、合法攻擊的黑客網站 13. [Root Me](https://www.root-me.org/) 通過超過200名黑客的挑戰和50個虛擬環境來提高你黑客技巧和網絡安全知識的網站 14. [Try2Hack](http://www.try2hack.nl/) 最古老的黑客網站之一,提供多種安全挑戰。 15. [Vicnum](http://vicnum.ciphertechs.com/) OWASP 項目之一,簡單框架,針對不同的需求,並基於遊戲的方式來引導安全開發者學習安全技術。 16. [WebGoat](http://webappsecmovies.sourceforge.net/webgoat/) 最受歡迎的OWASP項目,提供了一個真實的安全教學環境,指導用户設計複雜的應用進程安全問題 17. [Test ASP](http://testasp.vulnweb.com/) acunetix 提供的測試網站,使用 ASP 18. [Test ASP.Net](http://testaspnet.vulnweb.com/) acunetix 提供的測試網站 19. [Test PHP](http://testphp.vulnweb.com/) acunetix 提供的測試網站,使用 asp.net webform 開發 20. [Altoro Mutual](http://demo.testfire.net/) ## 其它 1. [i春秋](http://www.ichunqiu.com/main) 國內比較好的安全知識在線學習平台,把複雜的操作系統、工具和網絡環境完整的在網頁進行重現,為學習者提供完全貼近實際環境的實驗平台, 2. [XCTF_OJ 練習平台](http://oj.xctf.org.cn/) XCTF-OJ (X Capture The Flag Online Judge)是由XCTF組委會組織開發並面向XCTF聯賽參賽者提供的網絡安全技術對抗賽練習平台。XCTF-OJ平台將彙集國內外CTF網絡安全競賽的真題題庫,並支持對部分可獲取在線題目交互環境的重現恢復,XCTF聯賽後續賽事在賽後也會把賽題離線文檔和在線交互環境彙總至XCTF-OJ平台,形成目前全球CTF社區唯一一個提供賽題重現覆盤練習環境的站點資源。 3. [網絡信息安全攻防學習平台](http://hackinglab.cn/index.php) 提供基礎知識考查、漏洞實戰演練、教程等資料。實戰演練以 Web 題為主,包含基礎關、腳本關、注入關、上傳關、解密關、綜合關等。 ## 參考來源: http://list.ly/list/euz-15-vulnerable-sites-to-legally-practice-your-hacking-skills-2016-update http://www.freebuf.com/sectool/4708.html https://www.zhihu.com/question/24740239 https://hk.saowen.com/a/0cefffc20499a78b147ab04a5689ac0e1b6acbb4abecf236e018c36fe232ba0d https://www.freebuf.com/special/123961.html

2019-01-28

Python Import the class within the same directory or sub directory

markdown # 引用同一資料夾中的類別 假設有已有如下的資料結構,在 myfolder 中有 Order, Product, User, Manager 四個 class,要引用到 main.py 中使用。 ``` myfolder +-- main.py +-- subdir | +-- order.py | +-- product.py +-- user.py +-- manager.py ``` ## Python 2 建立一個名為 `__init__.py` 的空檔案,放在同一個資料夾中 在 main.py 中 ``` from user import User from manager import Manager ``` 資料夾範例: ``` myfolder +-- main.py +-- subdir | +-- order.py | +-- product.py +-- __init__.py +-- user.py +-- manager.py ``` 如果是要引用子目錄中的類別,則是在子目錄中建立 `__init__.py` ``` from subdir.order import Order from subdir.product import Product ``` 子資料夾範例: ``` myfolder +-- main.py +-- subdir | +-- __init__.py | +-- order.py | +-- product.py +-- user.py +-- manager.py ``` ## Python 3 在同一目錄下引用直接使用 .user,參考如下: 在 main.py 中 ``` from .user import User from .manager import Manager ``` 資料夾範例: ``` myfolder +-- main.py +-- subdir | +-- order.py | +-- product.py +-- __init__.py +-- user.py +-- manager.py ```

2019-01-21

Kali Linux 新增使用者帳號並授與 sudo 權限

markdown 在網路上查閱很多 Kali 的相關文章,大多都是直接使用 root 帳號,在使用 Linux 時通常會建議不要直接使用 root 帳號進行一般事務的管理操作。所以查了如何在 kali 加入新的使用者帳號,操作指令可以參考 Degain 或是 Ubuntu 的文章。 以下 username 都要代換為要新增的帳號 # 新增帳號 1. 開啟 Terminal ,使用 Ctrl+Alt+T,或是點擊左側的 Terminal 圖示,並登入 root 帳號 2. 加入新使用者帳號: ``` useradd -m username ``` -m 建立帳號的 home 目錄,預設路徑是 /home/username 3. 建立帳號的密碼: ``` passwd username ``` 4. 將帳號加到 sudo 群組,帳號才能使用 sudo 命令安裝程式: ``` usermod -a -G sudo username ``` -a 加入 -G 指定要加入的群組名稱 5. 給帳號指定預設的 shell: ``` chsh -s /bin/bash username ``` -s 指定登入的 shell # 移除帳號 1. 將帳號從 sudo 群組移除: 方法1. 使用 deluser: ``` sudo deluser username sudo ``` 方法2. 使用 gpasswd: ``` sudo gpasswd -d username sudo ``` 2. 將帳號從系統移除: ``` sudo userdel -r username ``` -r 移除帳號的 home 目錄和郵件 # 參考: * [Adding a new user in Kali Linux](https://www.linkedin.com/pulse/20140502074357-79939846-adding-a-new-user-in-kali-linux)

在 Kali Linux 安裝 Visual Studio Code

markdown # Kali 安裝 Visual Studio Code 因為 Kali 是以 Debian 為基地的發佈版,所以參考 Debian 或是 Ubuntu 的安裝方式。 ``` ::decode # Download the Microsoft GPG key, and convert it from OpenPGP ASCII # armor format to GnuPG format curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg # Move the file into your apt trusted keys directory (requires root) mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg # Add the VS Code Repository echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list # Update and install Visual Studio Code apt update && apt install code ``` # 參考 1. [Visual Studio Code on Linux](https://code.visualstudio.com/docs/setup/linux)