首页 > php > curl伪造ip访问网站

curl伪造ip访问网站

从西电一道信息安全技术比赛的题目说起吧,题目是《Black Hat》。
访问答题网页,提示信息为:”Make sure that you are from Vatican.”。
翻译成中文是:”请确认你来自梵蒂冈”。

意思是需要用梵蒂冈的ip访问才能成功,找梵蒂冈的代理服务器是不可行的,但是可以通过伪造梵蒂冈的ip来绕过检测。
由于某些网站是通过请求头的”X-Forwarded-For”值来获取访问者的ip,而请求头是可以修改的,所以很多网站都可以通过伪造请求头来绕过ip检测。
具体原理可以看这篇文章:http://zhangxugg-163-com.iteye.com/blog/1663687

在搜索引擎搜一下”梵蒂冈ip”,可以得到一个梵蒂冈ip:”212.77.1.243″。
利用火狐浏览器的”Moify Headers”插件可以修改请求头信息。
在插件中把请求头的”X-Forwarded-For”修改为”212.77.1.243″:
点击Start启用插件后再访问网页,提示信息变成:”The Requested URL was not found on this server. Apache Server at www.blackhat.com Port 80″。
根据提示信息,需要访问这台服务器上配置的www.blackhat.com网站。

当我们访问一个网站时,比如www.blackhat.com,dns服务器会先通过域名解析出域名指向的服务器ip地址,再向该服务器ip发送http请求。一个服务器上可以存放多个网站,那么通过不同的域名来访问该服务器时,服务器是怎么区分不同的域名呢?答案就是通过http请求头的”Host”字段。
那么要访问答题服务器上配置的www.blackhat.com网站的话,只需把请求头的”Host”值改为”www.blackhat.com”就行了。修改后再访问网站就得到了通关的key。

下面再来看看某个discuz论坛,我把”X-Forwarded-For”修改为”8.8.8.8″后注册一个帐号,结果网站显示我的IP在美国:可见,该网站存在ip伪造的问题,事实上很多论坛都是这样。

再接一个新手任务,该任务要求有5个ip访问推广地址:
使用curl可以修改请求头信息,执行下面的php代码,可以瞬间完成任务:

 <?php
    for ($i = 0; $i < 5; $i++) {
    task();
    }

    function task() {
    $url = "http://www.xxx.com/?fromuid=272539";
    $ip = "100.100.".rand(1, 255).".".rand(1, 255);
    $headers = array("X-FORWARDED-FOR:$ip");

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0");
    $src = curl_exec($curl);
    curl_close($curl);
    }
    ?>

上一篇: PHP用CURL伪造IP和来源

下一篇: 构造 HTTP请求 Header 实现“伪造来源 IP ”