当前位置:网站首页 > 更多 > 站长帮 > 正文

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

作者:CC下载站 日期:2020-08-10 15:42:07 浏览:1213 分类:站长帮


前言


在当前互联网极速发展的时代,网络攻击手段也在极速的发展中,由于种种问题导致服务器被黑客渗透,下面就来介绍一下如何使用宝塔的插件,让黑客寸步难行

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

安全插件联动


一、Nginx防火墙插件和企业级防篡改插件联动

用过企业级防篡改的人都知道,企业级防篡改有些目录是不进行监控的,相当于白名单的意思,这就给了黑客一个突破的点,如果他们可以把php文件写入到那些不监控的目录,那么就成功突破了企业级防篡改插件,不过我们可以利用Nginx防火墙来进行补掉这个点

例如有如下代码

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

他把文件写入到了config目录下的a.php中,然后在企业级防篡改中默认是不监控config目录的,所以写入的时候会写入成功

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

写入php内容

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

可以看到是没有报错,那代表是写入成功的意思。访问config/a.php

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

不过我们可以在Nginx防火墙中,把那些企业级防篡改排除的目录加入到Nginx防火墙的URL黑名单中,这样别人就不可以访问到这个php文件了(这里比较粗暴了。建议加入在禁止执行PHP的URL)

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

设置完成后访问刚刚写入的a.php

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

除了防火墙还可以使用堡塔php安全防护进行拦截

还是刚刚的案例。这里使用的不允许config 访问

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

再次访问config/a.php

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

也是达到了一样的效果


思路总结:

利用黑白名单的思路。来结合两个防护插件的不足之处相互补充的地方。这样可以更好的守护网站的安全。


二、Nginx防火墙插件和PHP安全防护的联动

Nginx防火墙可以防御一些基本且常见的漏洞,但是某些低版本是存在绕过的问题(建议升级到最新版版)。所以这个时候使用堡塔的PHP安全防护就是特别有必要的地方了。

例如典型的thinkphp的代码执行漏洞,使用如下payload


?s=index/think\app/invokefunction&function=array_map&vars[]=assert&vars[][]=phpinfo();

防火墙拦截了。

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

使用如下payload

?s=index/think\app/invokefunction&function=array_map&vars[]=assert&vars[][]='phpinfo'();

假设绕过了Nginx防火墙

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

配合上我们的堡塔php安全防护,并且制定tp5.0规则

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

再次使用刚刚的Payload,成功拦截掉了

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

不过这里会暴露我们网站的绝对路径,按照下面配置屏蔽错误信息

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

保存然后重启php服务,配置就生效了,再次访问

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

思路总结:

利用多层次的防御手段会有更多方面的一个安全效果


三、全家桶

下面先用一个有漏洞的网站进行测试

假设下面是黑客攻击的目标

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

假设黑客通过fuzz手段成功找到了一个任意文件读取漏洞

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

通过读取配置成功获取到一个外部链接的mysql账号密码

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

发现进去mysql不可以执行命令,黑客想起网站的界面是一个典型的tp的网站,直接使用payload测试了一下

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

发现有这个漏洞,就直接上传大马来执行命令,假设站点没有禁用system函数

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

这样黑客就已经成功获取到了www用户的权限,最后黑客就会通过一些漏洞进行提权操作,这里就不演示了


防御方案

Nginx防火墙+PHP安全防护+企业级防篡改+OpenRasp+防提权

为什么要用这么多插件才可以抵御大部分的攻击呢?

这些插件都是根据黑客攻击流程进行定制的,黑客一般攻击流程:

寻找网站程序漏洞->查找该cms或框架是否有漏洞->上传木马->执行命令->提权

首先按照前面的Nginx防火墙加上企业级防篡改联动进行配置,把排除的目录放到Nginx的URI黑名单中

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

然后就是根据我们使用的框架或者cms,配置属于他的规则

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

开启OpenRasp

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

最后就是开启防提权了

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

刚刚的文件包含漏洞,拦截

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

tp5的rce,拦截

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

假设黑客都成功绕过了上面的拦截,接下来就是利用WebShell执行命令了,直接被OpenRasp拦截

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

假设绕过了OpenRasp,黑客肯定要尝试进行系统命令执行,被宝塔防提权拦截,如果设置了提醒还会发邮件提醒,让你第一时间收到网站被黑的消息

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

总结:

通过各个方面去剖析黑客的一个攻击流量。然后达到一个各个方向的一个防御。和通过这种案例来结合实际的用法。能更好的达到一个防御的效果


三、溯源小技巧

Nginx 记录POST记录并设置日志只允许追加

之前想融入到默认配置中。但是还是有一些会出现疑问。只能以文章的形式来配置

之前想过异步的存储日志的方式。尝试udp 的方式也是挺消耗性能。未找到一种合理的解决方案。

