2009/01/30

Write OS: 使用開源軟體-自己動手寫作業系統

今天終於把[使用開源軟體-自己動手寫作業系統]看完,我一直都對寫作業系統很有興趣,但是一直遲遲找不到一個好的開始,因此很感謝[楊文博]寫得這本免費電子書, 讓所有有心專研這方面的人能有個完整的學習, 雖然現在這本書還沒完成,但讀完後還是授益匪淺。

目前這本書完成了3章,首先第一章的計算機啟動介紹了計算機啟動方式,基本硬體簡介及開發OS時所需使用的開源軟體。

第2章則由OS版的Hello World開始介紹(example 2-1),並進一步將Hello World放至FAT12的File system裡以擺脫512Bytes (Sector size)的限制 (example 2-2)。

第3章則由real mode進入了protected mode,本章第一個例子 (example 3-1) 便說明了GDT (Global Descriptor Table),Segment Selector 的重要觀念, 並且使用了 far jump 跳到 protected mode。接著 example 3-2 則代入了LDT (Local Descriptor Table),LDT的存在主要是為了 multi-task 環境所設計,不同的 task 擁有自己的記憶體區段。在Descriptor裡,為了使OS更加安全,descriptor包含了權限的設計,Intel設計了ring 0(高)到ring 3(低)來加以區隔 user/kernel permission,為了使權限平和的轉移,便設計了call gate來輔助,call gate說穿了只是一種特殊的descriptor,example 3-3 展示了如何使用 call gate 由一 segment 跳至另一 segment。在 example 3-3尚未展示真正的權限轉移,example 3-4做了這方面的修正,由高權限跳至低權限。example 3-5則由低權限跳至高權限,並且一起做了Task State切換(TSS: Task State Segment)。Example 3-6開始使用了paging的技術,Example 3-7則對Page Directory Size根對計憶體大小作一最佳化,Example 3-8則真的了展示Virtual memory的作用。


最後,對於有心要寫OS的人,Intel的這本書[Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide]的前幾章有些章節是必讀的,有心的人可以自己下載回來看看,想要紙本的人,也可以跟他們要。

2008/07/08

[Wargame]ccu Middle ~ Mid04

Middle
Given:
  1. 一個看不到目錄內容的目錄
  2. Nothing ...
Thinking:
  1. 猜吧...
  2. shell的執行檔名稱 ...

Mid01
Given:
  1. 'less' with setuid
Thinking:
  1. how to execute a external program by that program
  2. man less!!

Mid02
太簡單


Mid03
Given:
  1. 一堆指令
  2. A program with setuid attribute is at ~mid04/bin/myshell
Thinking:
  1. Restricted-shell. How to escape?? vim??

Mid04
Given:
  1. A backdoor at??
  2. The password of backdoor
Thinking:
  1. 登入後門後,建一個可以讓mid04轉到mid05的setuid程式。

2008/07/07

[Wargame]ccu Basic 6~9

Basic 6
Given:
  1. A file but where?
  2. DES code
Thinking:
  1. scanning port by nmap
  2. get master.passwd
  3. crack the password by John the ripper

Basic 7
Given:
  1. The password is inside the binary program
Thinking:
  1. How to get the strings inside the program (strings)


Basic 8
Given:
  1. A program with setuid and the source code
Thinking:
  1. 可以在source code內找到它運用了getuid這個function,而此function是由某個library提供的。
  2. 是否可以用某些方式讓該程式不要去讀取原本的library,而去讀取我們自己的library
  3. LD_PRELOAD ??


Basic 9
Given:
  1. A program with buffer overflow vulnerability
Thinking:
  1. 有一變數在複製資料進去時,並沒有做bound checking,也因此我們可利用寫超過的資料去覆蓋程式中其他變數的值

2008/07/06

[Wargame]ccu Basic 0~5

台灣冒險傢俱樂部共有20關,分別從Basic 0~9,Mid00~Mid09

Basic 0
Given:
  1. A hostname
  2. Password hint
    • 第1至第4個及第7個字元在密碼表裡
    • 第5,6,8個字元為任意字元
Thinking:
  1. 使用nmap去掃主機上的有開那些port,再telnet看看吧
  2. 任意字元是什麼意思,可以由shell來思考。

Basic 1
Given:
  1. A program with setuid
  2. The source code of the setuid program
Thinking:
  1. 看到該程式source code呼叫了system並且其參數不是使用絕對路徑,是否能改變系統找程式的路徑?
  2. 試試shell變數 path
Basic 2
Given:
  1. nslookup with setuid
Thinking:
  1. nslookup是否可執行外部程式,或是否有執行外部程式?help??
  2. PAGER及PATH環境變數

Basic 3
Given:
  1. A program with setuid
Thinking:
  1. system函式的參數直接由外部存取,Command injection?


Basic 4
Given:
  1. r-family指令, such as rsh, rcp...
Thinking:
  1. 發現.rhost將權限給expose出來了

Basic 5
這關太智障,猜一下就出來了。



待續...

2008/07/05

Wargame

Wargame為專為有心成為駭客的玩家所設計的遊戲,當初我會接觸這類型的遊戲主要是因為學校的修課,那門課的期末project評分方式就是以你過了多少wargame,在那1~2個月裡,我過了一堆wargames並且將他們寫成了報告,從今天開始我會將這些報告整理出來,並且寫到這個部落格里讓大家參考解法,但為了保持wargame的挑戰性,答案我還是儘可能不會直接寫出來。

以下是wargame網站的列表(我只列出我有玩的, ps. 有些大陸的wargame十分智障,可以不去玩):
另外,有幾本書可以參考: