### 简要描述:
rt
### 详细说明:
看到 操作数据的save函数
```
public function save($data='',$options=array()) {
if(empty($data)) {
// 没有传递数据,获取当前数据对象的值
if(!empty($this->data)) {
$data = $this->data;
}else{
$this->error = L('_DATA_TYPE_INVALID_');
return false;
}
}
// 分析表达式
$options = $this->_parseOptions($options);
if(!isset($options['where']) ) {
// 如果存在主键数据 则自动作为更新条件
if(isset($data[$this->getPk()])) {
$pk = $this->getPk();
$options['where'] = $pk.'=\''.$data[$pk].'\'';
$pkValue = $data[$pk];
unset($data[$pk]);
}else{
// 如果没有任何更新条件则不执行
$this->error = L('_OPERATION_WRONG_');
return false;
}
}
return $this->db->update($data,$options);
}
```
然而,在调用时 ,基本没有对 键值进行判断是否合法。
例如 修改资料处
```
function main(){
self::is_login();
if($_POST){
$data = array_map('strval',$_POST);
$data = array_map('remove_xss',$data);
$data['id'] = $_SESSION['dami_uid'];
M('member')->save($data);
$this->success('资料保存成功~');
}else{
$info = M('member')->where('id='.$_SESSION['dami_uid'])->find();
$this->assign('info',$info);
$this->display();
}
}
```
我们抓包添加一个 money字段
[<img src="https://images.seebug.org/upload/201501/071755599414325332fc29654ad303e2abcb855c.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201501/071755599414325332fc29654ad303e2abcb855c.jpg)
可以看到金额变成1000000 了~
[<img src="https://images.seebug.org/upload/201501/071757146f584e36e95f3530de36496b4eb2186d.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201501/071757146f584e36e95f3530de36496b4eb2186d.png)
### 漏洞证明:
[<img src="https://images.seebug.org/upload/201501/071757146f584e36e95f3530de36496b4eb2186d.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201501/071757146f584e36e95f3530de36496b4eb2186d.png)
暂无评论