SlideShare a Scribd company logo
Tips
for
Building
Third-Party School Service
開發學校雲端服務的奇技淫巧
aaaddress1@gmail.com
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
Sorry, Node.js 要攻佔天下惹
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
例如說本來我標題叫做奇淫技巧
什麼 CoC 原則的啦
什麼不該說的啦
都忘惹吧 O__Q
murmur
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
聲控表情
身為⼀個靠北⼯程師....
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
各種奇技淫巧
當然以上都是屁話
只是合理化
「想要記錄所有同學密碼」
的需求
HTTP 網⾴流量分析
HTTP 網⾴流量分析
你的⽬目標?
User Application Browser Mobile Apps
HTTP 網⾴流量分析
User Application Browser Mobile Apps
今天談論的主軸是瀏覽器
HTTP 網⾴流量分析
Browser
HTTP 網⾴流量分析
瀏覽器
瀏覽器的作⽤用⼀一般來來說:
1. 跟伺服器取得網⾴頁原始碼
2. 分析原始碼,建立出物件樹
3. 物件佈局位置分析
4. 將每⼀一個物件樹的物件渲染顯⽰示在⾴頁
⾯面上
5. 主流瀏覽器現在⼀一般都⾃自帶有流量量分
析⼯工具 e.g. Chrome, Firefox, Safari
Browser
分析⼿手段
1. 閱讀網⾴頁原始碼(靜態)
2. 監聽網路路流量量,分析
Cookie、Header、Body
…等(動態分析)
HTTP 網⾴流量分析
瀏覽器
HTTP 網⾴流量分析
瀏覽器(靜態)
Browser
HTTP Traffic Analytics
Browser (Static)
HTTP 網⾴流量分析
瀏覽器(靜態)
HTTP 網⾴流量分析
瀏覽器(靜態)
HTTP 網⾴流量分析
瀏覽器(動態)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
HTTP 網⾴流量分析
瀏覽器(動態)
HTTP 網⾴流量分析
瀏覽器(動態)
1. 學校網⾴寫得太美我不敢看
2. 不是很通熟網⾴怎麼撰寫的
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
HTTP 網⾴流量分析
瀏覽器(動態)
HTTP 網⾴流量分析
瀏覽器(動態)
⼀般第三⽅服務 BOT
(應⽤程式)
⼀般第三⽅服務 BOT
Application
模擬⼀一般使⽤用者的瀏覽器⾏行行為
去對伺服器收發 POST/GET
要求
Application School Server
POST /Login HTTP/1.1

