SITCON 2015 無法被定積分的中小學資安讀後感

SITCON 2015距離結束也有一段時間了,再把這個投影片翻出來,把裡面的一些訣竅試過之後,真的是發現了一些,不得了的東西,而且還是那種自己開漏洞,根本是拜託駭客來攻擊阿….

我們只要在Google搜尋上,打上: site: edu.tw filetype:sql, site: edu.tw filetype:csv以及 site:edu.tw filetype:xml,光是這樣就可以找到sql產生出來的備份檔,如果備份檔裡面有寫說明,說是使用phpMyAdmin所產生的,又多一個phpMyAdmin這種東西可以測試,另外csv檔還可以找到洩漏個資的檔案,身分證字號等等都輸出在瀏覽器上….。

之後我看完這篇之後,想到phpMyAdmin版本太舊有漏洞的風險,還發現還有架站用Appserv架之外,還把這個東西直接在網站上線,這真是太恐怖了,還有連Apache都沒有設定,整個目錄都被看光光….等到vulreport修好之後,該回報了,以下就來介紹幾個常見沒有做防護,而且有漏洞的風險的情形。

有directory traversal,Appserv架站上線,phpMyAdmin版本等風險,礙於洩漏,在這邊就不提供網址了,只講可以解決的方法。

directory traversal

等於讓人可以看到所有的檔案路徑,以及架站使用的作業系統,還有可以看到使用HTTP的port,可以讓人可以足跡偵查。解決的方式是可以使用Apache 的.htaccess做設定。

phpMyAdmin舊版本漏洞

phpMyAdmin是一個以PHP為基礎開發的MySQL圖形介面管理工具,好處是圖形管理方便,壞處是常常忘記更新版本,使用舊版本會導致有漏洞產生。此外也需要將MySQL權限設定好,以免phpMyAdmin以不用權限的方式開啟。

使用架站懶人包安裝

架站懶人包是在WINDOWS上大家會喜好架站的方式之一,好處是簡單,快速又方便,缺點是,若裡面的套件,(如phpMyAdmin沒更新的話),將會導致有風險存在。

另一個風險是,架站包萬一長時間未更新的話,將會有許多漏洞並無法做更新,像是在WINDOWS上的AppServ。這個非常的危險,必須要更新與避免使用此架站包架站。

結論

現今發生架站包AppServ與phpMyAdmin的漏洞是最多的,尤其是頻繁發生在學校,其中國高中小發生的比率最高,我認為是學校裡的資訊人員觀念不足,沒有加強外,還有重要的一點是,學的不精,加上學校還有課程需要備課,因此在這方面上會導致這樣的結果,如果要改善這樣的情形,除了學校舉辦相關課程加強訓練之外,剩下就是看老師有沒有時間與良心了……

延伸閱讀:Apache設定

 

Lubuntu架設LAMP server二三事(三)

先前的第一部分與第二部分介紹完Apache2的相關設定之後,在這第三部分將要簡短介紹,MySQL遇到一些錯誤,還有設定該如何解決。

參考資料: LAMP on Ubuntu 12.04 mysql password reset — Very Easy Method

  1. 開啟終端機,輸入指令
    mysql -u root -p

    ,如果這樣出現錯誤:

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    

    上面這兩個其錯誤而無法開啟資料庫時,這時候就必須要重新設定MySQL的使用者root的密碼了。

  2. 因為我們要重新設定密碼,所以必須要進入MySQL server套件設定。打開終端機輸入指令: sudo dpkg-reconfigure mysql-server-5.5
    接著就會看到要重新設定root密碼的畫面,密碼提示需要輸入兩次。設定好之後,按下enter之後,等一段時間mysql service回重新啟動,如參考資料中的影片。
    擷取
  3. 接著再重新登入root的使用者,
    mysql -u root -p

    ,就如同影片一樣可以登入了

  4. 我們可以藉由root使用者來新增我們需要用到的使用者。
  5. 至於MySQL資料庫若不想使用指令來管理的話,通常MySQL都會安裝phpMyAdmin這一套作為MySQL圖形化管理系統,我覺得這一套好用可是不太安全,所以我在第一部分提到,我比較推薦的是Adminer這一套,只有一個PHP檔案,便於管理與移動,而且攜帶方便,是一個值得考慮的MySQL圖形化管理系統。它其實不只支援MySQL資料庫也支援其他的資料庫,如MS SQL,Oracle等,如果只需用到MySQL的話,可以下載Adminer 4.2.1 for MySQL 這個版本就好。

