Sometimes You Find Bugs, Sometimes Bugs Find You by Jasmin Landry | Bug Bounty Village, DEF CON 33
三句話摘要
Bug bounty獵人分享的意外發現:從幸運遭遇到系統配置錯誤的六個實戰案例 Email是被長期忽視的payload注入點,應用驗證後常不重新檢查,搭配無差別嘗試策略與持續的技術學習,能發現系統實現中的意外漏洞。 演講分為三類漏洞發現模式,展示bug bounty中的實際情況。幸運類bug透過無差別payload嘗試(spray and pray)與工具輔助意外發現,例如Quick Look CSV利用了16年前的MacOS插件;WTF類bug涉及系統配置意外與複雜技術鏈,如Ansible SSTI通過email註冊欄位的template injection執行root命令;LOL類bug則因防禦機制實現不當,如WAF過濾導致密碼截斷為單字符。Email是關鍵攻擊面:應用在email驗證後多不重新驗證,且email常作為payload容器被系統自動處理。
重點整理
重點- 1
演講分為三類漏洞發現模式,展示bug bounty中的實際情況。幸運類bug透過無差別payload嘗試(spray and pray)與工具輔助意外發現,例如Quick Look CSV利用了16年前的MacOS插件;WTF類bug涉及系統配置意外與複雜技術鏈,如Ansible SSTI通過email註冊欄位的template injection執行root命令;LOL類bug則因防禦機制實現不當,如WAF過濾導致密碼截斷為單字符。Email是關鍵攻擊面:應用在email驗證後多不重新驗證,且email常作為payload容器被系統自動處理。
實用技巧與重點
乾貨- 工具與技術名稱:
- Access Hunter(Burp擴展):捕獲URL、Cookies、截圖
- PHP My Admin
- Ansible Playbooks(JINJA模板引擎)
- Ansible lookup pipe plugin(執行系統命令的內置功能)
- 具體漏洞數據:
- Quick Look CSV — MacOS內置軟體,最後修改8年前,包含org IDs、account IDs、部分信用卡數據;評級P1且獲得獎金
- XSS through email — Rails應用,payload通過父親投訴郵件被執行;評級P1
- Email誤配置 — 被添加到內部分發列表,4-5封郵件/天,持續1個月,涉及dozen員工與PII信息
- Ansible SSTI — 通過{{payload}}觸發JINJA渲染,提取環境變數與playbook_dir,以root身份執行命令;初評P1後降為P2
- WAF過度過濾 — Fantasy sports應用,「I love <script>dogs」變成「I」,56個聯賽無密碼,可加入1000+聯賽
- Command injection — 2019年Pearl應用,backtick命令直接執行
- Email payload技巧:
- 受限字符:括號、逗號(可用\x編碼繞過)
- 變更email後應用多不重新驗證
結論
結論“Email是被長期忽視的payload注入點,應用驗證後常不重新檢查,搭配無差別嘗試策略與持續的技術學習,能發現系統實現中的意外漏洞。”
完整解析
詳細Jasmine是全職bug bounty獵人,擁有12年IT與網絡安全經驗,曾任NASDAQ信息安全高級總監。本次演講分享六個實戰案例,重點並非複雜的利用鏈,而是那些出乎意料卻真實存在的漏洞。
第一個漏洞出現在雲端合規檢測應用上。Jasmine在常規測試無果後,採用「spray and pray」策略——無差別地在各處注入payload。Access Hunter工具捕獲的URL包含「X-Apple-QLID」字樣,截圖顯示這實際是個CSV文件,裡面有組織ID、賬戶ID與部分信用卡資料。她進一步發現「QL」代表QuickLook——MacOS文件預覽功能,而Quick Look CSV是個16年前開發、8年前最後修改的MacOS插件。本地測試確認漏洞存在。公司評為P1並給予獎金,因為她成功訪問客戶帳戶數據,涉及PCI合規問題。有趣的是,儘管她在該文件中注入了許多payload,卻只有這一個被發現,這啟發她後來更精確地標識payload。
第二個案例同樣始於「spray and pray」。Rails應用中的XSS payload被注入了內部郵件系統——觸發點是某人提交的父親投訴郵件。該公司最終給予賞金。有趣的是,該公司員工後來在Twitter上聯繫她表示她「毀了他的一天」,但在得知她從事bug bounty工作後,反而介紹了他自己的安全相關工作,兩人最後成為朋友。
第三個漏洞發生在生活黑客大賽的應用上。該應用需要員工憑證,Jasmine嘗試了各種認證繞過方法都失敗。一週後收到郵件,發現自己被意外添加到內部分發列表,該列表用於發送新用戶訪問請求。她因此看到dozen名員工的信息與PII(包括地址),並可能有權批准/拒絕訪問。漏洞持續約一個月,期間每天收4-5封郵件。
第四個案例涉及WordPress自動化部署應用。Jasmine在email字段注入{{payload}},發現被渲染成「49」,說明後端在評估模板語法。經長時間研究與向公司詢問後,發現使用的是Ansible——基於JINJA模板引擎的配置管理工具。她查閱Ansible文檔,發現playbook_dir保留變量,嘗試注入email字段成功提取該目錄。進一步利用Ansible內置的pipe lookup plugin執行任意系統命令,最終發現應用以root身份運行。儘管初評P1,後來被降為P2。關鍵是email欄位在註冊時需要通過驗證,但改變email時應用未重新檢查,且不允許括號和逗號(可用\x編碼繞過)。
第五個案例來自fantasy sports應用。WAF對XSS過度防御,會完全去除特定字符,導致密碼被截斷。例如包含<script>的密碼會完全消失。邀請郵件以明文發送密碼,若密碼以被過濾字符開頭,郵件裡根本沒有密碼。Jasmine只需暴力破解前兩個字符就加入了1000多個聯賽,其中56個完全無密碼。
最後一個案例在2019年用Pearl構建的自助密碼重置應用中,ID欄位的backtick命令直接執行,輸出在響應中顯示。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。


