### 简要描述:
Supesite 注入出的密码 基本都破不出来
如果能够直接提升自己为管理员 或者 自己修改管理的密码那就再好不过了。
忙里偷闲。
### 详细说明:
在index.php中
```
if($_SGET['action'] != 'index') {
if(empty($channels['menus'][$_SGET['action']]['upnameid']) && $channels['menus'][$_SGET['action']]['upnameid'] != 'news') {
$scriptfile = S_ROOT.'./'.$_SGET['action'].'.php';
} else {
$scriptfile = S_ROOT.'./news.php';
}
```
这里包含文件进来。 来看看$_SGET 怎么来的。
```
if(empty($parsegetvar)) {
$parsegetvar = empty($_SERVER['QUERY_STRING'])?'':$_SERVER['QUERY_STRING'];
}
if(!empty($parsegetvar)) {
$parsegetvar = addslashes($parsegetvar); //这里转义了
$_SGET = parseparameter(str_replace(array('-','_'), '/', $parsegetvar)); // 这里 注册了这变量
}
```
```
function parseparameter($param, $nofix=1) {
global $_SCONFIG;
$paramarr = array();
if($nofix && !empty($_SCONFIG['pagepostfix'])) {
if(strrpos($param, $_SCONFIG['pagepostfix'])) {
$param = substr($param, 0, strrpos($param, $_SCONFIG['pagepostfix']));
}
}
$sarr = explode('/', $param);
if(empty($sarr)) return $paramarr;
if(is_numeric($sarr[0])) $sarr = array_merge(array('uid'), $sarr);
if(count($sarr)%2 != 0) $sarr = array_slice($sarr, 0, -1);
for($i=0; $i<count($sarr); $i=$i+2) {
if(!empty($sarr[$i+1])) $paramarr[$sarr[$i]] = addslashes(str_replace(array('/', '\\'), '', rawurldecode(stripslashes($sarr[$i+1]))));
}
return $paramarr;
}
```
这里用/来切割成数组 然后就return 。
在viewcomment.php中
```
if(!empty($_SGET['op']) && $_SGET['op'] == 'delete') {
$cid = empty($_SGET['cid'])?0:intval($_SGET['cid']);
$ismodle = empty($_SGET['ismodle']) ? 0 : intval($_SGET['ismodle']);
$table_name = ( $ismodle && !empty($_SGET['type']) ? $_SGET['type'] : 'space' ).'items';
if(empty($cid)) showmessage('not_found', S_URL);
$itemid = empty($_SGET['itemid'])?0:intval($_SGET['itemid']);
if(empty($itemid)) showmessage('not_found', S_URL);
$deleteflag = false;
if(empty($_SGLOBAL['group'])) {
showmessage('no_permission');
}
if($cid && $itemid && $_SGLOBAL['supe_uid']) {
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('spacecomments').' WHERE cid=\''.$cid.'\'');
if($comment = $_SGLOBAL['db']->fetch_array($query)) {
if($_SGLOBAL['group']['groupid'] == 1 || $comment['authorid'] == $_SGLOBAL['supe_uid']) {
$_SGLOBAL['db']->query('UPDATE '.tname($table_name).' SET replynum=replynum-1 WHERE itemid=\''.$comment['itemid'].'\'');
$_SGLOBAL['db']->query('DELETE FROM '.tname('spacecomments').' WHERE cid=\''.$cid.'\'');
```
这里 我们来看这里 UPDATE '.tname($table_name).
```
$ismodle = empty($_SGET['ismodle']) ? 0 : intval($_SGET['ismodle']);
$table_name = ( $ismodle && !empty($_SGET['type']) ? $_SGET['type'] : 'space' ).'items'; //这里如果$ismodle为true的话 那么$table_name 就为$_SGET['type'] 刚好$ismodle 也是$_SGET来的 在结合index.php里的注册$_SGET 那么则table_name可控了
```
```
if($cid && $itemid && $_SGLOBAL['supe_uid']) { //这里cid 和 itemid 都是index.php中注册的$_SGET来的 $_SGLOBAL['supe_uid'] 这个只要登录了用户就行
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('spacecomments').' WHERE cid=\''.$cid.'\'');//把评论查询出来
if($comment = $_SGLOBAL['db']->fetch_array($query)) {
if($_SGLOBAL['group']['groupid'] == 1 || $comment['authorid'] == $_SGLOBAL['supe_uid'])//这里必须是管理员 或者 你查看的是自己的评论 那么我们就自己评论一个
{
$_SGLOBAL['db']->query('UPDATE '.tname($table_name).' SET replynum=replynum-1 WHERE itemid=\''.$comment['itemid'].'\'')//table_name可控 注入;
```
首先先注册一个会员
这里我们先随便找一个新闻页面 然后自己评论一下
'SELECT * FROM '.tname('spacecomments').' WHERE cid=\''.$cid.'\''
这里由于我们只能查看自己的评论
这里怎么查看自己评论的cid呢?
首先自己评论一下
[<img src="https://images.seebug.org/upload/201410/1122272537016c5297f9bd23acf02e1b9d17052c.jpg" alt="s1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/1122272537016c5297f9bd23acf02e1b9d17052c.jpg)
然后
[<img src="https://images.seebug.org/upload/201410/11222750568f94de9b7e545e44b66fd6fdfd84bc.jpg" alt="s2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/11222750568f94de9b7e545e44b66fd6fdfd84bc.jpg)
点一下引用 然后抓下包 就能看到 我们发的这个评论的cid为7
然后构造一下参数 在index.php中 把viewcomments.php中包含进来
[<img src="https://images.seebug.org/upload/201410/112230036bc0cdf7555bbf481e9c86c77e6e9586.jpg" alt="s3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/112230036bc0cdf7555bbf481e9c86c77e6e9586.jpg)
成功报错
[<img src="https://images.seebug.org/upload/201410/1122303473ff6a6b3e08f6f1b75cbe410ed43255.jpg" alt="s4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/1122303473ff6a6b3e08f6f1b75cbe410ed43255.jpg)
可以看到如果查看的不是自己发的评论 就出错额。
因为是update 所以自己update自己的groupid 为1 即可直接提升自己为管理。
http://127.0.0.1/dan/supesite/space.php?uid=13
首先进一下我们的个人主页 可以看到uid为13
然后构造一下语句
[<img src="https://images.seebug.org/upload/201410/11223401e8dc5bd019b9191bc961b2e2384d7f7d.jpg" alt="s5.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/11223401e8dc5bd019b9191bc961b2e2384d7f7d.jpg)
没报错了 语句成功执行
这里语句成功执行后
$_SGLOBAL['db']->query('DELETE FROM '.tname('spacecomments').' WHERE cid=\''.$cid.'\'');
就会执行这delete了。 就会删除这评论了 不过权限已提升了
[<img src="https://images.seebug.org/upload/201410/1122350383b9177802461afa8808c8858f3f9c51.jpg" alt="s6.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/1122350383b9177802461afa8808c8858f3f9c51.jpg)
提升权限 成功进后台
### 漏洞证明:
[<img src="https://images.seebug.org/upload/201410/112230036bc0cdf7555bbf481e9c86c77e6e9586.jpg" alt="s3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/112230036bc0cdf7555bbf481e9c86c77e6e9586.jpg)
暂无评论