Lubuntu架設LAMP server二三事(二)

我們在前一篇介紹了架設LAMP server的方法,也介紹了Apache部分的module啟用與設定。我們在這個部分繼續介紹Apache相關的設定。(參考文獻: 實用 .htaccess 腳本合集 – 優化你的網站)

網址(URL)重寫,用到網址重寫目的是可以搭配PHP,用來設計進階的設計模式(design pattern)不可或缺的,比如說RESTful,MVC等。

  1. 我們要先確定module(模組)有沒有加載,所以一樣要開啟終端機輸入指令:
    sudo a2enmod rewrite

    ,通常會顯示

    Module rewrite already enabled

    ,如果沒有的話,就要與第一篇一樣,再多做一個動作,就是要再輸入

    sudo service apache2 restart
  2. 第1步驟完成之後,我們接下來可以編輯.htaccess檔案了,加入這些如下:
    RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [QSA,L]
    
  3. 加入上面的四行意思是,任何請求的URL(網址)都會經過index.php,要注意的是,.htaccess檔案僅限於目錄檔案下
  4. 完成之後,所有請求都會經過index.php了,也因此更進一步的可以開發RESTful web service以及MVC設計模式了。
  5. 完成這4個步驟之後,我們還需要修改Apache2裡的設定檔,設定檔位於/etc/apache2/sites-available/000-default.conf ;若未參考第一系列就需要做第6與第7步驟
  6. 在最後</VirtualHost>之前加入:
    <Directory "/var/www/html">;
    AllowOverride All
    </Directory>
    
  7. 這樣完成之後,輸入指令:
    sudo service apache2 restart

    將Apache2 重新啟動,網址重寫mod_rewrite 就可以使用了。

修改Apache預設監聽的埠號,WWW在Linux作業系統上預設的埠號通常是80,不過有的時候我們想要將埠號改成我們想要的數字時候該怎麼做呢?

  1. Apache2監聽埠號的設定是在
    /etc/apache2/ports.conf

    這個設定檔,把裡面的設定檔改掉,將Listen 80改成Listen 8080。

  2. 接著將Apache2停止並啟動服務(service),
    sudo service apache2 stop
    sudo service apache2 start
    
  3. 打開瀏覽器就會發現要輸入http://localhost:8080才會看到網頁了。
  4. 不過,更改了埠號之後,之前設定檔
    /etc/apache2/sites-available/000-default.conf

    ,是適用於埠號80,因此在8080埠號不適用。

  5. 要讓8080埠號下也可以用埠號80的/etc/apache2/sites-available/000-default.conf設定檔,我們只需要修改下面的設定檔。將設定檔裡的
    <VirtualHost *:80>改成<VirtualHost *:8080>。改完之後,記得將Apache2服務重新啟動,輸入指令:

    sudo service apache2 restart

參考資料: Apache 如何修改 Port Number ( 埠號 ) ?

使用Lubuntu架設LAMP server二三事(一)

