炫技(Aug.17)——不挂代理实现几乎100%的IP伪造:连WP-Polls都能成功作弊!(+简单代码审计)

0
Want create site? Find Free WordPress Themes and plugins.

现在很多投票程序用了IP判断你投票了没有,如果此IP投过票就记录到数据库里,不能再投。这里就涉及到一个用户IP地址获取的问题。一般你刷票,首先会想到挂多个代理让服务器以为这是多个不同的用户访问。其实关于IP地址的获取,不论是nginx和apache都是有一定缺陷的,如果网站主没有特意配置,你程序获取到的IP是可以通过修改HTTP包来伪造的。某些大型网站(比如知乎的反爬虫),可能会特别对IP地址进行甄别,从而你不得不挂代理,但是绝大部分小型网站都很容易通过改包来伪造IP从而达到你的目的。

某wordpress网站有一个投票的地方:

(我知道你会问我,我投的是反对票…)

 

投票之后清理cookie后还是不能再投,那么这就是一个典型的PHP程序通过取得用户IP来判断用户是否投票的例子。我抓包,发现使用了WP-Polls插件:

(↑第一次投票)

(↑第二次投票)

 

于是我下载了WP-Polls的插件包,在wp-polls.php文件中看到了获取IP的相关代码:

其实大部分web程序的IP获取原理都和这个插件差不多:依次枚举图中的几个$_SERVER项的值,如果有一个取到了就直接返回IP,不考虑后面的值。

下面列出HTTP包中对IP地址描述的几个项:

X-Forwarded-For
Client-IP
x-remote-IP
x-originating-IP
x-remote-addr

图片中的HTTP_CLIENT_IP对应到http包中就是Client-IP,是可以伪造的。

放到burp里面改包发送试试:

OK,那么我的思路就是生成一大堆虚拟IP,替换到包里面,然后用burp刷票。

下面看图:

关于burp intruder的教程可见:https://dfkan.com/961.html

 

现在start attack:

然后我发现burp自动把“.”字符URL编码了…

 

解决这个问题只要把自动URL编码去掉就行了:

现在再次开始:

 

~A few moments later~

 

OK,我党阵营已经反败为胜了~哈哈~

只要超过赞成票就行了,还是不要刷太多,容易被发现。

Did you find apk for android? You can find new Free Android Games and apps.

关于作者

居正

大道至简

发表评论