usr=adr&pass=handsome
HTTP/1.1 200 OK
Set-Cookie: gg=ininder;
…
⼀般第三⽅服務 BOT
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
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
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
Application School Server
請求
回應
Cookie: gg=ininder;
⼀般第三⽅服務 BOT
Application School Server
Cookie: gg=ininder;
⼀般第三⽅服務 BOT
請求
回應
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
Android Windows iOS
Android Windows iOS
App.java App.cpp App.swift
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
如果我們能把這樣功能的機器⼈人寫成
雲端服務,我們就可以更更多時間去陪
女朋友惹(不對,我沒有女朋友...)
建⽴⼀個
第三⽅雲端服務
建⽴⼀個第三⽅服務
Application
(User Side)
School Server
Cookie: gg=ininder;
請求
回應
Application
User Side
School Server
請求
回應
Cookie: gg=ininder;
回應
請求
Cookie: gg=ininder;
建⽴⼀個第三⽅服務
透過
Node.js + Express
建⽴服務
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
建⽴
雲端服務
Application
User Side
Cookie: gg=ininder;
回應
請求
HTTP Basic
POST /?act=InInDer HTTP/1.1
HOST: big.gg.com
girls=will&love=it
HTTP Basic
POST /?act=InInDer HTTP/1.1
HOST: big.gg.com
adr=have&cat=dog
Header
HTTP Basic
POST /?act=InInDer HTTP/1.1
HOST: big.gg.com
adr=have&cat=dog
Query
HTTP Basic
POST /?act=InInDer HTTP/1.1
HOST: big.gg.com
adr=have&cat=dog Body (POST)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
Node.js + Request
模擬使⽤者瀏覽器⾏為
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
BOT ⾏為
School Server
請求
回應
Cookie: gg=ininder;
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
傳遞
使⽤者的連線身份
連線身份資訊保存
由單⼀應⽤程式記憶
Application
(User Side)
School Server
Cookie: gg=ininder;
請求
回應
變成針對不同使⽤者須使⽤不同的
連線身份去請求學校伺服器
Application School Server
請求
回應
Cookie: gg=ininder;
回應
請求
Cookie: gg=ininder;
⽅法⼀
後端使⽤ Session 的⽅式
記憶使⽤者的身份資訊
雲端服務架構
Application School Server
請求
回應
Cookie: gg=ininder;
回應
請求
Cookie: gg=ininder;
雲端服務架構
Application School Server
請求
回應
Cookie: key=9487;
回應
請求
Cookie: gg=SESSION[9487];
SESSION 會把你所有需要的資料
保存在 RAM 裡⾯面
⼀一旦同時連線⼈人數過多、
來來不及釋放、
忘記釋放
然後就...
SESSION 會把你所有需要的資料
保存在 RAM 裡⾯面
⼀一旦同時連線⼈人數過多、
來來不及釋放、
忘記釋放
然後就...
HTTP Status 500
爆炸啦
⽅法⼆
使⽤者登入後把身份資訊存回
使⽤者瀏覽器的 Cookie 中
⽅法⼆
需要時再從使⽤者 Cookie 中領回
身份資訊並以此向學校伺服器請求
將登入成功的身份資訊
保存入使⽤者端的 Cookie 中
從使⽤者瀏覽器取出上⼀次身份資訊
從網⾴原始碼
取出關鍵資訊
從網⾴原始碼中取出關鍵資訊
1. JS ⽂文字處理理函數: substr, split, charAt, slice, …
2. 正規表達法: ^123([d]+)$
3. Cheerio.js
JS ⽂字處理函數
var Str = ‘<title>Hello world</title>’
> Str = Str.slice(Str.indexOf('>') + 1)
> Str = Str.slice(0, Str.indexOf(‘<'))
> Str.split(' ')[1]
'world'
正規表達法
var Str = ‘<title>Hello world</title>’
> Str.match(/<title>[^x20]+([^<]+)/)[1]
' world'
Cheerio.js
var Str = ‘<title>Hello world</title>’
> Str = require(‘cheerio’).load(Str)('title').text()
> Str.split(‘x20')[1]
'world'
aaaddress1/m00d1e.js
學校電算中⼼
常玩的檢測機制
請求 Header 分析
表單中按鈕的⽂字
表單中按鈕的⽂字
封包請求時間
CAPTCHA
教育部青年發展協署
教育部青年發展協署
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
CAPTCHA
商⽤驗證碼辨識套件
30cm.tw/?p=512
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
CAPTCHA
CAPTCHA
CAPTCHA
CAPTCHA
CAPTCHA
CAPTCHA
CAPTCHA
CAPTCHA
aaaddress1/easyChptchaOCR
當然,還有更智障的⽅法
當然,還有更智障的⽅法
當然,還有更智障的⽅法
✖
✖
✖
當然,還有更智障的⽅法
✖
✖
✖
✖
✖
當然,還有更智障的⽅法
✖
✖
✖
✖
✖
✖
✖
當然,還有更智障的⽅法
✖
✖
✖
✖
✖
✖
✖ ✖
感謝被⼤同⼤學退學的丹尼同學
提供如此寶貴的建議
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
奇技淫巧(⼀)
跨域名登入Moodle
Browser
User Side
School Server
請求
回應
Cookie: gg=ininder;
回應
請求
Cookie: gg=ininder;
第三⽅方服務
Browser
User Side
School Server
請求
Cookie: gg=ininder;
請求
Cookie: gg=ininder;
第三⽅方服務
Browser
User Side
School Server
請求
Cookie: gg=ininder;
第三⽅方服務
Cookie: gg=ininder;
Cross-site
request
forgery
Content Security Policy
(CSP)
沒有任何解決辦法?
有ㄛ蒸蚌!
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
isu.30cm.tw/isuMoodle
isu.30cm.tw/isuMoodle
Cross Domain Login Moodle
Browser
User Side
School Server
Cookie: gg=ininder;
第三⽅方服務
回應
Browser
User Side
Cookie: gg=ininder;
第三⽅方服務
回應
在使⽤用者⾴頁⾯面上建立起⼀一個 iframe
在內部寫入 moodle 登入畫⾯面的帳號密碼欄欄位
最後以 Javascript 模擬點擊登入
IFRAME
User Side
Moodle
請求
USERNAME = usr & PASSWORD = pass
IFRAME
User Side
Moodle
回應
Cookie: gg=ininder;
Browser
User Side
Moodle
回應
Cookie: gg=ininder;
Browser
User Side
Moodle
請求
Cookie: gg=ininder;
回應
github.com/aaaddress1/isuMaster-NodeJS
奇技淫巧(⼆)
無痕模式下記憶帳密
github.com/Valve/fingerprintjs
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
開發學校雲端服務的奇技淫巧(Tips for Building  Third-Party School Service)
github.com/aaaddress1/isuMaster-NodeJS
莫風徵伴侶
QA
aaaddress1@gmail.com

More Related Content

PPT
Grails敏捷项目开发
PDF
Proguard by android studio
PDF
2010 08-14 web-sitei18n
PPTX
猴子也能懂的Node.js
ODP
五行完成網頁多國語系
PPS
基于Android ndk的软件开发简介 放映
PPTX
Getting started with test automation
PDF
MakerBoard: MT7688 Emulator
Grails敏捷项目开发
Proguard by android studio
2010 08-14 web-sitei18n
猴子也能懂的Node.js
五行完成網頁多國語系
基于Android ndk的软件开发简介 放映
Getting started with test automation
MakerBoard: MT7688 Emulator

Viewers also liked (20)

PDF
TDOH 南區 WorkShop 2016 Reversing on Windows
ODP
第一次做光劍就上手
PDF
防毒擋不住?勒索病毒猖獗與實作
PPTX
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
PDF
Cybersecurity and Internet Governance
PDF
NTUSTxTDOH - Pwn基礎 2015/12/27
PDF
SITCON2016, 防毒擋不住?勒索軟體猖獗與實作
PDF
Python으로 채팅 구현하기
PPT
Презентація:Додавання і віднімання дробів з однаковими знаменниками
PPTX
Sumanleo mushroom
PPTX
NESTLE AFTER MAGGI FIASCO ( IN KOCHI)
PDF
台科逆向簡報
PDF
How to Become a Thought Leader in Your Niche
PPTX
PPTX
Singarayakonda - Analysis
PDF
逆向工程入門
PDF
新手無痛入門Apk逆向
PPT
Презентація:Задачі про природу
PPTX
Italia y Grecia
PDF
Build Dynamic DNS server from scratch in C (Part1)
TDOH 南區 WorkShop 2016 Reversing on Windows
第一次做光劍就上手
防毒擋不住?勒索病毒猖獗與實作
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
Cybersecurity and Internet Governance
NTUSTxTDOH - Pwn基礎 2015/12/27
SITCON2016, 防毒擋不住?勒索軟體猖獗與實作
Python으로 채팅 구현하기
Презентація:Додавання і віднімання дробів з однаковими знаменниками
Sumanleo mushroom
NESTLE AFTER MAGGI FIASCO ( IN KOCHI)
台科逆向簡報
How to Become a Thought Leader in Your Niche
Singarayakonda - Analysis
逆向工程入門
新手無痛入門Apk逆向
Презентація:Задачі про природу
Italia y Grecia
Build Dynamic DNS server from scratch in C (Part1)
Ad

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