不给力的注射, 搞某站挖的, 查了下没什么大站用这个 影响不大 发出来大家交流学习, 废话不多说, 看我们的猪肉点~~~~~
首先coremodulesitemajax.php开始调用~
$do = trim($_GET['do']); $op = trim($_GET['op']); // 允许的操作行为 $allowacs = array( 'respond', 'review', 'subject', 'picture', 'guestbook'); // By.Rices -> Forum: T00ls.Net -> Blog: Rices.so // 需要登录的操作 $loginacs = array( 'post_respond', 'delete_respond', 'add_flower', 'post_membereffect', 'add_favorite', 'post_guestbook' ); // 可返回地址 $_G['forward'] = $_G['web']['referer'] ? $_G['web']['referer'] : $_G['cfg']['siteurl']; $act = empty($do) || !in_array($do, $allowacs) ? '' : $do; if(!$do) redirect('global_op_unkown'); include MOD_ROOT . 'ajax' . DS . $do . '.php'; //op=get_membereffect&do=subject 开始调用subject.php
coremodulesitemajaxsubject.php 148行
case 'get_membereffect': if(!$sid = _post('sid', 0, 'intval')) redirect(lang('global_sql_keyid_invalid', 'sid')); if(!isset($_POST['effect'])) redirect(lang('member_effect_unkown_effect')); $S =& $_G['loader']->model('item:subject'); if(!$subject = $S->read($sid,'pid,name,subname,pid,status',false)) redirect(lang('item_empty')); if(!$model = $S->get_model($subject['pid'], TRUE)) redirect('item_model_empty'); // By.Rices -> Forum: T00ls.Net -> Blog: Rices.so $idtype = $model['tablename']; $effect = $_POST['effect']; //没过滤 $M =& $_G['loader']->model('member:membereffect'); $M->add_idtype($idtype, 'subject', 'sid'); if($_POST['member'] && $_POST['member'] != '0') { if($list = $M->get_member($sid, $idtype, $effect)) { //注射开始 get_member函数在coremodulesmembermodelmembereffect_class.php文件中 while($val = $list->fetch_array()) { echo '
';
}
} else {
redirect('global_empty_info');
}
} else {
$totals = $M->total($sid, $idtype);
if($totals) {
foreach($totals as $key => $val) {
if(substr($key, 0, 6) == 'effect') {
echo $split . $val;
$split = '|';
}
}
} else {
echo '0|0';
}
}
output();
break;
coremodulesmembermodelmembereffect_class.php 86行
function get_member($id, $idtype, $effect) { $this->db->from($this->table); $this->db->where('id', $id); //where函数会使用addslashes处理第二个参数 $this->db->where('idtype', $idtype); $this->db->where($effect, 1); //第一个参数只有简单的验证 且无双引号包围 直接带入where函数 继续注射.... return $this->db->get(); //经过where处理后就进入get执行了~ }
corelibdatabase.php 155行
// 设置查询字段 function where($key, $value='', $split='AND') { if(is_array($key)) { foreach ($key as $k => $v) { if(is_array($v) && count($v)==2 && is_array($v[1])) { echo ''.$k.$v.''; $fun = $v[0]; $args = array_merge(array($k), $v[1]); call_user_func_array(array(&$this, $fun), $args); } else { $this->where($k, $v, $split); } } // By.Rices -> Forum: T00ls.Net -> Blog: Rices.so } elseif($key=='{sql}') { $this->_exp_where('sql', $value, $split); } elseif(is_array($value)) { $this->where_in($key, $value, $split); } else { //关键是这里的第一个参数是没过滤的 如果可控值在value就没办法了 $where = $this->_ck_field($key) . " = " . $this->_escape($value); //_escape 会使用addslashes 处理值 //而_ck_field 只会使用 preg_match("/['"]+/", $field)来处理 只要 $key的值没单引号即可绕过 $this->where .= ($this->where ? " $split " : '') . $where; //echo $where; } }
这点还是有点意思的 过滤了value却没过滤key so..有兴趣的朋友可以去挖挖看 只要where函数第一个值可控就可以轻松搞定~
exp不发了 改版权的去死吧 土司万岁
文章来源于lcx.cc:Modoer 点评系统注射 几个版本通杀
相关推荐: QuarksPwDum导出2003 AD域控所有用户hash的方法
1:在2003命令行里输入c:>ntbackup 使用备份向导(高级) 选择只保存系统状态然后选择输出文件名 等待几分钟即可完成第一步 2:使用还原向导(高级) 选择你的刚才备份的文件,请单击“下一步” 选择恢复在另一个位置文件(C: test为例) 然…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论