Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

229b1596ce57cd0935a2bacd410d87a0?s=47 adr
March 18, 2017

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

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

229b1596ce57cd0935a2bacd410d87a0?s=128

adr

March 18, 2017
Tweet

More Decks by adr

Other Decks in Technology

Transcript

  1. Tips for Building Third-Party School Service 開發學校雲端服務的奇技淫巧 aaaddress1@gmail.com

  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. Sorry, Node.js 要攻佔天下惹

  4. None
  5. 例如說本來我標題叫做奇淫技巧

  6. 什麼 CoC 原則的啦 什麼不該說的啦 都忘惹吧 O__Q

  7. murmur

  8. None
  9. 聲控表情

  10. 身為⼀個靠北⼯程師....

  11. None
  12. None
  13. None
  14. 各種奇技淫巧

  15. 當然以上都是屁話 只是合理化 「想要記錄所有同學密碼」 的需求

  16. HTTP 網⾴流量分析

  17. HTTP 網⾴流量分析 你的⽬目標?

  18. User Application Browser Mobile Apps HTTP 網⾴流量分析

  19. User Application Browser Mobile Apps 今天談論的主軸是瀏覽器 HTTP 網⾴流量分析

  20. Browser HTTP 網⾴流量分析 瀏覽器 瀏覽器的作⽤用⼀一般來來說: 1. 跟伺服器取得網⾴頁原始碼 2. 分析原始碼,建立出物件樹 3.

    物件佈局位置分析 4. 將每⼀一個物件樹的物件渲染顯⽰示在⾴頁 ⾯面上 5. 主流瀏覽器現在⼀一般都⾃自帶有流量量分 析⼯工具 e.g. Chrome, Firefox, Safari
  21. Browser 分析⼿手段 1. 閱讀網⾴頁原始碼(靜態) 2. 監聽網路路流量量,分析 Cookie、Header、Body …等(動態分析) HTTP 網⾴流量分析

    瀏覽器
  22. HTTP 網⾴流量分析 瀏覽器(靜態)

  23. Browser HTTP Traffic Analytics Browser (Static)

  24. HTTP 網⾴流量分析 瀏覽器(靜態)

  25. HTTP 網⾴流量分析 瀏覽器(靜態)

  26. HTTP 網⾴流量分析 瀏覽器(動態)

  27. None
  28. HTTP 網⾴流量分析 瀏覽器(動態)

  29. HTTP 網⾴流量分析 瀏覽器(動態)

  30. 1. 學校網⾴寫得太美我不敢看 2. 不是很通熟網⾴怎麼撰寫的

  31. None
  32. None
  33. None
  34. HTTP 網⾴流量分析 瀏覽器(動態)

  35. HTTP 網⾴流量分析 瀏覽器(動態)

  36. ⼀般第三⽅服務 BOT (應⽤程式)

  37. ⼀般第三⽅服務 BOT Application 模擬⼀一般使⽤用者的瀏覽器⾏行行為 去對伺服器收發 POST/GET 要求

  38. Application School Server POST /Login HTTP/1.1
 usr=adr&pass=handsome HTTP/1.1 200 OK

    Set-Cookie: gg=ininder; … ⼀般第三⽅服務 BOT
  39. 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
  40. 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
  41. 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
  42. Application School Server 請求 回應 Cookie: gg=ininder; ⼀般第三⽅服務 BOT

  43. Application School Server Cookie: gg=ininder; ⼀般第三⽅服務 BOT 請求 回應

  44. None
  45. Android Windows iOS

  46. Android Windows iOS App.java App.cpp App.swift

  47. None
  48. 如果我們能把這樣功能的機器⼈人寫成 雲端服務,我們就可以更更多時間去陪 女朋友惹(不對,我沒有女朋友...)

  49. 建⽴⼀個 第三⽅雲端服務

  50. 建⽴⼀個第三⽅服務 Application (User Side) School Server Cookie: gg=ininder; 請求 回應

  51. Application User Side School Server 請求 回應 Cookie: gg=ininder; 回應

    請求 Cookie: gg=ininder; 建⽴⼀個第三⽅服務
  52. 透過 Node.js + Express 建⽴服務

  53. None
  54. None
  55. 建⽴ 雲端服務 Application User Side Cookie: gg=ininder; 回應 請求

  56. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com girls=will&love=it

  57. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Header

  58. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Query

  59. HTTP Basic POST /?act=InInDer HTTP/1.1 HOST: big.gg.com adr=have&cat=dog Body (POST)

  60. None
  61. None
  62. Node.js + Request 模擬使⽤者瀏覽器⾏為

  63. None
  64. None
  65. BOT ⾏為 School Server 請求 回應 Cookie: gg=ininder;

  66. None
  67. 傳遞 使⽤者的連線身份

  68. 連線身份資訊保存 由單⼀應⽤程式記憶 Application (User Side) School Server Cookie: gg=ininder; 請求

    回應
  69. 變成針對不同使⽤者須使⽤不同的 連線身份去請求學校伺服器 Application School Server 請求 回應 Cookie: gg=ininder; 回應

    請求 Cookie: gg=ininder;
  70. ⽅法⼀ 後端使⽤ Session 的⽅式 記憶使⽤者的身份資訊

  71. 雲端服務架構 Application School Server 請求 回應 Cookie: gg=ininder; 回應 請求

    Cookie: gg=ininder;
  72. 雲端服務架構 Application School Server 請求 回應 Cookie: key=9487; 回應 請求

    Cookie: gg=SESSION[9487];
  73. SESSION 會把你所有需要的資料 保存在 RAM 裡⾯面 ⼀一旦同時連線⼈人數過多、 來來不及釋放、 忘記釋放 然後就...

  74. SESSION 會把你所有需要的資料 保存在 RAM 裡⾯面 ⼀一旦同時連線⼈人數過多、 來來不及釋放、 忘記釋放 然後就... HTTP

    Status 500 爆炸啦
  75. ⽅法⼆ 使⽤者登入後把身份資訊存回 使⽤者瀏覽器的 Cookie 中

  76. ⽅法⼆ 需要時再從使⽤者 Cookie 中領回 身份資訊並以此向學校伺服器請求

  77. 將登入成功的身份資訊 保存入使⽤者端的 Cookie 中

  78. 從使⽤者瀏覽器取出上⼀次身份資訊

  79. 從網⾴原始碼 取出關鍵資訊

  80. 從網⾴原始碼中取出關鍵資訊 1. JS ⽂文字處理理函數: substr, split, charAt, slice, … 2.

    正規表達法: ^123([\d]+)$ 3. Cheerio.js
  81. JS ⽂字處理函數 var Str = ‘<title>Hello world</title>’ > Str =

    Str.slice(Str.indexOf('>') + 1) > Str = Str.slice(0, Str.indexOf(‘<')) > Str.split(' ')[1] 'world'
  82. 正規表達法 var Str = ‘<title>Hello world</title>’ > Str.match(/<title>[^\x20]+([^<]+)/)[1] ' world'

  83. Cheerio.js var Str = ‘<title>Hello world</title>’ > Str = require(‘cheerio’).load(Str)('title').text()

    > Str.split(‘\x20')[1] 'world'
  84. aaaddress1/m00d1e.js

  85. 學校電算中⼼ 常玩的檢測機制

  86. 請求 Header 分析

  87. 表單中按鈕的⽂字

  88. 表單中按鈕的⽂字

  89. 封包請求時間

  90. CAPTCHA

  91. 教育部青年發展協署

  92. 教育部青年發展協署

  93. None
  94. CAPTCHA

  95. 商⽤驗證碼辨識套件

  96. 30cm.tw/?p=512

  97. None
  98. CAPTCHA

  99. CAPTCHA

  100. CAPTCHA

  101. CAPTCHA

  102. CAPTCHA

  103. CAPTCHA

  104. CAPTCHA

  105. CAPTCHA

  106. aaaddress1/easyChptchaOCR

  107. 當然,還有更智障的⽅法

  108. 當然,還有更智障的⽅法

  109. 當然,還有更智障的⽅法 ✖ ✖ ✖

  110. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖

  111. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖ ✖ ✖

  112. 當然,還有更智障的⽅法 ✖ ✖ ✖ ✖ ✖ ✖ ✖ ✖

  113. 感謝被⼤同⼤學退學的丹尼同學 提供如此寶貴的建議

  114. None
  115. 奇技淫巧(⼀) 跨域名登入Moodle

  116. Browser User Side School Server 請求 回應 Cookie: gg=ininder; 回應

    請求 Cookie: gg=ininder; 第三⽅方服務
  117. Browser User Side School Server 請求 Cookie: gg=ininder; 請求 Cookie:

    gg=ininder; 第三⽅方服務
  118. Browser User Side School Server 請求 Cookie: gg=ininder; 第三⽅方服務 Cookie:

    gg=ininder; Cross-site request forgery
  119. Content Security Policy (CSP)

  120. 沒有任何解決辦法? 有ㄛ蒸蚌!

  121. None
  122. isu.30cm.tw/isuMoodle

  123. isu.30cm.tw/isuMoodle

  124. Cross Domain Login Moodle

  125. Browser User Side School Server Cookie: gg=ininder; 第三⽅方服務 回應

  126. Browser User Side Cookie: gg=ininder; 第三⽅方服務 回應 在使⽤用者⾴頁⾯面上建立起⼀一個 iframe 在內部寫入

    moodle 登入畫⾯面的帳號密碼欄欄位 最後以 Javascript 模擬點擊登入
  127. IFRAME User Side Moodle 請求 USERNAME = usr & PASSWORD

    = pass
  128. IFRAME User Side Moodle 回應 Cookie: gg=ininder;

  129. Browser User Side Moodle 回應 Cookie: gg=ininder;

  130. Browser User Side Moodle 請求 Cookie: gg=ininder; 回應

  131. github.com/aaaddress1/isuMaster-NodeJS

  132. 奇技淫巧(⼆) 無痕模式下記憶帳密

  133. github.com/Valve/fingerprintjs

  134. None
  135. None
  136. None
  137. None
  138. github.com/aaaddress1/isuMaster-NodeJS

  139. 莫風徵伴侶

  140. QA aaaddress1@gmail.com