MySQL弱密碼和webshell
了解漏洞
Mysql是什么?
Mysql是一種典型的小型的關(guān)系型數(shù)據(jù)庫,通常用于網(wǎng)站后臺數(shù)據(jù)庫。一般為lamp或者wamp構(gòu)成一般web服務(wù)器。他一般默認(rèn)端口是3306。
Mysql弱密碼漏洞是什么
Mysql弱密碼漏洞,就是說mysql的root用戶的沒有密碼,或者密碼太簡單,太短,容易被猜測或者被爆破。可以被攻擊者用來惡意登錄,竊取數(shù)據(jù)庫信息,而且一般mysql作為網(wǎng)站后臺數(shù)據(jù)庫,所以可能導(dǎo)致被攻擊者獲取網(wǎng)站權(quán)限,getshell。
分析漏洞產(chǎn)生原理
具體漏洞產(chǎn)生的原理是什么
Mysql的弱口令漏洞主要是因?yàn)楣芾韱T沒有安全意識,使用了mysql的默認(rèn)密碼,之前的版本默認(rèn)密碼是空的很多人沒有更改,但是mysql5.7之后就不允許密碼為空了,安裝的時(shí)候就會讓你輸入密碼了。然后一些人改了密碼,但是密碼太弱了,短的純數(shù)字的等等,很容易被爆破。
Mysql結(jié)合webshell有什么危害
通過web注入獲取webshell我有過一定的經(jīng)歷,所以也知道這其中的危害。注入也是獲取數(shù)據(jù)庫信息,如果攻擊者獲取了mysql的權(quán)限,獲取了數(shù)據(jù),便可得到數(shù)據(jù)庫數(shù)據(jù),同時(shí)網(wǎng)站的許多敏感信息都是存放的數(shù)據(jù)庫中的,比如用戶名密碼,管理員賬號密碼。然而加密往往都是MD5,基本上簡單的md5都可以通過網(wǎng)上的彩虹表匹配找到對應(yīng)的密碼。然后攻擊者便可利用賬號密碼登錄web后臺,利用上傳木馬等手段,更可獲取網(wǎng)站服務(wù)器的權(quán)限,甚至之后的內(nèi)網(wǎng)等等。所以說mysql結(jié)合webshell的危害是很可怕的。
漏洞重現(xiàn)和利用
安裝lamp(linux+apache+mysql+php)環(huán)境
本來想直接用我裝好的wamp的,不過由于lamp使用更加廣泛,所以這次搭建一個(gè)lamp的環(huán)境進(jìn)行測試。
安裝apache
$ dnf install httpd –y
$ systemctl enable httpd
$ systemctl start httpd
安裝好之后,開啟了服務(wù)就在瀏覽器上輸入127.0.0.1:8080(我設(shè)置成了8080,沒有更改的話就是80)訪問看看有沒有成功開啟apacge服務(wù),如下圖:

安裝mysql
$ dnf install [https://dev.mysql.com/get/mysql57-community-release-fc26-10.noarch.rpm](https://dev.mysql.com/get/mysql57-community-release-fc26-10.noarch.rpm)
$ dnf install mysql-community-server
$ systemctl start mysqld.service //啟動mysql服務(wù)器并同時(shí)自動啟動mysql
$ systemctl enable mysqld.service
$ grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log |tail -1 //獲取隨機(jī)生成的root密碼
然后設(shè)置mysql的安全配置:
$ /usr/bin/mysql_secure_installatio
主要是進(jìn)行更改root密碼,是否刪除匿名用戶,是否允許遠(yuǎn)程root登錄,是否刪除測試數(shù)據(jù)庫并訪問它,是否重新加載特權(quán)表等進(jìn)行配置。最重要的就是更改系統(tǒng)自動生成的密碼。
安裝php
$ dnf install php –y
$ vi /var/www/html/test.php //檢查php是否成功安裝
$ <? phpphpinfo(); ?> //文本寫入
$ systemctl restart httpd //重啟apache
然后訪問127.0.0.1:8080/test.php

可以看到php環(huán)境配置成功了,然后需要安裝php模塊,主要是用于連接php和mysql 的:
$ dnf search php
$ dnf install php-mysql –y
$ systemctl restart httpd
安裝好之后重啟了apache之后再次看頁面:

模塊安裝成功。
安裝hydra
這個(gè)網(wǎng)上很多教程,我這里貼一下命令就是了:
$ yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel

利用hydra進(jìn)行mysql弱密碼攻擊
我先利用自己之前收集的弱密碼,選了top2000,然后生成密碼字典,用于爆破。因?yàn)槲业膍ysql密碼并不是弱密碼,所以為了實(shí)現(xiàn)成功爆破我把我的密碼也加入了密碼字典:

開始之前先用nmap掃描一下主機(jī),確定端口開放情況:

可以看到nmap掃描到了端口3306開放,服務(wù)就是mysql。接下來便可以利用hydra對3306端口進(jìn)行爆破:

Bingo!成功爆破出了密碼,但是這個(gè)過程出現(xiàn)了很多的問題,首先就是命令不對,導(dǎo)致一直出現(xiàn)爆破不出來的問題,然后我以為只是mysql最大連接數(shù)的問題,于是把最大連接數(shù)改成了2000,然后重新來,還是有問題:

