一、安装链接
1.pikachu官网下载
下载地址:https://github.com/zhuifengshaonianhanlu/pikachu
2.phpStudy下载链接
phpStudy下载(安装)-图文详解(windows)_victor_王泽华的博客-CSDN博客_phpstudy windows
二、pikachu简介
pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。
三、pikachu安装
1.先下载pikachu-master,解压到
2.修改config.inc.php文件,如图:
- 修改config.inc.php文件,如图:
- 下载phpMyAdmin
- 修改root密码,并添加数据库,如图:
- 打开phpMyAdmin,赋予sqli数据库权限,进行如下操作:
- 创建网站,进行如下操作:
- 进行如下操作:
SQL注入
什么是SQL注入?
是指web应用程序对用户输入的数据的合法性没有判断或者没有严格的过滤,攻击者可以在web程序中把定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
就是使用某种手段,在原来的SQL语句基础上,添加一段恶意的SQL语句并执行,从而达到不被管理员允许的目的
怎么防御?
建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询 语句中,这样任何注入行为都不能成功。井且考虑过滤一些参数,比如get参数和 post参数中对于SOL语言查询的部分。
1.内容过滤
2.字符转义,把一些特殊转义,比如PHP配置文件里的magic_quotes_gpc=On
3.杜绝SQL拼接
预编译 prepare statement
4.封装错误信息,不要给用户提供任何数据库错误信息
5.数据库权限控制
6.数据库定义,定义的复杂些
7.数据加密,不要明文存储数据
8.web应用防火墙,WAF
过滤特殊字符
所以防范的时候需要对用户的输入进行检查.
特别式一些特殊字符,比如单 引号,双引号,分号,逗号,冒号,连接号等进行转换或者过建.以下为需过滤 的敏感字符或者语句:
【1】net user
【2】xp_c«ndshel I
【3】add
【4】xec master.(fco. xp_cmdshelI
【5】net I oca Igroup administrators
【6】□select
【7】count
【8】Asc
【9】char
【10】mid
【11】%
【12】,
【13】:
【14】-
【15】 insert
【16】 delete from
【17】 drop table
【18】 update
【19】truncate
【20】 from
修改php.in
修改PHP中默认配置文件php.ini中的配置,来降低sql注入的风险
safe_mode = on //开启安全模式
magic_quotes_gpc = On 〃开启过建函数
display_errors = Off 〃禁止错误信息提示 注:JBnagic_auotes_gpc选项打开,在这种情况下所有的客户端GET和POST 的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是 不可行的,但要防止对数字值的SQL注入,如用intvalO等函数进行处理。 但如果你编写的是通用软件,则需要读取服务器的magic_Quotes_gpc后进行相应处理。
使用mysqli_real_escape_string()函数
对于MySQL用户,可以使用函数mysqli_real_escape_string():转义在 SQL 语句中使用的字符串中的特殊字符
加固数据库方面
1、 不要以sysadmin的身份连接数据库.而是使用特定的数据库用户,只具有读取,写入和更新数据库中适当数据的适当特权。此帐户定期检查, 确定它所具有的特权.
2、 以安全的方式创建SQL。让数据库来完成创建SQL的工作,而不是在代码 中完成。使用参数化SQL语句,同时也能提高查询的效率.
3、 保证数据库用户连接信息非明文保存.
加固管理方面
1.加强编程人员良好的安全编码意识,系统地学习安全编码的知识,减少 源代码泄鸯的风险。
2.建立起良好的代码审核、审查体系.由专人负责代码的审计,增加安全 监督环节。
Mybatis
【1】预编译
【2】like
1.MySQL
- Oracle
- sql server
【3】in
防火墙
XSS
什么是XSS?
SS作为OWASP TOP 10 之一
XSS被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(Cascading StyleSheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击) 主要基于javascript (JS) 完成恶意的攻
击行为。
JS可以非常灵活的操作html,css和浏览器,这使得XSS攻击的"想象"空间特别大。XSS通过将精心构造的
代码(JS)代码注入到网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。
当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来,用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascrit解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的对象是用户和浏览器。
漏洞发生在哪?
服务器、微博、留言板、聊天室等等收集用户输入的地方都有可能被注入XSS代码,都存在遭受XSS的风险,只要
没有对用户的输入进行严格过滤,就会被XSS
XSS的危害
XSS利用JS代码实现攻击,有很多种攻击方法,以下简单列出几种
盗取各种用户账号
窃取用户Cookie资料,冒充用户身份进入网站
劫持用户回话,执行任意操作
刷流量,执行弹窗广告
传播蠕虫病毒
XSS Platform 根据各种需求生成 XSS攻击代码 比如说获得管理员Cookie 等等
获得管理员cookie 就可以直接访问后台了
XSS的分类
XSS漏洞大概可以分为三个类型:反射型XSS、存储型XSS、DOM型XSS
反射型XSS(用户触发)
反射型XSS是非持久性、参数型的跨站脚本
反射型XSS的JS代码在Web应用的参数(变量)中,如搜索框的反射型XSS
反射型
就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析、执行。
存在 欺骗性,把存在反射型XSS漏洞的地址发给你,你点击了,造成XSS的攻击。
存储型
存储型XSS是持久性跨站脚本
持久性体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中,
存储型XSS通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写入数据库中。
此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS使用的JS代码,JS代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的XSS代码,才能真正触发XSS
DOM型
DOM XSS(使用DOM事件才能触发)
DOM XSS比较特殊。owasp关于DOM型号XSS的定义是基于DOM的XSS是一种XSS攻击
其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的其特殊的地方就是payload比较难以检测
可能触发DOM型XSS的属性
1、document.referer属性
2、location属性
3、innerHTML属性
XSS防御
【1】对输入和URL参数进行过滤(白名单和黑名单)
【2】对输出进行编码
在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。
对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的。
作为body文本输出,作为html标签的属性输出
URL属性
如果 < script> , < style> , < imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执
行恶意连接。
确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符。
HttpOnly 与 XSS防御
XSS 一般利用js脚步读取用户浏览器中的Cookie,而如果在服务器端对 Cookie 设置了HttpOnly 属性,那么js脚本就不能读取到cookie,但是浏览器还是能够正常使用cookie。
一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响 ,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie
信息的安全也保证了应用。如果你正在使用的是兼容 Java EE 6.0 的容器,如 Tomcat 7,那么 Cookie类已经有了 setHttpOnly 的方法来使用 HttpOnly 的 Cookie 属性了。
cookie.setHttpOnly(true );
XXE
什么是XXE漏洞?
XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。
这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
XXE防御
1、检查所使用的底层解析库,默认禁止外部实体的解析.
2、增强対系统的监控,防止此问题被人利用.
3、使用第三方应用代码及时升级补丁
4、对于PHP.由于sinplexml_load_string函数的XML解析问题出在1 ibxml库上,所以 加载实体前可以调用这样一个函数以进行防护
<?php // with the XM.Reader functionality: $doc = XMLReader::xml(SbadXml. ,UTF-8*. LIBXML_NONET): // with the DOM functionality: Sdom = new DOWocument 0 : $dom->1oadXML(SbadXml. L1BXML_DTDLOAD|L18XML_DTDATTR): ?>
5.
- JAVA
- Python
- .Net
- ASP
- 过滤字符
11、WAF
12、过滤用户提交的XML数据
过滤关键词:!ENTITY,或者SYSTEM和PUBLI
CSRF
什么是CSRF?
CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点 ,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF攻击原理比较简单,如图1所示。其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意
网站,User C为Web A网站的合法用户。
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
CSRF漏洞防御
1、验证HTTP Referer字段
2、在请求地址中添加token并验证
3、在HTTP头中自定义属性并验证
4、用户端的防御
CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。
5、 服务端的防御
验证HTTP Referer字段
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
在请求地址中添加token并验证
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于
Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
在HTTP头中自定义属性并验证
自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形
式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以
一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法
在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心
token会通过Referer泄露到其他网站。
6、 其他防御方法
CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时
要及时清除认证cookie,对支持TAB模式(新标签打开网页)的浏览器尤为重要。
尽量少用或不要用request()类变量,获取参数指定request.form()还是request. querystring (),这
样有利于阻止CSRF漏洞攻击,此方法只不能完全防御CSRF攻击,只是一定程度上增加了攻击的难
度。
SSRF
什么是SSRF?
服务端请求伪造攻击(Server-side Request Forgery)
很多web应用都提供了从其他的服务器上获取数据的功能。
使用用户指定的URL, web应用可以获取图片。下载文件,读取文件内容等。
这个功能如果被恶意使用,可以利用存在缺陷的web应用作 为代理攻击远程和本地的服务器.这种形式的攻击称为服务端请求伪造攻击 (Server-side Request Forgery) 。
—般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔绝的内部系统)。
SSRF形成的原因大都是由于服务端提供了从其他服务器应 用获取数据的功能且没有対目标地址做过滤与限制。
比如从指定URL地批获取网页文本内容,加载指定地址的图片,下载等等。
攻击者利用ssrf可以实现的攻击主要有5种:
1.可以对外网、服务器所在内网’ 本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或本地的应用程序(比如溢岀)。
3.对内网web应用进行指纹识别,通过访问默认文件实现。
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts?, SQli 等)。
5.利用file协议读取本地文件等。
SSRF防御
1、过滤返回信息,验证远程^务器对请求的响应是比较容易的方法。如 果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证 返回的信息是否符合标准。统一错误信息,避免用户可以根据错误信息来判断远 端服务器的端口状态。
2、限制请求的端口为http常用的端口,比如,80,443,8080.8090.
3、黑名单内网ip。避免应用被用来获取内网数据,攻击内网。
4、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于 file:///. gopher://, ftp:// 等引起的问题。
5、统一错误信息
6、设置URL白名单
失效的访问控制
原理:大多数Web页面需要验证功能级别的访问权限。但是,服务器需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求以在未经适当授权时访问某些页面。
逻辑漏洞
逻辑漏洞概述
访问
在某种程度上来说,信息安全就是通过控制如何访问信息资源来防范资源泄露或未经授权修改的工作。访问是主体和客体之间的信息流动,主体是访问中主动的实体,可以是人、程序、进程等;客体是被动的实体,可以是文件、光盘、数据库等。
访问控制
主体访问客体通常需要四个步骤:
- Identification 身份标识
- Authentication 身份验证
- Authorization 授权
- Accountability 审计
访问控制模型
访问控制模型是规定主体如何访问客体的一种架构,主要分为三种:
自主访问控制(DAC):由客体的属主自主的对客体进行管理,自主的决定是否将访问权限授予其他主体。
强制访问控制(MAC):安全策略由管理员配置,访问控制由系统实施,安全策略是高于一切的存在。
角色型访问控制(RBAC):使用集中管理的控制方式来决定主体和客体如何交互,更多的用于企业中,根据不同的职位来分配不同的权限。
什么是逻辑漏洞
逻辑漏洞是由于人的逻辑不严谨而导致的代码中的漏洞。由于人很容易犯错,所以逻辑漏洞一直都在。而且由于逻辑漏洞产生的流量多数为合法流量,一般的防护手段或设备无法阻止,也导致逻辑漏洞成为防护中的难题。
逻辑漏洞的分类
验证机制缺陷
验证机制是信息系统安全机制中最简单、最前沿的一种机制。最常见的方式是信息系统要求用户提交用户名与密码,正确则允许用户登录,错误则拒绝用户登录。
会话管理缺陷(HTTP协议)
无连接
每次连接只处理一个请求。服务器处理完客户的请求,并受到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
无状态
指协议对于事务处理没有记忆能力。
再给服务器发送HTTP请求后,服务器根据请求返回数据,但是发送结束后不会记录任何信息。
会话
执行会话最简单的方式是向每一个用户发布一个唯一的会话令牌或标识符,用户在每一个请求中同时提交令牌。
- 权限控制缺陷
从控制力度来看,可以将权限管理分为功能级权限管理和数据级权限管理;从控制方向来看,可以将权限管理分为从系统获取数据和向系统提交数据。
- 业务逻辑缺陷
每个业务系统都具有不同的业务逻辑,需要具体分析。
HTTP\HTTPS方法:
常见的 HTTP 请求方式
每一个 HTTP 请求在请求行里面会有一个东西叫做请求方式
不同的请求方式代表的含义不同
GET: 一般用于获取一些信息使用(获取列表)
POST: 一般用于发送一些数据给服务端(登录)
PUT: 一般用于发送一些数据给服务当让其添加新数据(注册)
DELETE: 一般用域删除某些数据
HEAD: 类似于 GET 的请求,只不过一般没有响应的具体内容,用于获取报文头
CONNECT: HTTP/1.1 中预留的方式,一般用于管道链接改变为代理的时候使用
PATCH: 是和 PUT 方式类似的一个方式,一般用于更新局部数据
OPTIONS: 允许客户端查看服务端性能
我们比较常用的就是 GET 和 POST
HTTP常见状态码
【200】请求成功。一般用于GET与POST请求
【304】未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
【400】客户端请求的语法错误,服务器无法理解
【401】请求要求用户的身份认证
【402】保留,将来使用
【403】服务器理解请求客户端的请求,但是拒绝执行此请求
【404】服务器无法根据客户端的请求找到资源(网页)。
【405】客户端请求中的方法被禁止
【406】服务器无法根据客户端请求的内容特性完成请求
【501】服务器过载或维护
【502】作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
【504】充当网关或代理的服务器,未及时从远端服务器获取请求
【505】服务器不支持请求的HTTP协议的版本,无法完成处理
目前服务端返回都是【500】 防止被测试服务器性能
get\postURL:
说到GET和POST,就不得不提HTTP协议,因为浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。
HTTP全称为Hyper Text Transfer
Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。
HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。
GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。
POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。
PUT:英文含义是放置,也就是向服务器新添加数据,就是所谓的增。
DELETE:从字面意思也能看出,这种方式就是删除服务器数据的过程。
GET和POST区别
Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。但是这种做法也不时绝对的,大部分人的做法也是按照上面的说法来的,但是也可以在get请求加上 request body,给 post请求带上URL 参数。
Get请求提交的url中的数据最多只能是2048字节,这个限制是浏览器或者服务器给添加的,http协议并没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。Post请求则没有大小限制。
Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
Get执行效率却比Post方法好。Get是form提交的默认方法。
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
Cookie:
cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。
session是依赖Cookie实现的。session是服务器端对象
session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid获取出会话中存储的信息,然后确定会话的身份信息。
编码
一. PHP的header()函数与HTML<meta>标签
HTTP响应格式
HTTP 响应包含四部分,一是Status Line,二是Header部分,三是Body部分,其中,二三部分由空行隔开。
Body部分是完整的文档,例如:
<!DOCTYPE html PUBLIC ...>
<html xmlns="" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" ></head>
<body>for test</body>
</html>
Status Line指出协议版本、响应编码和状态,例如:
HTTP/1.1 200 ok
Header部分提供关于缓存、编码、服务器信息等各种信息,例如:
Cache-Control:public
Content-Type:text/html;charset=gb2312
Expires:
Last-Modified:
注意到Header部分和Body部分都可能存在Content-Type,其中指定的编码指出该使用什么样的解码方式来解读发送给浏览器的文档。不过,浏览器会优先采用Header部分指定的Content-Type。
设置HTTP响应的Header部分的Content-Type,有多种方式。按优先级由高到低,一是在PHP文档(例如index.php)中使用header()函数;二是在php配置文件中指定default_mimetype和default_charset;三是在APACHE的配置文件httpd.conf中使用指令AddDefaultCharset 。这几种方式都会导致通过<meta>标签指定的字符编码被忽略,header()指出的编码优先级比httpd.conf中配置的编码高。尽量不要使用AddDefaultCharset,否则<meta>标签指定编码的方法就失效了;对于PHP程序,使用header()函数指出编码是好习惯,有比较好的移植性。
二. 文件本身的编码
老工程师倾向于统一字符编码为UTF-8,即,文件的编码为UTF-8,发送给浏览器的文件中,指明编码为UTF-8(通过<meta>或php的header()函数等),然后就省却各种转换。(通过<meta>和<header>等)
尤其是,AJAX默认接收的是UTF-8字符,如果在文件中给AJAX传递GB2312的参数,那就悲剧了,乱码无法避免。
为了使得在UBUNTU下创建的文件默认都是UTF-8编码的,我设置了LC_CTYPE="zh_CN.UTF-8"
方法是在 /etc/environment文件里添加 LC_CTYPE="zh_CN.UTF-8"。zh表示中文(拼音"zhongwen"),CN表示中国大陆(英语CHINA)。关于字符集,先说说UNICODE,UNICODE这个字符集使用四字节表示一个符号,但存储效率低;UTF-8和UNICODE类似,针对一些符号,使用比较少的字节进行编码。
设置之后,则若touch null.php;使用vi null.php并输入冒号及 set fileencoding可以查看文件的编码,比较奇怪的是,使用file --mime-encoding查看一个文件的字符集是无效的。在我的系统中,使用file命令查看一个含有中文字符的文件的字符集,结果将是iso-8859-1(此字符集不支持中文);而vi下使用set fileencoding能正确地显示UTF-8。
为了将以往的非UTF-8文件进行转码为UTF-8,我使用ICONV
对于使用其它编码的文件,可以使用iconv来转化成UTF-8格式。格式是,iconv -f 'gb2312' -t 'utf-8' file -o newfile 。
使secureCRT 和 putty 程序用UTF-8解析文件
secureCRT: 会话选项-->外观-->字符编码-->UTF-8
putty : 点左上角图标出现下拉列表--->点change settings-->点translation-->修改编码为UTF-8
使用SCREEN程序,在secureCRT 和putty下无法显示UTF-8的问题,修改.screenrc文件
去掉一下三行的注释
defutf8 on
defencoding utf-8
encoding utf-8 utf-8
VMware 下载
进入官网的 VMware Workstation Pro 页面,浏览功能特性、应用场景、系统要求等。下滑页面点击 试用 Workstation 16 Pro 下方的下载链接,跳转至下载页面。
在下载页面中下滑,根据操作系统选择合适的产品,在这里以 Windows10 系统为例,选择 Workstation 16 Pro for Windows,开始下载安装文件。
VMware 安装
打开下载好的 .exe 文件, 即可开始安装。
安装位置默认在 C 盘下,在这里我选择安装在 D 盘,安装路径尽量不要有中文。可勾选 增强型键盘驱动程序 ,此功能可更好地处理国际键盘和带有额外按键的键盘。
一直点击 下一步 等待软件安装完成。
安装成功后点击 许可证 输入密钥激活软件。
将密钥填写到文本框中点击 输入。
安装后可能要求重启系统,重启后进入软件。依次点击导航栏中的 帮助 -> 关于 VMware Workstation ,查看许可证信息的状态,如下图所示即为激活成功。
一、下载系统镜像文件
1.首先下载系统镜像,进入kali官网,在Downloads中选择Download Kali Linux,如下图所示。
2.根据电脑配置选择合适的版本,在这里我选择的是64位版本,点击HTTP下载镜像文件。
二、创建新的虚拟机
1.打开VMware Workstation,创建新的虚拟机,我们使用自定义的配置方法。
- 导入系统镜像文件。
- 选择客户机操作系统及版本。
- 输入虚拟机的名称和安装位置。
- 点击下一步直至出现以下界面。为虚拟机分配内存,建议不要超过提示的最大推荐内存,这里分配2GB。
6.继续点击下一步,使用推荐选项,直至出现磁盘容量分配。一定要比建议分配容量大!一定要比建议分配容量大!一定要比建议分配容量大!否则后面安装时会卡在奇怪的地方。
选择将虚拟磁盘存储为单个文件。
三、安装Kali Linux
1.开启虚拟机,进入安装界面,选择图形界面安装(Graphical install)。
- 自定义主机名。
- 按如下步骤进行。
- 这个时候可能会出现错误,如果没有错误,直接跳到第8步。
- 重启计算机,进入BIOS(我的是HP)
- 将Virtualization Technology改为Enable
- 保存并退出,重启后打开虚拟机,重新进行安装Kali Linux操作。
8.等待系统安装。如果配置虚拟机时分配磁盘空间不足,这个时候可能会卡死。
9.经过漫长的等待后,选择将GRUB安装至硬盘。
- 大功告成。
windows和kali的操作系统安装和工具安装
Windows
7
2003
2008
kali
工具安装时遇到的问题
需要tar-zxvf命令解压结尾是.tar.gz类型的文件
ls可以查看路径,方便选择
cd 文件目录 进入文件夹浏览
./vmware-install.pl 当前目录下执行
进入设置网络
vi/etc/network/interfaces
auto eth0 //指定eth0网卡
iface eth0 inet static //静态地址(动态获取用dhcp)
address 192.168.0.133 //IP地址
netmask 255.255.255.0 //子网掩码
gateway 192.168.0.1 //默认网关
重启网络/etc/init.d/networking restart
apache,nginx,lighttpd,tengine等php攻防环境搭建
phpstudy安装与使用
系统服务
生产时使用,开机自启
非服务模式
Mysql管理器
域名管理
数据库导入导出,备份还原
其他功能
查看phpinfo
php探针
针对数据库的操作
php扩展模块
Msql工具
修改密码,引擎等
切换版本环境
Apache
Nginx
IIS
phpcms搭建
在WWW中创建一个Bwapp文件夹
把文件转移进去
在浏览器地址栏 Ip地址phpcms/instal/linstall.php
开始安装
账号root密码root超级管理admin密码123456
index.php开始使用
bwapp
在WWW中创建一个Bwapp文件夹
把文件转移进去
在admin目录下设置文件,修改账号密码 连接用户localhost 数据库登录名root数据库密码 root 数据库名bwapp 创建网站后用户名bee 密码bug
在浏览器地址栏 Ip地址bwapp/bwapp/install.php
installed安装成功
登录选择攻防环境
pikachu-master
在WWW中创建一个pikachu文件夹
把文件转移进去
浏览器进入pikachu文件夹ubstall.php
初始化安装
开始使用
DVWA
在WWW中创建一个DVWA文件夹
把config.inc.php.dist的dist去掉
设置文件,修改账号密码 连接用户192.0.0.1数据库登录名admin数据库密码 password 数据库名dvwa 创建网站后用户名bee 密码bug
创建数据库
登录
有关IIS注意事项win7 win2008 IIS7快速安装PHP
http://phpstudy.php.cn/a.php/182.html
其他导入注意
网上下载的一个漏洞文件和一个数据库文件如何使用
phpstudy中数据库命令行,创建数据库
常用命令
连接数据库
#对应安装目录data/bin里mysql.exe -h 要连接的数据库地址 -u密码 -p
导出备份
mysqldump -h导入地址 -P端口号 -u用户名 -p密码 想导出的库>c:\sql.sql
导入
mysql -h127.0.0.1 -uroot -proot sql < sql.sql
也可以通过source 命令导入
source 命令导入数据库需要先登录到数库终端:
mysql> create database abc; # 创建数据库
mysql> use abc; # 使用已创建的数据库
mysql> set names utf8; # 设置编码
mysql> source c:/sql.sql # 导入备份数据库
更改漏洞文件连接方式与数据库信息一致,访问数据库?id=1
有时版本不一样连接方式可能不同,出现错误
asp+aspx+mssql攻防环境搭建
asp、aspx攻防程序部署
2003上装新的操作系统,控制面板,添加程序,装入光盘,添加asp.net
找到刚安装的IIS
禁用默认网站
新建网站,填写IP地址 80端口(下一次就不能再使用),路径WWW文件夹运行脚本
web服务扩展Active Server Pages启用
wwwtest.rar里面是之后要用的流动环境,解压带C盘www文件夹下
SQL Server2008
安装 .net 框架
从光盘打开setup.exe
功能要全选
对所有SQLSERVER服务使用相同账户(创建超级账户),浏览,高级,立即查找,设置密码
身份验证模式混合验证,添加一个管理员,为当前用户
在SQL Server点击管理控制台
导入库
附加数据库
IIS新建网站
路径为sqlserver路径,就可以访问了
问题
.net安装的默认版本可能与程序需要的框架不同可能会出现错误
tomcat+Struts环境搭建(运行jsp,框架简单)
jspstudy快速安装
功能
可以切换版本
可调整apache和Tomcat解析顺序
站点管理
WWW目录下是测试文件
structs开发之后打包是以.var结尾(文件多的正常都是打包之后再部署,相当于压缩)
默认根目录是tomcat/webapps
打包的文件放进去之后自动解析
部署完成后验证
jboss环境搭建
jdk安装(一定要能执行javac命令才是成功)
配置环境变量,注意路径
1、安装jdk配置环境变量
新建系统变量,变量名为:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.6.0_45\
新建系统变量,变量名:Path 变量值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
新建系统变量,变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
新建用户变量,变量名为:Path 变量值:%SystemRoot%/system32;%SystemRoot%;%JBOSS_HOME%\bin
2、下载jboss并配置运行环境变量
新建系统变量,变量名为:JBOSS_HOME 变量值:c:\jboss
变量名为:SystemRoot 变量值:C:\Windows
3、环境变量配好之后,需要为JBOSS添加用户,调用dos窗口,输入命令add-user
可参考:https://blog.csdn.net/yilisha258/article/details/80287913
4、运行C:\jboss\bin\run.bat 输入http://localhost:8080/ admin admin登录
只能用本地连接
5、端口及ip修改
进入 jboss-6.1.0.Final\server\default\deploy\jbossweb.sar
编辑 server.xml 搜索 “8080″和${jboss.bind.address}改为80及ip为:0.0.0.0
0.0.0.0表示类ip地址
或直接运行run.bat -b 0.0.0.0
6、登录控制台(账号密码都是admin)找到web application(war)s--add anew resource--选择war文件上传--会将打包的文件进行部署
访问:http://192.168.0.86:8080/test3693/
2016
weblogic攻防环境搭建
一、下载weblogic
1. 安装weblogic.jar
1.1 把下载好的weblogic.jar复制粘贴到虚拟机,
1.2 点击右键打开方式–>2345好压打开–>把文件拖出来
1.3 打开脚本install.cmd
1.4 不需要任何修改,点击下一步直到安装完成
1.5 创建一个新域:create a new domain
1.6 输入口令,本文设为weblogic2!
注:口令必须至少包含数字字符,且至少包含一个数字或一个特殊字符
1.7 勾选管理服务器,下一步后来到下图点击创建
1.8 双击启动服务
双击weblogic启用 C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\startweblogic.cmd
1.9 打开浏览器访问网站 例如:
http://ip地址或计算机名:7001/console
如果有报错:deploying application for /console…说明文件还没加载完,稍等会刷新即可跳转网站登录页面
输入用户名:weblogic
口令:weblogic2!
即可登录成功
二、部署网站
点击–>部署–>安装–>上载文件–>部署档案:选择文件jobfan.war–>下一步–>下一步–>完成
打开浏览器输入ip地址http://192.168.18.219:7001/jobfan/no.jsp查看网站是否部署成功,密码xxxxxx
三、导入网站数据库
1.开启phpStudy,切换版本换到php-5.2.17 + Apsche
2. 把要导入是文件放在www目录下
导入数据库命令
导入网站数据库到数据库,可通过以下命令完成:
打开myqsl命令行,输入密码
create database abc; # 创建数据库
use abc; # 使用已创建的数据库
set names utf8; # 设置编码
source c:\phpStudy\www\sql.sql # 导入备份数据库
导入检查
查看数据是否上传成功
show databses; 查看库
show tables; 查看表
select *from user; 查看内容
一、域名信息收集:
首先,在得到一个目标的域名后,我们要做的第一件事就是去获取域名的注册信息,即该域名的DNS服务器信息和注册人的个人信息等。
域名信息收集的常用方法有以下几种:
1、Whois查询:
Whois是一个标准的互联网协议,可用于查询域名是否被注册,以及注册域名的详细信息(如域名所有人、域名注册商等)。通过Whois查询得到注册人的姓名和邮箱信息对测试个人站点非常有用,因为我们可以通过搜索引擎和社交网络挖掘出域名所有人的很多信息。对中小站点而言,域名所有人很可能就是管理员。
使用方法:
1、通过在线网站:
站长之家:https://whois.chinaz.com/
- 通过kali自带的whois查询工具:
也可以在windows下安装使用 下载链接,安装方法可以参考这篇文章:链接,安装完成后使用方法和kali的一样。
2、备案信息查询:
网站备案是根据国家法律法规规定,需要网站的所有者向国家有关部门申请的备案,这是国家信息产业部对网站的一种管理,为了防止在网上从事非法的网站经营活动的发生。主要针对国内网站,如果网站搭建在其他国家,则不需要进行备案。
常用的查询网站有:
ICP备案查询:http://icp.chinaz.com/
二、敏感信息收集:
面对某些安全做得很好的目标,直接通过技术层面很难完成渗透测试。在这种情况下,可以利用搜索引擎对目标暴露在互联网上的关联信息进行搜集。例如:数据库文件、SQL注入、服务配置信息,甚至是通过Git找到站点泄露源代码,以及Redis等未授权访问、Robots.txt等敏感信息,从而达到渗透目的。
收集敏感信息的常用方法:
1、Google Hacking语法:
Google Hack是指使用Google、百度等搜索引擎对某些特定网站主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的。
对于普通的用户而言,Google只是一款强大的搜索引擎,而对于渗透人员而言,它可能是一款绝佳的黑客工具。正因为Google的检索能力强大,我们可以构造特殊的关键字语法来搜索互联网上的的相关敏感信息。
常用语法:
Site:找到与指定网站有联系的URL。例如输入“Site:family.chinaok.com”。所有和这个网站有联系的URL都会被显示。
Intitle:搜索网页标题中包含有特定字符的网页。例如输入“intitle: cbi”,这样网页标题中带有cbi的网页都会被搜索出来。
Inurl:搜索包含有特定字符的URL。例如输入“inurl:cbi”,则可以找到带有cbi字符的URL。
Intext:搜索网页正文内容中的指定字符,例如输入“intext:cbi”。这个语法类似我们平时在某些网站中使用的“文章内容搜索”功能。
Filetype:搜索指定类型的文件。例如输入“filetype:cbi”,将返回所有以cbi结尾的文件URL。
这些就是Google的常用语法,也是Google Hack的必用语法。虽然这只是Google语法中很小的部分,但是合理使用这些语法将产生意想不到的效果。
例:当我们想获取一些政府网站的后台页面时,可通过构关键字 site:gov.cn intext:后台管理来实现搜集,意思是搜索网页正文中含有“后台管理”并且域名后缀是 gov.cn的网站。
可以看到利用Google Hacking语法搜索,可以很高效地得到我们想要的信息,还可以用它来收集数据库文件、SQL注入、配置信息、源代码泄露、未授权访问和robots.txt等敏感信息。(更详细的Google Hacking语法介绍可以看这篇文章:传送门)
接下来介绍另一款资产信息搜集神器:fofa
2、FOFA网络安全空间搜索:
链接:https://fofa.so/
FOFA网络安全空间搜索 是专为渗透人员设计的一款搜索引擎,其相对于Google 的知名度相对低了一些,但是对于渗透人员这是款信息收集的神器。用途大致和Google一样,就不多介绍了。
来简单说下其查询语法:
官方上给的很清楚,这里简单演示下如何使用:
需要注意,在fofa中,多条件查询是用&&和||来连接的,什么意思就不解释了。
例:查找一些后台管理且地点在杭州的资产信息:构造语法:title ="后台管理"&&city="Hangzhou
还可以查找指定开放的端口网站,例:查找开放了3389 端口的后台管理系统:port="3389"&&title="后台管理"
- Github信息泄露:
GitHub作为一款应用最广的开源代码平台,给程序员提供了很多便利,但如果使用不当,比如将包含了账号密码、密钥等配置文件的代码上传了,导致攻击者能发现并进一步利用这些泄露的信息,就是一个典型的GitHub敏感信息泄露漏洞,再如开发人员在开发时,常常会先把源码提交到github,最后再从远程托管网站把源码pull到服务器的web目录下,如果忘记把.git文件删除,就造成此漏洞。利用.git文件恢复网站的源码,而源码里可能会有数据库的信息。
很多网站及系统都会使用pop3和smtp发送来邮件,不少开发者由于安全意识不足会把相关的配置文件信息也放到Github上,这时配合我们的Google搜索语法,就能把这些敏感信息给找出来了。
site:Github.com smtp
site:Github.com smtp @qq.com
site:Github.com smtp @126.com
site:Github.com smtp @163.com
site:Github.com smtp @sina.com.cn
可以看到,很容易就能得到这些敏感数据信息。
获取数据库信息泄露:
site:Github.com sa password
site:Github.com root password
Shodan:
通过SHODAN搜索:
搜索联网的设备
Banner:http、ftp、ssh、telnet
https://www.shodan.io/
常见filter:
net(IP地址)
- net:103.45.249.40/24(搜索一个段)
- City(通过城市进行筛选)
- country(CN、US)(筛选地点)
- PORT(80,21,22,23) //筛选端口
OS(以操作系统筛选,例如:【OS:linux】)
Hostname(主机或域名)【以主机名搜索,例如hostname:baidu.com】
Server(以server软件搜索,例如server:Apacha2.2.3)
实例演示
200 OK cisco country:JP(包含200OK、cisco,城市筛选为日本)
注:200 OK代表可返回正常页面的网页面,cisco为筛选思科设备,country也筛选城市;User:admin pass:password(筛选用户名和密码)linux upnp avtech(筛选摄像设备