Ubuntu是一套在個人上蠻受歡迎的Linux作業系統,也是我比較常拿來練習架站與做事情的一套作業系統。LAMP 其實是Linux,Apache,MySQL,PHP的縮寫,也是一個四個再一起搭配的一套server套件。本篇文章要教導該如何再作業系統上安裝LAMP server以及個別之間的設定。使用的作業系統版本號為: Lubuntu 14.10(使用圖形化介面LXDE)

  1. 首先,假設已經安裝好Lubuntu 14.10作業系統,先開啟終端機,我們藉由一個tasksel套件來完成我們這一次的LAMP server安裝。
  2. 若沒有tasksel套件,先把這個套件安裝起來,輸入指令:
    sudo apt-get install tasksel
  3. 安裝好之後,接著輸入
    sudo tasksel

    ,接著會進入一個套件畫面,我們找到我們要的LAMP server
    擷取

  4. 我們可以將紅色長方移到LAMP server位置並按下空白鍵,就會打一個*在上面。
  5. 接著按下enter鍵,LAMP server的套件就會開始安裝了。
  6. 安裝的過程中,會要求輸入作為登入MySQL的密碼。輸入兩次後(第二次為確認),接著套件就安裝完成了。
  7. 在此並沒有加裝常用的MySQL圖形化介面–phpMyAdmin,如果要安裝需要自己另外安裝。
  8. 我自己是推薦一個比較輕量型的MySQL資料庫管理,叫做Adminer,只有一個PHP檔案,方便管理與攜帶。
  9. 接著打開瀏覽器輸入http://localhost這個網址,我們會看到一個Ubuntu的預設頁面(如下截圖)。
  10. Apache預設的document root (放置網頁相關的跟目錄檔)是在 /var/www/html的目錄底下。
    擷取
  11. 這個index.html預設頁面,我們其實可以把它改掉,因為我們不需要把這個頁面留下來,因此可以把這個index.html刪掉。
  12. 把預設頁面index.html刪掉之後,會出現下列Index of/的截圖。
    擷取
  13. 會有上述的原因是因為沒有使用.htaccess檔規範檔案目錄的設定,導致整個目錄就輸出來了。
  14. 我們要避免這個情況,可以在/var/www/html目錄下建立一個.htaccess檔,在裡面我們可以加入語法將檔案遮掉,我是直接將localhost重新導向到某一個網址上。
  15. 設定檔位於/etc/apache2/sites-available/000-default.conf,需要設定此項目才可以使用.htaccess,在最後</VirtualHost>之前加入:
    <Directory "/var/www/html">
    AllowOverride All
    </Directory>
    
  16. 如果我們要將檔案遮掉,可以加入: Options -Indexes 意思是所有目錄禁止存取。若在此時訪問http://localhost,會傳回403 forbidden
    擷取
  17. 這樣還是會傳回Apache/2.4.10 (Ubuntu) Server at localhost Port 80,還是會洩漏一些server的訊息,如果不要顯示預設的status 頁面的話,我們也可以在.htaccess中自訂。
    可以編輯/var/www/html/.htaccess檔,加入ErrorDocument 403 “Forbidden.”,500是當遇到這個http status code 403時,輸出Forbidden字串。我們也可以將Forbidden字串修改成要指定的html檔案,下面的截圖是403改成自己自訂的字串之後所顯示的樣子。這樣就不會有status code顯示了。有關於status code,可以自行參考狀態碼
    擷取

以下是較為進階的使用Apache設定方式,包含了自訂標頭(header),還有網址(URL)重寫以及改變預設的埠號(port 80)等重要概念。
自訂標頭,自訂標頭的目的是希望不要顯示出server預設相關資訊,下列截圖是,預設會輸出的資訊,包含PHP版本,Apache版本以及其安裝在上面的作業系統名稱。

  1. 要自訂標頭之前,需要先確定mod_header模組有啟動,檢查方式是輸入指令,sudo a2enmod headers 如果出現Module headers already enabled,則表示已經啟動了,如果沒有的話會顯示已經Activated,需要restart Apache ,這個時候就按照指示,接著輸入sudo service apache2 restart。就可以自訂標頭了。
  2. 下圖是為未使用自訂標頭,回應的預設標頭。
    擷取
  3. Server以及X-Powered-By都有顯示出server訊息。
  4. 再使用mod_headers之後,就可以在.htaccess中加入
    Header set X-Powered-By "PHP/5.5"

    ,意思是將原本的X-Powered-By 設定成出現PHP/5.5字串。

  5. 若在.htaccess加入
    Header add test "This test header."

    ,則會多出這個標頭值。

  6. 設定第4與第5步驟後,下圖就會看到回應的Header就會改變了。
    擷取
  7. 有關Apache 相關自訂header與調校相關設定文章: Setting http headers with Apache and mod_headersApache Module mod_headers實用 .htaccess 腳本合集 – 優化你的網站Add a header to each request using .htaccess

在第二部分中,將會介紹Apache有關於該如何改變監聽的埠號(port number)以及如何運用mod_rewrite進行網址重寫。

[後記]

