在官方论坛上下的最新版
在 install/index.php中
包含进来 那再继续看看。
这里判断了Lock 而且if(file_exists($lockfile) && ($_a=='template' || $_a=='setting' || $_a=='check')
关键这里是一个and 而不是一个or 只要不满足后面的 也就不会退出了。
继续看后面的码。
可以看到 除开 template setting 和check 还有其他的
来找找哪个可以利用的。
我所利用的是这个。 貌似可以直接添加一个管理。 但是不甘心, 看看能不能直接Getshell。
首先看这里。 要检测mysql是否能够连接得上, 并且$db_name 得存在这个mysql中。
可以看到哪些参数都是可控的。
我们自己搭建一个mysql 可外联就行了。
匹配出除开0-9 a-z A-Z 以外的就退出。
这里 跟进去
可以看到 直接写到一个php文件里了。 这时候 好像一切都ok了。
可是 一切又没有那么的容易。
access violation error!
是不能含有单引号的。 但是在这里 关键的是 他没有过滤转义符。。
然后就进入了无尽的测试当中。。
看这个 理论上来说 只有
这三行不可控, 但是 由于
这四个 会用来连接 如果连接不上的话 就退出了。 就算不上能随意控制。
就剩下了这两个可控。 但是中间还有了个不可控的。
如果两个可控的挨在一起的话 可以这样
public static $port = '\';
public static $tbl_prefix = ';phpinfo();/*';
但是由于中间多了一个不可控的 所以不能直接这样。。
如果可控的两行没挨在一起的话
那么可控的必须要三行了 才能执行了。。 那怎么办呢?
DB_HOST 肯定是不能改的 要不就连不上了。
那就要从 DB_NAME db_user 和 db_pwd 下手了。
这里的正则 验证了 db_name 和 db_user 但是 这中间连接的是一个or。
那只要让一个匹配不出除开09 az AZ以外的就行了。
那就让db_name匹配不出 因为我测试了db_name 在我创建数据库的时候无法添加符号的。
这样只有从db_user 和 db_pwd 下手了。
在本地的mysql里 建一个含有特殊字符的 账户 和 密码。
让账户为test@localhost\ 密码为;/*
这样类似的就行了。
来测试测试。