Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

開發學校雲端服務的奇技淫巧(Tips for Building Third-Party School Service)

4,238 views

Published on

想替自己學校開發雲端服務卻無從上手起嗎?議程教學如何在學校電算中心未開放任何 API 下實作出屬於自己的學校雲端服務。本議程將演示一個義守大學廣獲好評第三方熱門服務,並解釋如何實作同步學生當天課程、Moodle 課程、Moodle作業狀況,並且在前端即可實作跨域名繞過 CSP 瀏覽器安全限制替學校 Moodle 登入,議程末將釋出整份專案開源於 Github 上。
議程內容涉及外掛開發、資訊安全相關領域的技術內容、電算中心防外掛偵測點與應對技術。

Published in: Software
  • Be the first to comment

開發學校雲端服務的奇技淫巧(Tips for Building Third-Party School Service)

  1. 1. Tips for Building Third-Party School Service 開發學校雲端服務的奇技淫巧 aaaddress1@gmail.com
  2. 2. Ma Sheng-Hao (aaaddress1, aka adr) TDOHacker 資安社群核⼼心成員 Debug Guy Speaker ‣ TDOHConf 2016 議程組長 ‣ HITCON CMT 2015 ‣ SITCON 2016 ‣ HITCON CMT 2016 Lightning Talk ‣ 台灣科技⼤大學新型態資安實務課程 ‣ BSidesLV ‣ ICNC ‣ MC2015 ‣ 全國資安會議 C/C++, C#, VB, MASM, Python, Swift, Node.js, Java 專研於 Windows 上平台特性與程式弱點與逆向⼯工程分析 知名作品涉及楓之⾕谷外掛, 神魔之塔外掛, 義守管家, cuteRansomware, Adr'sFB
  3. 3. Sorry, Node.js 要攻佔天下惹
  4. 4. 例如說本來我標題叫做奇淫技巧
  5. 5. 什麼 CoC 原則的啦 什麼不該說的啦 都忘惹吧 O__Q
  6. 6. murmur
  7. 7. 聲控表情
  8. 8. 身為⼀個靠北⼯程師....
  9. 9. 各種奇技淫巧
  10. 10. 當然以上都是屁話 只是合理化 「想要記錄所有同學密碼」 的需求
  11. 11. HTTP 網⾴流量分析
  12. 12. HTTP 網⾴流量分析 你的⽬目標?
  13. 13. User Application Browser Mobile Apps HTTP 網⾴流量分析
  14. 14. User Application Browser Mobile Apps 今天談論的主軸是瀏覽器 HTTP 網⾴流量分析
  15. 15. Browser HTTP 網⾴流量分析 瀏覽器 瀏覽器的作⽤用⼀一般來來說: 1. 跟伺服器取得網⾴頁原始碼 2. 分析原始碼,建立出物件樹 3. 物件佈局位置分析 4. 將每⼀一個物件樹的物件渲染顯⽰示在⾴頁 ⾯面上 5. 主流瀏覽器現在⼀一般都⾃自帶有流量量分 析⼯工具 e.g. Chrome, Firefox, Safari
  16. 16. Browser 分析⼿手段 1. 閱讀網⾴頁原始碼(靜態) 2. 監聽網路路流量量,分析 Cookie、Header、Body …等(動態分析) HTTP 網⾴流量分析 瀏覽器
  17. 17. HTTP 網⾴流量分析 瀏覽器(靜態)
  18. 18. Browser HTTP Traffic Analytics Browser (Static)
  19. 19. HTTP 網⾴流量分析 瀏覽器(靜態)
  20. 20. HTTP 網⾴流量分析 瀏覽器(靜態)
  21. 21. HTTP 網⾴流量分析 瀏覽器(動態)
  22. 22. HTTP 網⾴流量分析 瀏覽器(動態)
  23. 23. HTTP 網⾴流量分析 瀏覽器(動態)
  24. 24. 1. 學校網⾴寫得太美我不敢看 2. 不是很通熟網⾴怎麼撰寫的
  25. 25. HTTP 網⾴流量分析 瀏覽器(動態)
  26. 26. HTTP 網⾴流量分析 瀏覽器(動態)
  27. 27. ⼀般第三⽅服務 BOT (應⽤程式)
  28. 28. ⼀般第三⽅服務 BOT Application 模擬⼀一般使⽤用者的瀏覽器⾏行行為 去對伺服器收發 POST/GET 要求
  29. 29. Application School Server POST /Login HTTP/1.1
 usr=adr&pass=handsome HTTP/1.1 200 OK Set-Cookie: gg=ininder; … ⼀般第三⽅服務 BOT
  30. 30. Application School Server GET /helloWorld HTTP/1.1 Cookie: gg=ininder;
 HTTP/1.1 200 OK <p>hello world! adr<p> Cookie: gg=ininder; (⾝身份資訊) ⼀般第三⽅服務 BOT
  31. 31. Application School Server GET /helloWorld HTTP/1.1 Cookie: gg=ininder;
 HTTP/1.1 200 OK <p>hello world! adr<p> Cookie: gg=ininder; 收到伺服器回應的網⾴頁原始碼, 分析並更更新 UI 顯⽰示給使⽤用者 ⼀般第三⽅服務 BOT
  32. 32. Application School Server GET /timeTable HTTP/1.1 Cookie: gg=ininder;
 HTTP/1.1 200 OK <table><tr><td>english</td> … Cookie: gg=ininder; 收到伺服器回應課表原始碼, 分析課程內容並顯⽰示 ⼀般第三⽅服務 BOT
  33. 33. Application School Server 請求 回應 Cookie: gg=ininder; ⼀般第三⽅服務 BOT
  34. 34. Application School Server Cookie: gg=ininder; ⼀般第三⽅服務 BOT 請求 回應
  35. 35. Android Windows iOS
  36. 36. Android Windows iOS App.java App.cpp App.swift
  37. 37. 如果我們能把這樣功能的機器⼈人寫成 雲端服務,我們就可以更更多時間去陪 女朋友惹(不對,我沒有女朋友...)
  38. 38. 建⽴⼀個 第三⽅雲端服務
  39. 39. 建⽴⼀個第三⽅服務 Application (User Side) School Server Cookie: gg=ininder; 請求 回應
  40. 40. Application User Side School Server 請求 回應 Cookie: gg=ininder; 回應 請求 Cookie: gg=ininder; 建⽴⼀個第三⽅服務
  41. 41. 透過 Node.js + Express 建⽴服務
  42. 42. 建⽴ 雲端服務 Application User Side Cookie: gg=ininder; 回應 請求
  43. 43. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com girls=will&love=it
  44. 44. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Header
  45. 45. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Query
  46. 46. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Body (POST)
  47. 47. Node.js + Request 模擬使⽤者瀏覽器⾏為
  48. 48. BOT ⾏為 School Server 請求 回應 Cookie: gg=ininder;
  49. 49. 傳遞 使⽤者的連線身份
  50. 50. 連線身份資訊保存 由單⼀應⽤程式記憶 Application (User Side) School Server Cookie: gg=ininder; 請求 回應
  51. 51. 變成針對不同使⽤者須使⽤不同的 連線身份去請求學校伺服器 Application School Server 請求 回應 Cookie: gg=ininder; 回應 請求 Cookie: gg=ininder;
  52. 52. ⽅法⼀ 後端使⽤ Session 的⽅式 記憶使⽤者的身份資訊
  53. 53. 雲端服務架構 Application School Server 請求 回應 Cookie: gg=ininder; 回應 請求 Cookie: gg=ininder;
  54. 54. 雲端服務架構 Application School Server 請求 回應 Cookie: key=9487; 回應 請求 Cookie: gg=SESSION[9487];
  55. 55. SESSION 會把你所有需要的資料 保存在 RAM 裡⾯面 ⼀一旦同時連線⼈人數過多、 來來不及釋放、 忘記釋放 然後就...
  56. 56. SESSION 會把你所有需要的資料 保存在 RAM 裡⾯面 ⼀一旦同時連線⼈人數過多、 來來不及釋放、 忘記釋放 然後就... HTTP Status 500 爆炸啦
  57. 57. ⽅法⼆ 使⽤者登入後把身份資訊存回 使⽤者瀏覽器的 Cookie 中
  58. 58. ⽅法⼆ 需要時再從使⽤者 Cookie 中領回 身份資訊並以此向學校伺服器請求
  59. 59. 將登入成功的身份資訊 保存入使⽤者端的 Cookie 中
  60. 60. 從使⽤者瀏覽器取出上⼀次身份資訊
  61. 61. 從網⾴原始碼 取出關鍵資訊
  62. 62. 從網⾴原始碼中取出關鍵資訊 1. JS ⽂文字處理理函數: substr, split, charAt, slice, … 2. 正規表達法: ^123([d]+)$ 3. Cheerio.js
  63. 63. JS ⽂字處理函數 var Str = ‘<title>Hello world</title>’ > Str = Str.slice(Str.indexOf('>') + 1) > Str = Str.slice(0, Str.indexOf(‘<')) > Str.split(' ')[1] 'world'
  64. 64. 正規表達法 var Str = ‘<title>Hello world</title>’ > Str.match(/<title>[^x20]+([^<]+)/)[1] ' world'
  65. 65. Cheerio.js var Str = ‘<title>Hello world</title>’ > Str = require(‘cheerio’).load(Str)('title').text() > Str.split(‘x20')[1] 'world'
  66. 66. aaaddress1/m00d1e.js
  67. 67. 學校電算中⼼ 常玩的檢測機制
  68. 68. 請求 Header 分析
  69. 69. 表單中按鈕的⽂字
  70. 70. 表單中按鈕的⽂字
  71. 71. 封包請求時間
  72. 72. CAPTCHA
  73. 73. 教育部青年發展協署
  74. 74. 教育部青年發展協署
  75. 75. CAPTCHA
  76. 76. 商⽤驗證碼辨識套件
  77. 77. 30cm.tw/?p=512
  78. 78. CAPTCHA
  79. 79. CAPTCHA
  80. 80. CAPTCHA
  81. 81. CAPTCHA
  82. 82. CAPTCHA
  83. 83. CAPTCHA
  84. 84. CAPTCHA
  85. 85. CAPTCHA
  86. 86. aaaddress1/easyChptchaOCR
  87. 87. 當然,還有更智障的⽅法
  88. 88. 當然,還有更智障的⽅法
  89. 89. 當然,還有更智障的⽅法 ✖ ✖ ✖
  90. 90. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖
  91. 91. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖ ✖ ✖
  92. 92. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖ ✖ ✖ ✖
  93. 93. 感謝被⼤同⼤學退學的丹尼同學 提供如此寶貴的建議
  94. 94. 奇技淫巧(⼀) 跨域名登入Moodle
  95. 95. Browser User Side School Server 請求 回應 Cookie: gg=ininder; 回應 請求 Cookie: gg=ininder; 第三⽅方服務
  96. 96. Browser User Side School Server 請求 Cookie: gg=ininder; 請求 Cookie: gg=ininder; 第三⽅方服務
  97. 97. Browser User Side School Server 請求 Cookie: gg=ininder; 第三⽅方服務 Cookie: gg=ininder; Cross-site request forgery
  98. 98. Content Security Policy (CSP)
  99. 99. 沒有任何解決辦法? 有ㄛ蒸蚌!
  100. 100. isu.30cm.tw/isuMoodle
  101. 101. isu.30cm.tw/isuMoodle
  102. 102. Cross Domain Login Moodle
  103. 103. Browser User Side School Server Cookie: gg=ininder; 第三⽅方服務 回應
  104. 104. Browser User Side Cookie: gg=ininder; 第三⽅方服務 回應 在使⽤用者⾴頁⾯面上建立起⼀一個 iframe 在內部寫入 moodle 登入畫⾯面的帳號密碼欄欄位 最後以 Javascript 模擬點擊登入
  105. 105. IFRAME User Side Moodle 請求 USERNAME = usr & PASSWORD = pass
  106. 106. IFRAME User Side Moodle 回應 Cookie: gg=ininder;
  107. 107. Browser User Side Moodle 回應 Cookie: gg=ininder;
  108. 108. Browser User Side Moodle 請求 Cookie: gg=ininder; 回應
  109. 109. github.com/aaaddress1/isuMaster-NodeJS
  110. 110. 奇技淫巧(⼆) 無痕模式下記憶帳密
  111. 111. github.com/Valve/fingerprintjs
  112. 112. github.com/aaaddress1/isuMaster-NodeJS
  113. 113. 莫風徵伴侶
  114. 114. QA aaaddress1@gmail.com

×