Mysql資料庫UDF的安全問題利用

來源:互聯網
上載者:User

最近一直在休假,沒有寫部落格,轉眼十一還剩最後一天,時間真的很快。今天想談談資料庫的安全問題。

對於資料庫的安全問題,首先,重要的產生庫千萬不能放在公網上,一旦被駭客入侵後果不堪設想,輕則資料丟失,重則被脫褲整庫被打包匯出),如果恰恰又以明文儲存了使用者的密碼,那麼就太可怕了,去年轟動一時的某幾個大型網站的使用者資料泄漏事件都是因為明文的方式儲存了使用者的密碼。

其次是大量的資料庫弱口令問題存在,造成這個問題的原因往往是sa或者dba對安全問題疏忽,只為方便。

今天無意掃到一個弱口令的mysql資料庫,我的話題也從這個弱口令mysql庫開始。首先遠程登入資料庫,居然還是mysql資料庫裡root使用者的弱口令,毫不客氣的進入了資料庫,執行一條sql語句查看ip地址和/etc/passwd檔案的內容

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2014563045-0.jpg" title="mysql.jpg" alt="214703298.jpg" />

這裡主要是用到了load_file()函數,當然這個函數是可以被禁用的。以上可以輕鬆看到/etc/passwd檔案的資訊和ip地址,當然其他的檔案內容都可以被看到。

由於load_file()函數只能實作類別似系統命令cat的查看檔案功能,但是想執行系統命令的功能,那麼只能用UDF了,也就是User defined Function,使用者定義函數。

查看mysql的plugin,plugin_dir的路徑為/usr/lib/mysql/plugin

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/20145A0U-1.jpg" title="p1.jpg" alt="215430309.jpg" />

如果像我遇到這個資料庫伺服器一樣,plugin_dir的路徑為空白也無所謂了。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2014561522-2.jpg" title="p2.jpg" alt="215626835.jpg" />

執行以下sql語句,把udf.txt裡面的十六進位的檔案內容匯出到/usr/lib/mysqludf.so

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2014562M2-3.jpg" title="udf.jpg" alt="220017342.jpg" />

查看下這個udf庫所支援的函數

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2014564638-4.jpg" title="pp.jpg" alt="220728793.jpg" />

建立函數並且查看是否建立成功,可以看到一個名叫sys_eval的UDF建立成功了。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/20145642Z-5.jpg" title="33.jpg" alt="221234316.jpg" />

最後利用UDF執行更高許可權的功能

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2014561493-6.jpg" title="ha.jpg" alt="221403716.jpg" />

剩下的就用這個UDF獲得系統許可權吧,提示可以用nc反彈,在自己的主機上執行nc -vv -l -p 12345,在資料庫上執行一下sql語句

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/20145632X-7.jpg" title="nc.jpg" alt="222034629.jpg" />

就可以成功反彈出linux shell了,再往下就。不過UDF的利用也有局限性,需要有mysql庫的操作許可權,在mysql庫下必須有func表;在skipgranttables開啟的情況下,UDF會被禁止。

PS:mysqludf.so是我已有的一個庫檔案,利用它產生了udf.txt,執行以下sql語句即可

mysql> select hex(load_file('/usr/lib/mysqludf.so')) into outfile '/tmp/udf.txt';Query OK, 1 row affected (0.04 sec)


本文出自 “老徐的私房菜” 部落格,謝絕轉載!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.