資訊安全基礎工作坊

Web Security 基礎講座

解題篇

cookieDecode

先看網頁

訊息

  • 試著去 Decode 這個頁面的某種東西
  • 頁面原始碼中沒有註解訊息,應該在Cookie裡?
  • 有個名稱為「key-xor-0xff-base64」的
  • 該 Cookie 內容為 "q5vPl7+clMyN"

思路

  • 一個字元經過 xor 0xff 之後,可能會變為不可視字元
    • 如 'a' (ASCII = 97) => 'a'^'\xff' = (ASCII = 158)
  • 不可視字元經過 base64 編碼後可正常顯示
    • ASCII = 158 ==(base64)==> "ng=="
  • 題目上很可能是先 xor 0xff 後再 base64 的結果

解題手法

  • 解 base64
    • bash: base64 -d
    • python: base64.b64decode
  • 解 xor
    • 特性:xor 加密後再 xor 一次即解密
    • python: ^

正解

#!/bin/python

import array
import base64

str = "q5vPl7+clMyN"

#先解 base64
str = base64.b64decode(str)

#再解 xor
str = array.array('B', str)
xor = array.array('B', '\xff')

for i in range(len(str)):
    str[i] ^= xor[0]

print(str.tostring())

進階思路

  • 如果 xor 的是個字串?
  • 如果 base64 encode 不止一次?

multiLang

先看網頁

在不看程式碼的前提下,以下假設:

  • 根據$_GET['lang'] 的值會去 Database 找語言檔
  • 根據$_GET['lang'] 的值去找 File based 語言檔
  • Redis? or whatever more

先來思路

  • 如果對方是 Database based?
    • 先 SQL Injection
  • 如果對方是 File based?
    • LFI
  • 因為 LFI 測試較容易,先測 LFI
    • 引入 不存在的檔案 試試?

?lang=index

Bingo!是用 include

而且路徑還寫在錯誤訊息(!123.jpg)

LFI 經典大法(誤)

  • php://filter/convert.base64-encode/resource=

進階思維

  • 如果有前綴(prefix)?
    • include 'lang/'.$page;
  • 如果有後綴?
    • include $page.'.php'; 

decode.txt

花惹發?!

為毛是顏文字

其實還滿可愛的

JS 現成混淆技法

  • JSFuck
  • aaencode

顏文字是後者

任意上傳弱點

私心最愛的弱點前三名

這種弱點特徵明顯

要有上傳的功能

廢話

特徵整理

  • 具有上傳功能
  • 具有存取上傳資料夾功能

這是 Feature

不是        Bug

原理

上傳檔案,然後執行

打完收工

上傳檔案類型

  • PHP => .php
  • JSP   => .jsp

一些奇技淫巧

  • CVE 2015-2348
  • 最長檔名截斷

CVE 2015-2348

優點

  • 影響範圍超大
    • Cent OS 7 epel-release 尚未修復
  • 功能應用廣泛
    • 只要有上傳的地方就可以試試
  • 利用難度不高
    • 只要會改封包即可
  • 危害系統甚鉅
    • 上傳任意可執行檔,很抖啊

實作法

上傳一個 hack.php[nullbyte].jpg

最長檔名截斷

這個跟檔案系統限制有關

著名範例

  • Ext4:256 bytes
  • NTFS:255 個 UTF-16 的字元

實作法

上傳一個 aaaa...aa.php.jpg

剛好算到把 .jpg 截掉

傳說中的 WebShell

傳說中的 一句話木馬

Web Shell

一句話木馬

  • 以上傳為主要攻擊方式
    • 其實不一定只能用上傳的
  • 通常提供完整的功能
    • 檔案管理
    • 資料庫管理
  • 檔案大,有時容易被發現
  • 可自己執行自己使用
  • 以上傳為主要攻擊方式
    • 其實不一定只能用上傳的
  • 通常只有一句執行命令
    • eval($_GET['cmd'])
  • 檔案小,甚至可以藏在既有功能中
  • 通常會配合工具做攻擊

感謝各位

資訊安全基礎工作坊 - WebSecurity(二)

By chivincent

資訊安全基礎工作坊 - WebSecurity(二)

  • 1,368