一、Nginx 的默认日志文件如下:





#设定日志格式,main是默认的格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                    '$status $body_bytes_sent "$http_referer" '                    '"$http_user_agent" "$http_x_forwarded_for"';

二、Nginx的内置函数





























































$args                    #请求中的参数值$query_string            #同 $args$arg_NAME                #GET请求中NAME的值$is_args                 #如果请求中有参数,值为"?",否则为空字符串$uri                     #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html"。$document_uri            #同 $uri$document_root           #当前请求的文档根目录或别名$host                    #优先级:HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名.请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称$hostname                #主机名$https                   #如果开启了SSL安全模式,值为"on",否则为空字符串。$binary_remote_addr      #客户端地址的二进制形式,固定长度为4个字节$body_bytes_sent         #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容$bytes_sent              #传输给客户端的字节数$connection              #TCP连接的序列号$connection_requests     #TCP连接当前的请求数量$content_length          #"Content-Length" 请求头字段$content_type            #"Content-Type" 请求头字段$cookie_name             #cookie名称$limit_rate              #用于设置响应的速度限制$msec                    #当前的Unix时间戳$nginx_version           #nginx版本$pid                     #工作进程的PID$pipe                    #如果请求来自管道通信,值为"p",否则为"."$proxy_protocol_addr     #获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串$realpath_root           #当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径$remote_addr             #客户端地址$remote_port             #客户端端口$remote_user             #用于HTTP基础认证服务的用户名$request                 #代表客户端的请求地址$request_body            #客户端的请求主体:此变量可在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理服务器$request_body_file       #将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传 递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off$request_completion      #如果请求成功,值为"OK",如果请求未完成或者请求不是一个范围请求的最后一部分,则为空$request_filename        #当前连接请求的文件路径,由root或alias指令与URI请求生成$request_length          #请求的长度 (包括请求的地址,http请求头和请求主体)$request_method          #HTTP请求方法,通常为"GET"或"POST"$request_time            #处理客户端请求使用的时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。$request_uri             #这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:"/cnphp/test.php?arg=freemouse"$scheme                  #请求使用的Web协议,"http" 或 "https"$server_addr             #服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中$server_name             #服务器名$server_port             #服务器端口$server_protocol         #服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1"$status                  #HTTP响应代码$time_iso8601            #服务器时间的ISO 8610格式$time_local              #服务器时间(LOG Format 格式)$cookie_NAME             #客户端请求Header头中的cookie变量,前缀"$cookie_"加上cookie名称的变量,该变量的值即为cookie名称的值$http_NAME               #匹配任意请求头字段;变量名中的后半部分NAME可以替换成任意请求头字段,如在配置文件中需要获取http请求头:"Accept-Language",使用$http_accept_language即可$http_cookie$http_host               #请求地址,即浏览器中你输入的地址(IP或域名)$http_referer            #url跳转来源,用来记录从那个页面链接访问过来的$http_user_agent         #用户终端浏览器等信息$http_x_forwarded_for$sent_http_NAME          #可以设置任意http响应头字段;变量名中的后半部分NAME可以替换成任意响应头字段,如需要设置响应头Content-length,$sent_http_content_length即可$sent_http_cache_control$sent_http_connection$sent_http_content_type$sent_http_keep_alive$sent_http_last_modified$sent_http_location$sent_http_transfer_encoding

如果只是记录POST的话。只需要加一个参数$request_body

如下:




log_format access '$remote_addr - $remote_user [$time_local] "$request" ''$status  $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" "$request_body"';

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

然后找到网站的配置文件

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

点击保存即可。访问之后呢,返回的日志格式为



192.168.10.1 - - [06/Aug/2020:15:55:41 +0800] "GET / HTTP/2.0" 304  0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" "-" "-"192.168.10.1 - - [06/Aug/2020:16:01:56 +0800] "POST / HTTP/2.0" 405  552 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" "-" "id=1"


POST 的日志的记录会在最后面。这样不影响大多数数据分析工具。

三、设置日志只允许追加

有时候大多数情况下,黑客都会及时的清理日志。这个时候需要配置一些让人恶心的动作了


chattr +a /www/wwwlogs/*.log

当对方尝试清空日志的时候


[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

会被直接拒绝清空日志。

有时候会碰到日志切割的问题。只需要在日志切割的地方取消a 然后切割完之后加上去即可

取消a 的方法


chattr-a/www/wwwlogs/*.log

总结:

如上的方式是为了能让所有的访问日志不留余力的在你面前展示。可以通过这些攻击日志来确认你的漏洞点的位置,能达到一个及时响应的一个效果。(PS:这个需要自己一个个做设置,网站多的话可能会自闭)


END

[网站攻防] 教你如何使用堡塔插件来防御网站被入侵和溯源攻击

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