本文目录一览:
- 1、为什么经过nginx反向代理后 反而出来了很多xss漏洞
- 2、nginx怎么防止ddos攻击cc攻击等流量攻击
- 3、nginx正则表达式
- 4、中企智导股权系统VG5.03S技术优势说明
- 5、如何判断 ngnix 走了 静态文件路径
- 6、如何进行Web渗透测试
为什么经过nginx反向代理后 反而出来了很多xss漏洞
试试腾讯电脑管家,杀毒+管理2合1,还可以自动修复漏洞:第一时间发现并修复系统存在的高危漏洞,在不打扰您的情况下自动为系统打上漏洞补丁,轻轻松松将病毒木马拒之门外。自动修复漏洞 电脑管家可以在发现高危漏洞(仅包括高危漏洞,不包括其它漏洞)时,第一时间自动进行修复,无需用户参与,最大程度保证用户电脑安全。尤其适合老人、小孩或计算机初级水平用户使用
nginx怎么防止ddos攻击cc攻击等流量攻击
nginx防止攻击,分流量攻击和cc攻击,如果是拒绝服务,只能判断然后限制一个ip,只访问几次 1. ngx_http_limit_conn_module 可以用来限制单个IP的连接数 2. ngx_http_limit_req_module 可以用来限制单个IP每秒请求数 3. nginx_limit_speed_module 可以用来对IP限速 试试ngx_lua_waf 功能: 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击 防止svn/备份之类文件泄漏 防止ApacheBench之类压力测试工具的攻击 屏蔽常见的扫描黑客工具,扫描器 屏蔽异常的网络请求 屏蔽图片附件类目录php执行权限 防止webshell上传
nginx正则表达式
“/index.php”请求同样先被字符location “/” 匹配,然后才被正则表达式“笔记:nginx是让客户端程序找到文件的目录位置。具体如何处理这个得让后端来
中企智导股权系统VG5.03S技术优势说明
中企智导股权系统VG5.03S技术优势说明
股权众筹平台面临的安全威胁
威胁股权众筹系统的风险来自不同层面,从网络层、系统层到应用层,都可能形成对系统直接或间接的威胁,目前行业常见的针对Web应用的攻击有:
● 缓冲区溢出——攻击者利用超出缓冲区大小的请求和构造的二进制代码让服务器执行溢出堆栈中的恶意指令。
● Cookie假冒——精心修改cookie数据进行用户假冒。
● 认证逃避——攻击者利用不安全的证书和身份管理。
● 非法输入——在动态网页的输入中使用各种非法数据,获取服务器敏感数据。
● 强制访问——访问未授权的网页。
● 隐藏变量篡改——对网页中的隐藏变量进行修改,欺骗服务器程序。
● 拒绝服务攻击——构造大量的非法请求,使Web服务器不能响应正常用户的访问。
● 跨站脚本攻击——提交非法脚本,其他用户浏览时盗取用户帐号等信息。
● SQL注入——构造SQL代码让服务器执行,获取敏感数据。
● URL 访问限制失效——黑客可以访问非授权的资源连接强行访问一些登陆网页、历史网页。
● 被破坏的认证和 Session 管理——Session token 没有被很好的保护 在用户推出系统后,黑客能够盗窃 session。
● DNS攻击——黑客利用DNS漏洞进行欺骗DNS服务器,从而达到使DNS解析不正常,IP地址被转向导致网站服务器无法正常打开。
中企智导安全研发中心依托强大安全技术资源优势,不断跟踪、挖掘、分析行业内新出现的各种漏洞信息和最新安全风险,从软件开发需求、架构设计、代码编译、数据库、服务器等各个方面,打造目前行业内最全面的股权众筹系统安全防护体系,中企智导安全盾甲确保股权众筹平台的安全稳定。
一、系统安全架构
网络安全
● 网络安全,基于硬件防火墙,杜绝网络攻击,为系统提供第一层防护,特别是高防IP特别针对目前流行的DDOS攻击进行防护。
● 防注入,CC攻击等安全机制保障网站安全稳定运行,防护多种DDoS类型攻击,包括但不限于以下攻击类型 ICMP Flood、UDP Flood、TCP Flood、SYN Flood、ACK Flood 等
● 对http、ping、dns、tcp、udp、smtp、pop、ftp等服务的可用性和响应时间的统计、监控、报警,第一时间进行响应处理
● 开发时进行防挂马代码写入,让框架代码等挂马无效。
● 监控远程操作协议,如RDP、SSH、TELNET、FTP等,以减少因远程运维而发生的信息泄密的事件。
● 系统根据管理策略对相应文件进行加密,用户访问需要连接到服务器,按权限访问,越权访问会受限,实现更多的访问控制。
● 确保密钥操作和存储的安全,密钥存放和主机分离
● 通过区域复制技术,其它冗余名称服务器(称为辅 DNS 服务器)用作同一区域中主服务器的备份服务器,以防主服务器无法访问或宕机。
● 通过对DNS报文的合规检查和DNS报文的速率控制,防止针对域名的DNS flood攻击。
服务器安全
● web漏洞检测:对网站SQL注入漏洞、xss跨站脚本漏洞、文件包含等各项高危安全漏洞进行检测。
● 后门文件检测:通过静态分析技术与虚拟机沙箱行为检测技术相结合,对网站进行后门文件检测,准确率95%以上。
● 端口安全扫描:通过定期扫描服务器开放的高危端口,降低系统被入侵的风险。
● 主机入侵检测:通过主机日志安全分析,实时侦测系统密码破解,异常IP登录等攻击行为为实时报警。
● 安全检查:关闭无用服务,使用最小服务集合,降低漏洞风险。
● 访问控制:针对用户及恶意攻击者访问信息时进行有效地控制,对于正常请求允许访问,对于恶意请求应及时进行阻止。
应用安全
● SSL证书:基于SSL 证书数据传输加密,保障信息传输不被窃取和篡改。
● 安全U盾:后台管理员配置U盾,银行级安全,防止管理员密码泄漏造成的风险,同时可以加强人员和权限的管理。
● 前后台分离部署:可将后台部署于内网,使攻击者被隔绝于网络之外,极大增加安全性。
● 创新数据签名技术:每一次资金变动都有相应的签名,随意修改时签名无法匹配,程序检验无法通过,自动终止相关账号所有操作,发送警告。防止黑客即内部技术人员人工修改资金数据。
数据安全
● 数据连接加密:数据库连接信息高强度加密,即使应用服务器被攻破,也没法直接连接和访问数据库。
● 数据签名:资金数据防篡改,凡是在资金交易的地方,都会本次的操作进行签名验证,若存在资金被篡改的情况则无法进行交易。资金数据每一次的变动都有签名,此签名用高强度加密算法生成,防止直接修改造成的系统风险。
● 数据加密:敏感数据加密存储,防止明文数据泄密的风险。
● 数据冷存储:定期将数据进行隔离冷存储,原有数据不可修改,是分析,对比的数据基础,保证了安装,同时利用读写分离技术,提升了系统的响应速度。
● 数据智能分析:智能分析系统里用户资金变动,能得出合理的用户收益变动曲线,有异常情况时能终止用户资金操作,提示系统管理员复核,在最后一步卡住系统被侵入的风险。
● 使用 USB KEY 认证等身份验证方式,对后台登陆进行身份认证,设置网络访问控制策略,只允许授权后的网络登录后台系统。
● 数据备份:每台RDS拥有两个物理节点进行主从热备。主节点发生故障,秒级切换至备节点。服务可用性高达99.99%。
● 数据库通过多库切分的方式,采用独立的数据库账号体系;防止一个账号拥有所有数据库的访问和修改权限;敏感信息的数据通过加密方式存储,杜绝黑客或内部技术人员恶意修改数据的非法行为。
二、全冗余处理
网络冗余
● 依据高访问量级,设计弹性可扩充的网络架构。使用负载均衡设备放置在前端,后端应用使用服务器群组方式,根据不同的量级,扩充后台服务器。
● 采用双防火墙双交换机做网络冗余,保障平台服务,采用双防火墙通知接通2线路互联网接入,设备之间采用VRRP协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络恢复后,自动恢复。
● 采用双千兆交换机分别接在2台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,根据业务及真实服务器的数量,交换机可以随时增加。
● 采用硬件设备负载均衡器,实现网络流量的负载均衡。使用硬件设备负载均衡器,将网络流量均衡的分担到WEB服务器集群各节点服务器,保障平台服务器资源均衡的使用。
● 采用代理服务器,实现软件级的网络负载均衡。
● 数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写与后台查询统计进行分离。
三、高容错处理
● 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),主-备方式(Active-Standby方式)即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器通过心跳诊断将standby机器激活,保证应用在短时间内完全恢复正常使用。
● 为用户构建高容错、高安全、高性能的集群容灾平台。多个功能模块之间相互协作,实现服务器、磁盘阵列、存储通道等软硬件完全容错,解决了传统高可用方案的单点故障,为用户构建零数据丢失和应用高可用保护的高级集群容灾方案。
● 存储之间的数据复制不经过网络,而是由存储之间进行复制。
● 两个存储之间的复制是完全实时的,不存在任何时间延时。
● 主备存储之间的切换时间小于500ms,以确保系统存储时不产生延时。
● 硬盘盘符及分区不因为主备存储之间的切换而改变。
● 服务器的切换,不影响存储之间的初始化,增量同步及数据复制。
● 某一存储设备的计划性停机,不影响整个服务器双机热备系统的工作。
● 存储设备之间使用重复数据删除技术,完成增量同步工作。
● 真正的7X24小时或切换的全冗余方案。
四、系统组件架构
● 技术参数说明
开发工具
Eclipse/MyEclipse
数据库
Mysql/Oracle
第三方控件
第三方支付 API、短信邮件 API、ID5、SSL、诚信网站验证 API
系统架构
web 服务器:ngnix+apache 做负载均衡
技术架构: shove.java.play+mysql
● 采用 JAVA+Mysql(Oracle)数据库+ CentOS 操作系统+ lvs + squid等组件,功能强大、免费,可运行于多种操作平台。
● 精炼开发语言,保证无冗余代码,运行速度超快。
● J2EE封装技术,保证源码安全。
● 面向服务器、面向组件的渐进技术理念、具有发展潜力,能保证产品技术的可扩展性。
● 多层次服务架构层设计,系统灵活、易维护,从根本上保证了系统的延展性与扩展性。
● 各层之间的松耦合,保证服务及业务流程可配置可重构。
● 网页HTML静态化,常用内容静态化,效率高,消耗小,避免了大量的数据库访问请求,提高了整个系统的响应。
● 图片与页面进行分离,这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,保证更低的系统消耗和更高的执行效率。
● 数据库集群和库表散列,在面对大量访问的时候,使用数据库集群或者库表散列,我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
● 使用复制方式的缓存集群该集群对于客户端应用来说是透明的,在一个缓存服务器宕机的时候,对于客户端来说没有影响。当一个应用更新了缓存的时候,该缓存实例通知集群中的其他缓存服务器,由缓存集群自动完成各个缓存服务器中缓存数据的同步。
● 通过动态口令验证后,所有在网贷平台上发生的交易都将通过短信方式进行提醒,方便实时掌握账户安全。为防止登录密码窃取,找回密码功能目前只支持手机戒邮件劢态口令找回。
如何判断 ngnix 走了 静态文件路径
Nginx以其消耗资源少,承受并发量大,配置文件简洁等特点,深受广大sa们的喜欢,但是网上传播的nginx 配置并没有对做过多的优化。那么接下来,我就从某大型媒体网站的实际运维nginx优化角度,来给大家讲解一下nginx主要优化的那些方面。
nginx的启动命令是:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confbr-c制定配置文件的路径,不加-nginx会自动加载默认路径的配置文件。br
停止操作
停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的
步骤1:查询nginx主进程号
ps -ef | grep nginx
在进程列表里 面找master进程,它的编号就是主进程号了。
步骤2:发送信号
从容停止Nginx:
kill -QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号
强制停止Nginx:
pkill -9 nginx
另外, 若在nginx.conf配置了pid文件存放路径则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文 件,我们就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令如下:
kill -信号类型 '/usr/nginx/logs/nginx.pid'
平滑重启
如果更改了配置就要重启Nginx,要先关闭Nginx再打开?不是的,可以向Nginx 发送信号,平滑重启。
平滑重启命令:
kill -HUP 住进称号或进程号文件路径
或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先检查一下修改过的配置文件是否正 确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令如下:
nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t
平滑升级
如果服务器正在运行的Nginx要进行升级、添加或删除模块时,我们需 要停掉服务器并做相应修改,这样服务器就要在一段时间内停止服务,Nginx可以在不停机的情况下进行各种升级动作而不影响服务器运行。
步骤1:
如 果升级Nginx程序,先用新程序替换旧程序文件,编译安装的话新程序直接编译到Nginx安装目录中。
步 骤2:执行命令
kill -USR2 旧版程序的主进程号或进程文件名
此时旧的Nginx主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧Nginx会同市运行,共同处理请求。
这时要逐步停止旧版 Nginx,输入命令:
kill -WINCH 旧版主进程号
慢慢旧的工作进程就都会随着任务执行完毕而退出,新版的Nginx的工作进程会逐渐取代旧版 工作进程。
此 时,我们可以决定使用新版还是恢复到旧版。
不重载配置启动新/旧工作进程
kill -HUP 旧/新版主进程号
从容关闭旧/新进程
kill -QUIT 旧/新主进程号
如果此时报错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:
kill -TERM 旧/新工作进程号
这样下来,如果要恢复到旧版本,只需要上面的几个步 骤都是操作新版主进程号,如果要用新版本就上面的几个步骤都操作旧版主进程号就行了。
上面就是Nginx的一些基本的操作,希望以后Nginx能有更好的方法来处理这些操作, 最好是Nginx的命令而不是向Nginx进程发送系统信号。
一、编译方面优化
1、首先就要从configure 参数分析,根据网上最常用的configure 参数来说,大都是:
# ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_ssl_module
应该说这个参数是通用的,适用于各种环境的需要,比如php环境、纯静态文件环境、代理环境等等。编译nginx程序文件大约有2M大小,跟全面优化的500多K,相差了不少。
下面我们修改一下参数,减少不必要的功能。
纯静态文件环境参数
# ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--without-http_fastcgi_module \
--without-http_proxy_module \
--without-http_upstream_ip_hash_module \
--without-http_autoindex_module \
--without-http_ssi_module \
--without-http_proxy_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--without-http_uwsgi_module \
--without-http_scgi_module \
--without-http_memcached_module
去掉了在mail模块fastcgi模块 代理模块 ip_hash模块等,在纯静态文件用不到的模块,现在看看nginx程序文件是不是少了一些。Php环境的话,只需要去掉 --with-http_fastcgi_module 重新编译即可。代理环境的话,只需要去掉--with_proxy_module重新编译即可。
2、去掉nginx 默认的debug跟踪设置。这一步需要修改nginx 源码。
# cd nginx-1.0.x
# vim auto/cc/gcc
第175行:前面加#注释掉改行。
#CFLAGS="$CFLAGS -g"
这样的话,编译的参数,就会减少到500多K的标准,这样在大并发量的条件下,性能提升明显。
二、利用google-perftools来优化高并发条件下的nginx
在32位系统下,可以直接安装google-peftools,64位条件下,需要先安装libunwind库。然后再nginx configure 参数增加--with-google_perftools_module 重新编译安装nginx。
这里以64位环境为准
1. 安装libunwind库
# wget
# tar zxvf libunwind-0.99.tar.gz
# cd libunwind-0.99/
# CFLAGS=-fPIC ./configure –prefix=/usr
# make CFLAGS=-fPIC
# make CFLAGS=-fPIC install
2. 安装google-perftools
# wget
# tar xzvf google-perftools-1.7.tar.gz
# cd google-perftools-1.7
然后开始配置:
# ./configure --prefix=/usr --enable-frame-pointers (32位可以不添加--enable-frame-pointers)
# make --j4 make installnginx
configure 参数加上--with-google-perftools 重新编译nginx
# ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--without-http_fastcgi_module \
--without-http_proxy_module \
--without-http_upstream_ip_hash_module \
--without-http_autoindex_module \
--without-http_ssi_module \
--without-http_proxy_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--without-http_uwsgi_module \
--without-http_scgi_module \
--without-http_memcached_module \
--with-google_perftools_module
# make make install
3、在nginx.conf 的pid部分下,增加
google_perftools_profiles /data0/google_cache;
# service nginx restart 重启即可生效。
4. 安装
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
wget
rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx
三、nginx 工作进程优化
nginx指令中的优化(配置文件)
worker_processes 8;
nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_rlimit_nofile 102400;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
use epoll;
使用epoll的I/O模型,这个不用说了吧。
worker_connections 102400;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
keepalive_timeout 60;
keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
内核参数的优化
net.ipv4.tcp_max_tw_buckets = 6000
timewait的数量,默认是180000。
net.ipv4.ip_local_port_range = 1024 65000
允许系统打开的端口范围。
net.ipv4.tcp_tw_recycle = 1
启用timewait快速回收。
net.ipv4.tcp_tw_reuse = 1
开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理。
net.core.somaxconn = 262144
web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。
net.core.netdev_max_backlog = 262144
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.ipv4.tcp_max_orphans = 262144
系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_syn_backlog = 262144
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_timestamps = 0
时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_synack_retries = 1
为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries = 1
在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 30
当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。
一个完整的内核优化配置
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
一个简单的nginx优化配置文件
如何进行Web渗透测试
什么是渗透测试?
渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,发现系统最脆弱的环节。
如何进行Web渗透测试?
完整web渗透测试框架当需要测试的web应用数以千计,就有必要建立一套完整的安全测试框架,流程的最高目标是要保证交付给客户的安全测试服务质量。
1、立项:项目建立,时间安排,人力分配,目标制定,厂商接口人确定;
系统分析威胁分析:针对具体的web应用,分析系统架构、使用的组件、对外提供的接口等,以STRIDE为威胁模型进行对应的安全威胁分析,输出安全威胁分析表,重点关注top3威胁;
制定测试用例:根据威胁分析的结果制定对应的测试用例,测试用例按照模板输出,具备可执行性;
测试执行漏洞挖掘:测试用例执行发散测试,挖掘对应的安全问题or漏洞;
问题修复回归测试:指导客户应用开发方修复安全问题or漏洞,并进行回归测试,确保安全问题or漏洞得到修复,并且没有引入新的安全问题;
项目总结评审:项目过程总结,输出文档评审,相关文档归档。
2、Web应用的渗透测试流程
主要分为3个阶段,分别是:信息收集→漏洞发现→漏洞利用,下面仔细分析一下各个阶段流程:
一、信息收集
在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等
脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等
测试方法:
1 爬取网站所有链接,查看后缀
2 直接访问一个不存在页面后面加不同的后缀测试
3 查看robots.txt,查看后缀
服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等
测试方法:
1 查看header,判断服务器类型
2 根据报错信息判断
3 根据默认页面判断
目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。
测试方法
1 使用字典枚举目录
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
数据库类型:对于不同的数据库有不同的测试方法。
测试方法
1 使应用程序报错,查看报错信息
2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)
所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。
测试方法
1 使用字典枚举页面
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
二、漏洞发现
在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。
关于开源软件的漏洞发现
开源的软件:常见的开源软件有wordpress、phpbb、dedecms等
开源的框架:常见的开源框架有Struts2、 Spring MVC、ThinkPHP等
中间件服务器:常见的中间件服务器有jboss、tomcat、Weblogic等
数据库服务:常见的数据库服务mssql、mysql、oracle、redis、sybase、MongoDB、DB2等
对于开源软件的测试方法
1 通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试
2 对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作
3 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan
关于自主开发的应用
手动测试:这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作
软件扫描:使用免费的软件扫描,如:appscan、wvs、netsparker,burp等
可能存在的漏洞
Owasp关键点
代码安全之上传文件
代码安全之文件包含
代码安全之SSRF
逻辑漏洞之密码重置
逻辑漏洞之支付漏洞
逻辑漏洞之越权访问
平台安全之中间件安全
三、漏洞利用
针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试
手工测试
手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。
这种方式对于有特殊过滤等操作,或者网络上没有成型的利用工具的时候可以使用。
工具测试
网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。