/includes/smarty_config.php
如果$_GET[key]不为空 则执行以下sql
$db->query("select id from ".SWORD." where keyword='$_GET[key]'");
$_GET[key]没有过滤
话说你在后面加了转义。。为什么就不能给key也转义下呢。。
install/install.php
只给index.php做了lock文件验证 install.php为什么不验证下呢
随手找了几个 连官网demo都有。
http://democn.mall-builder.com/install/install.php
http://zswang.com.cn/install/install.php
http://www.ycxsd.com/install/install.php
http://kch100.com/install/install.php
http://www.junpinjie.cn/install/install.php
首先需要准备一个数据库 (自己的)
然后构造个URL
xxx/install/install.php?action=setup&dbhost=地址&port=端口&dbname=数据库名&dbuser=账号&dbpassword=密码&tableprefix=数据表前缀&guid=6F9619FF-8B86-D011-B42D-00C04FC964FF(不知道这是什么鬼)
如果($dbhost && $port && $dbname && $dbuser && $dbpassword && $tableprefix && $guid)这个参数都有了 则
将他们声称在install目录下的db.txt
然后如果数据库能够正常连接 则在那个数据库新建一个数据库
然后如果上面的命令执行完毕
则
由于根目录没有B2Bbuilder.sql 这个文件。。所以不能重装。。 到这里就会出错
监控中 可以看到新建了个数据库
再接着往下看
在同一个if判断的条件下 有这么几句代码
就是把$contents写到config/config.inc.php里
由于链接地址端口数据库和账号密码都是条件中必须的。
authkey又不可控 只有数据表前缀可以了。。
构造URL GET提交
一句话被写进去了
再说说另外一处getshell
也是在同样的文件 install.php
216行
除过if判断 他先读了db.txt 然后用|分割
然后再连接数据库
如果连接成功了 则insert一个管理员
那么问题来了,怎么getshell?
他这个首先读了db.txt 而db.txt 我们可控 上面已经说过了 提交这个URL就会在db.txt生成
localhost|3306|xxxxx|root|root|xxxx|xxxx
只要数据库是root权限的数据库就行。
连接后 直接这条语句
insert into ".$tableprefix."admin (password,user,type) value ('$adminpassword','$adminuser','1')
adminpassword和adminuser可控 密码被md5加密 adminuser无过滤
既然数据库是root权限 那就可以写shell了# 不过前提得知道绝对路径
有好多文件都报错的
先百度随便找个站测试
成功写入shell 并读etc/passwd
接着拿官网测试
写完shell我好像就被服务器给屏蔽了。。打不开