如果一開始要安裝tasksel出現錯誤,像是出現下面這樣的錯誤


Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package tasksel

要先去更新套件庫,要先輸入指令


sudo apt-get update

Virtualbox相關設定

因為開發上的需要,所以會用到Virtualbox建置虛擬機。本篇文章著重在當實體機是Win 7,虛擬機是Linux(Ubuntu)時,該如何設定一些相關的設定。

Virtualbox版本: VirtualBox 4.3.30

使用的Virtualbox虛擬機系統: Lubuntu 14.10

Guest Additions

  1. 安裝客戶端相關額外套件,需要用到Extension Pack,因此先去到官方網站找到適合的版本作下載。
  2. 下載回來後的Extension Pack,點兩下即可安裝。(安裝Extension Pack前,要先確保沒有任何一個虛擬機正在使用舊版的Extension Pack)
  3. 加入Extension Pack成功之後,開啟Lubuntu,進到桌面之後,在Virtualbox找到裝置的選項,按下選擇插入Guest Additions CD映像
  4. 就會出現下圖,按下確定後,就會出現在檔案管理器中。
    擷取
  5. 接檔案管理器會跟如下圖一樣,看到這個光碟裡的內容。
    擷取
  6. 對著VBoxLinuxAdditions.run這個檔案點兩下,會和下圖詢問要用哪一個動作,選擇在終端機開啟。
    擷取
  7. 接著會跑出一個終端機,並沒把VBoxLinuxAdditions.run執行成功,有可能是權限不夠的問題。不過路徑已經用在這個目錄下了。
  8. 只要在這裡打上 sudo ./VBoxLinuxAdditions.run即可執行安裝Guest Additions 相關套件的動作。
  9. 安裝完成之後,將作業系統重新開機,就會發現Lubuntu已經安裝好顯示部分了。
  10. 我們用完Guest Additions映像檔後,便可以把此映像檔卸載。

裝置選項中的剪貼簿

按照上面步驟把Guest Additions安裝完之後,我發現了一些問題,像是無法使用裝置中的共用剪貼簿,此步驟教你該如何可以使用共用剪貼簿。

  1. virtualbox-guest-dkms,如果Lubuntu裡面有這個套件的話,把這個套件安裝起來,(指令: sudo apt-get install virtualbox-guest-dkms
    ),重新開機之後共用剪貼簿就可以使用了。安裝途中,可能會遇到警告訊息: 說已經偵測到一個已經安裝的套件Guest Additions,詢問要不要把舊的做回復,刪除還是保留用新安裝的,我選的是D(Delete),將舊的(因為之前有些執行過Guest Additions)刪除。

裝置選項中的共用資料夾

按照上面步驟把Guest Additions安裝完之後,我發現了一些問題,像是無法使用裝置中的共用資料夾,此步驟教你該如何可以使用共用資料夾。

  1. 首先先開啟共用資料夾的選項,並建立一個要與虛擬機一起共用的資料夾,我使用的是機器資料夾。
    擷取
  2. 如果資料夾還沒有新增一個共用,完全是空白,先去按增加,加入一個共用,記得要將自動掛載和設為永久的選項勾選起來
    擷取
  3. 以上的步驟都完成之後,回到虛擬機作業系統Lubuntu,若做共用資料夾以前這個已經將系統開啟了,先將作業系統重新啟動。
  4. 重新啟動之後,開啟終端機,下指令,sudo mount -t vboxsf vboxfile /home/webserver/vbox_file,其中vboxfile和vbox_file是自己設定的要掛載的資料夾和掛載目的地資料夾,可能會遇到錯誤訊息中有protocol error的字樣。我查了一些相關文章之後,還是沒有解決問題,最後我懷疑可能是上述安裝的virtualbox-guest-dkms套件有關,有影響到Extension Pack的版本,因此我再從官方網站找到Virtualbox相對應版本的Extension Pack安裝上去之後,再掛載一次資料夾就可以成功掛載了。
  5. 雖然在共用中有設定自動掛載,可是比較奇怪的是,每次將作業系統開機起來資料夾並不會自動掛載,還是需要在終端機手動輸入步驟4指令自行掛載,這是一個比較奇怪的地方。