GitHub项目地址: https://github.com/helloxz/onenav
安装:
if( !file_exists('./data/config.php') ) { exit('<h3>配置文件不存在,请将站点目录下的config.simple.php复制为data/config.php</h3>'); } //检查数据库是否存在,不存在则复制数据库 if( !file_exists('./data/onenav.db3') ) { copy('db/onenav.simple.db3','data/onenav.db3'); // copy('db/.htaccess','data/.htaccess'); } //载入配置文件 require("./data/config.php"); //根据不同的请求载入不同的方法 //如果没有请求控制器 if((!isset($c)) || ($c == '')){ //载入主页 include_once("./controller/index.php"); } else{ include_once("./controller/".$c.'.php'); }
默认数据库路径 'data/onenav.db3'
修复方案:
https://www.yuque.com/helloz/onenav/install#ImLOx
如果您使用得Nginx,请务必将以下规则添加到站点配置中,否则数据库可能被下载(非常危险):
#安全设置 location ~* ^/(class|controller|db|data|functions|templates)/.*.(db3|php|php5)$ { return 403; } location /db { deny all; }
#伪静态
rewrite ^/click/(.*) /index.php?c=click&id=$1 break;
rewrite ^/api/(.*)?(.*) /index.php?c=api&method=$1&$2 break;
rewrite /login /index.php?c=login break;
如果使用得Apache则无需设置,已内置.htaccess
进行屏蔽。
如果url合法,直接curl访问。未检测链接是否在内网。以及一些请求协议控制。
未过滤参数
function add_link($api){ //add_link($token,$fid,$title,$url,$description = '',$weight = 0,$property = 0) //获取token $token = $_POST['token']; //获取fid $fid = intval(@$_POST['fid']); $title = $_POST['title']; $url = $_POST['url']; $description = empty($_POST['description']) ? '' : $_POST['description']; $weight = empty($_POST['weight']) ? 0 : intval($_POST['weight']); $property = empty($_POST['property']) ? 0 : 1; $api->add_link($token,$fid,$title,$url,$description,$weight,$property); }
未对title过滤,导致XSS存在
修复方案:
实体化相关参数,正则匹配过滤等增加过滤方式
直接获取网站标题、描述,未进行任何过滤,只要在被添加的网站标题或描述上写上payload就能进行XSS攻击。
修复方案:
实体化相关参数,正则匹配过滤等增加过滤方式
成因:TOKEN值未在安装的时候更改。token生成方式过于简单
auth函数功能:设置token 其算法是 md5(用户名+TOKEN) 其中的 TOKEN值在设置中是默认值为:xiaoz.me
config.php:
所以,我们只需要知道用户名就能进行未授权操作,制作token,实现api调用从而控制后台例如利用XSS获取其cookie,cookie生成方式无时间校验,在不改密码的情况下可一直用,进入后台管理界面(有token跟管理员一样了,打XSS是方便持久控制。其他的无意义) token放post请求里
猜一波token:
默认用户:xiaoz
token:7860b4762c20b1496ca027882d945ad7
用户admin
token:92234ece708b0cd6f3c2d9e8fcde010f
修复方案:
改默认的TOKEN值
最后:关于文章,第一次投稿,有错误的地方请指正。