這個(gè)是一開始我使用的命令,后面換了下面的命令就成功了:
$ Hydra –l root –P password.txt 127.0.0.1 mysql
當(dāng)然這里也可以同時(shí)使用用戶名字典和密碼字典,但是因?yàn)閙ysql基本都是root,所以我就直接用root,但是用戶字典也很重要。
掃出了密碼下面便可進(jìn)行寫入webshell了。
為了保證實(shí)驗(yàn)正確性,我使用另一臺主機(jī)進(jìn)行寫入webshell進(jìn)行遠(yuǎn)程連接。

但是發(fā)現(xiàn)我發(fā)遠(yuǎn)程連接,去服務(wù)器上看發(fā)現(xiàn)果然,root只支持在本地訪問:

我們更改一下,把localhost更改為%,這樣就可以支持任意地址訪問了。

這樣就ok啦!

然后進(jìn)行寫入php一句話,但是導(dǎo)出時(shí)發(fā)現(xiàn)文件被限制了輸出位置,然后我在my.cnf中加入secure-file-priv = ‘’:

但是發(fā)現(xiàn)還是權(quán)限不夠,發(fā)現(xiàn)是輸出目錄權(quán)限問題,使用chomd 777 www 命令授予權(quán)限,最后成功執(zhí)行。下圖因?yàn)楫?dāng)時(shí)已經(jīng)輸出了沒有截圖,我就又執(zhí)行了一遍。

然后寫入一句話,接下來就可以用菜刀啦!


成功連接!
如果公司的mysql存在弱密碼會有怎樣的風(fēng)險(xiǎn)?
如果某個(gè)公司的web服務(wù)器存在弱密碼,很有可能被攻擊者利用,破解,爆破出了數(shù)據(jù)庫用戶密碼,這會致使公司網(wǎng)站信息,內(nèi)部信息被竊取,許多敏感信息暴露,甚至可能被攻擊者勒索。其次,如果攻擊者獲取數(shù)據(jù)權(quán)限后還獲取了webshell,進(jìn)行提權(quán)等操作之后,便可獲得公司服務(wù)器的權(quán)限,造成更嚴(yán)重的信息泄露。
使用openvas對該漏洞進(jìn)行掃描
因?yàn)榕聮卟怀鰜硭晕也籱ysql的密碼改成了123456.


可以看到成功的掃描出了mysql weak password。Mysql的弱密碼,點(diǎn)進(jìn)去可以看到,mysql中root用戶的密碼已經(jīng)被爆出來了,為123456;同時(shí)可以看到這是一個(gè)高危漏洞,評分為9.0分。
一些問題的解決
在利用webshell時(shí)確保主機(jī)能訪問靶機(jī)的apache服務(wù)。這樣才能保證菜刀可以連接成功。還有就是在高版本的php新增了安全策略會自動過濾非法提交的post或get參數(shù),所以這樣導(dǎo)致了很多同學(xué)用菜刀連接失敗,響應(yīng)確實(shí)200.因?yàn)橐痪湓拡?zhí)行了,但是get參數(shù)沒有成功轉(zhuǎn)換為變量。寫入webshell時(shí)最主要的就是權(quán)限問題了。Mysql5.7中寫入導(dǎo)出指定了文件夾,使我們不能成功將一句話寫入到指定的的文件夾。我在my.cnf加入上面提到的代碼,使可以導(dǎo)出到任意有權(quán)限的目錄。
因?yàn)楫?dāng)php7時(shí)因?yàn)椴说稛o法連接的問題,所以使用手動的方法連接。所以我將傳遞的一句話<? php eval($_POST[cmd]); ?> 里面的POST傳遞模式改為了GET這樣方便演示,因?yàn)閜ost的話還需要抓包更改,但也是可以的。

可以看到,將語句賦值給cmd之后便可傳過去執(zhí)行。其實(shí)就是菜刀把我們傳過去的cmd設(shè)置成為全局變量,然后我們傳參之后就可以進(jìn)行語句執(zhí)行,菜刀就是集成這些語句。
因?yàn)間et傳參有長度限制,所以我使用postman來進(jìn)行post的傳參查詢

網(wǎng)上找了查詢php查詢文件的代碼,成功查詢到了目錄下的文件,然后輸入不同函數(shù)就可以執(zhí)行了。比如下載等,菜刀其實(shí)就是集成了這些代碼的工具,我們通過自己手動測試也可以達(dá)到一樣的效果。所以猜測php7中的一句話無法用菜刀連接的可能是因?yàn)閜hp7中對菜刀中集成的代碼中的某個(gè)重要函數(shù)進(jìn)行了過濾,所以菜刀不能連接,我們自己寫的卻可以。
還有其他方法,比如直接寫入了webshell大馬,直接連接。

但是就是大馬寫入的時(shí)候比較麻煩,代碼較長。寫入數(shù)據(jù)庫時(shí)比較麻煩,而且不容易偽裝,很容易被發(fā)現(xiàn)。
解決php7無法使用菜刀連接一句話問題
因?yàn)閜hp7對菜刀的過濾,所以博主分析一個(gè)更改后可以在php7環(huán)境下連接一句話的java版菜刀,mac和win都可以用
百度網(wǎng)盤:https://pan.baidu.com/s/1d28kqi