### 简要描述: 后台注入没啥价值- -不过这个点可以任意构造语句 包括drop database;和select into outfile 顺便还自带爆路径 拿来getshell不错 ### 详细说明: admin\include\lib_main.php 行718 ``` function get_filter($param_str = '') { $filterfile = basename(PHP_SELF, '.php'); if ($param_str) { $filterfile .= $param_str; } if (isset($_GET['uselastfilter']) && isset($_COOKIE['ECSCP']['lastfilterfile']) && $_COOKIE['ECSCP']['lastfilterfile'] == sprintf('%X', crc32($filterfile))) //如果如果巴拉巴拉 { return array( 'filter' => unserialize(urldecode($_COOKIE['ECSCP']['lastfilter'])), 'sql' => base64_decode($_COOKIE['ECSCP']['lastfiltersql']) //直接从cookie取的base64 无视GPC了 ); } else { return false; } } ``` 这一个无视GPC的输入点太爽了 而且看数组的key是sql,一般就快进查询了 继续翻翻哪里调用了get_filter 好多地方都调用了。这里拿article.php开刀 行624: ``` function get_articleslist() { $result = get_filter(); if ($result === false) { /*省略一堆*/ } else { $sql = $result['sql']; //来自cookie base64无视GPC $filter = $result['filter']; } $arr = array(); $res = $GLOBALS['db']->selectLimit($sql, $filter['page_size'],...
### 简要描述: 后台注入没啥价值- -不过这个点可以任意构造语句 包括drop database;和select into outfile 顺便还自带爆路径 拿来getshell不错 ### 详细说明: admin\include\lib_main.php 行718 ``` function get_filter($param_str = '') { $filterfile = basename(PHP_SELF, '.php'); if ($param_str) { $filterfile .= $param_str; } if (isset($_GET['uselastfilter']) && isset($_COOKIE['ECSCP']['lastfilterfile']) && $_COOKIE['ECSCP']['lastfilterfile'] == sprintf('%X', crc32($filterfile))) //如果如果巴拉巴拉 { return array( 'filter' => unserialize(urldecode($_COOKIE['ECSCP']['lastfilter'])), 'sql' => base64_decode($_COOKIE['ECSCP']['lastfiltersql']) //直接从cookie取的base64 无视GPC了 ); } else { return false; } } ``` 这一个无视GPC的输入点太爽了 而且看数组的key是sql,一般就快进查询了 继续翻翻哪里调用了get_filter 好多地方都调用了。这里拿article.php开刀 行624: ``` function get_articleslist() { $result = get_filter(); if ($result === false) { /*省略一堆*/ } else { $sql = $result['sql']; //来自cookie base64无视GPC $filter = $result['filter']; } $arr = array(); $res = $GLOBALS['db']->selectLimit($sql, $filter['page_size'], $filter['start']); //直接进查询 /*省略另一堆*/ } ``` 可以看到 如果get_filter()返回不为false就直接取出里面的sql进查询了... ### 漏洞证明: 登陆ecshop后台 然后打开一次 http://127.0.0.1/admin/article.php?act=list 这次的get_filter()是false 所以他会进入if里面 在这个if的最底下会用set_filter()设置cookie 会看到多了3个cookie [<img src="https://images.seebug.org/upload/201309/23114338e802db8c4de90fc635859d9e6f5d216b.png" alt="11111ff.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/23114338e802db8c4de90fc635859d9e6f5d216b.png) 修改cookie ECSCP[lastfiltersql]=base64后的sql语句 这里用的爆管理员账号密码的payload其他的比如 导出shell啊啥的都行 然后在url后面加上参数uselastfilter=1来进入get_filter()函数里的那个if [<img src="https://images.seebug.org/upload/201309/23120734bbb84422439ae206d0f24046247e1059.jpg" alt="11333.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/23120734bbb84422439ae206d0f24046247e1059.jpg) 只要让查询返回的结果不是正确的资源 是会报错把路径显示出来的。然后select into outfile