### 简要描述:
代码审计第三发
### 详细说明:
看代码
include/fun_company.php 963-968行
```
function action_user_setmeal($uid,$action)
{
global $db;
$sql="update ".table('members_setmeal')." set `".$action."`=".$action."-1 WHERE uid=".intval($uid)." AND effective=1 LIMIT 1";
return $db->query($sql);
}
```
可以看到$action未做处理就进入SQL语句了。下面看看哪些地方调用了action_user_setmeal这个函数
有以下这些文件
[<img src="https://images.seebug.org/upload/201506/121334477e35798dc1a19f47bd2fb7c1331fc474.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/121334477e35798dc1a19f47bd2fb7c1331fc474.png)
其中我划线的文件,变量就是我们可控的。下面看看那三个文件
1.plus/ajax_get_promotion.php 263-264行
```
$user_pname=trim($_GET['pro_name']);
action_user_setmeal($_SESSION['uid'],$user_pname); //更新套餐中相
```
可看到$user_pname来自用户传过去pro_name参数,而且并未做处理,就进入了action_user_setmeal 函数,所以造成注入。
2.user/company/company_ajax.php 266-267行
3.user/company/company_promotion.php 262-263行
这两处和第一处一样,代码就不贴了。
下面证明
### 漏洞证明:
我们用第二处来证明,因为这一出,更直观。
首先注明:需要后台的运营模式是套餐模式。(虽然默认的不是,但是总会用网站的是需要第二种模式的。)
[<img src="https://images.seebug.org/upload/201506/121346318fbb758feb16d7ea888999872593e258.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/121346318fbb758feb16d7ea888999872593e258.png)
1.注册一个企业账号
2.发布一个职位
3.来到推广的地方
[<img src="https://images.seebug.org/upload/201506/121349138b9ff92565ceac4f6cdec0de419f00d3.png" alt="4.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/121349138b9ff92565ceac4f6cdec0de419f00d3.png)
可任意点击红框内的一个按钮,这里拿置顶来测试。
点击置顶之后,截包,我划红线的地方就是可控的参数
[<img src="https://images.seebug.org/upload/201506/1214093548f70add8e823279e0d50eeba5221440.png" alt="8.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/1214093548f70add8e823279e0d50eeba5221440.png)
看看SQL语句监控
[<img src="https://images.seebug.org/upload/201506/12141424c7bc5db04ad30e4d5188b2b82b1d9d5e.png" alt="6.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/12141424c7bc5db04ad30e4d5188b2b82b1d9d5e.png)
完美执行,这里我们就可以该自己的用户类型,变成高级会员 哈哈哈。
因为有waf,绕不过,所以只能用布尔盲注。
所以找了找页面变化的地方。
加载payload之前的
[<img src="https://images.seebug.org/upload/201506/121410479eb4a30ce2aa58c494284745e2750853.png" alt="7.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/121410479eb4a30ce2aa58c494284745e2750853.png)
加了payload之后的是
[<img src="https://images.seebug.org/upload/201506/121411277b01dca5074c5036fcfc74057ef8a260.png" alt="9.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201506/121411277b01dca5074c5036fcfc74057ef8a260.png)
免费会员就成了我们提交的34了,此处就可以作为布尔盲注判断的地方,进行注入。(可以写脚本跑的)。
至于payload中的uid参数,抓个包就能看见是多少了
其他两处都差不多
暂无评论