网易web白帽子学习笔记

 部分转载他人

1、web基础知识

1.1.1web介绍

world wide web 万维网javascript

web1.0  我的网站、门户站点  静态页面php

web2.0  微博、博客交互式页面css

随之而来有一些安全问题:html

用户经过浏览器访问网站,浏览器对服务器请求资源前端

web工做流程:

浏览器工做流程:

  1. web是什么?
  2. web发展分为哪几个阶段?
  3. web安全问题的发展形式?
  4. web的工做流程?
  5. 浏览器是如何工做的?

1.1.2web通讯

URL统一资源定位符java

http 超文本传输协议,web通讯使用的协议,web基础mysql

http请求方式:web

get请求不会返回数据体sql

postshell

  1. http referer  如用百度搜索点击到页面和直接输入url点击链接到页面(告知服务器该请求的来源,浏览器自动加上,防止盗链,csrf漏洞)
  2. url是什么?
  3. 描述一下url的格式?
  4. cookie和set-cookie(服务器要求浏览器设置cookie,好比用用户名、密码登录后服务器就给浏览器颁发cookie)
  5. referer做用?
  6. 状态码301/302(跳转状态码)和location(跳转的地址)

1.2.1HTML

语法,html dom

js动态效果,css图片

html不区分大小写

dom 文档对象模型 将文档转换为树形结构 更直观地了解页面元素,经过js能够对页面进行任意操做

  1. html包含哪两部分 ?head,body
  2. html  dom结构?

1.2.2javascript

dom 链接web和编程语言   js+dom访问和操做html文档的标准方法

bom 链接浏览器和编程语言

1.2.3web服务器环境

http://phpstudy.net/phpstudy/phpStudy.zip

下载安装windows下的集成环境,这里用Apache

 

 Apache服务

URL:协议、服务器名称、路径、文件

经过记事本打开:C:\Windows\System32\drivers\etc\hosts
添加 test.123.com(192.168.58.1)
web服务器环境搭建,经过上面的文件夹能够自定义服务器域名
在搜索栏经过手动输入就能够打开

网站根目录,将html存放在 test.123.com 下,就能够访问到了

1.2.4后端开发基础--SQL

SQL概述:

创建数据库:

SQL对大小写不敏感

 

数据表介绍:

 打开mysql命令行  其余选项菜单--mysql工具--mysql命令行

密码默认为root


 

create database websecurity;(建立一个名为websecuity的数据库)

 show databases;(显示已有的数据库)

use websecurity; (使用数据库时就要切换到此处)

create table teacher(

    ->  id int(4) not null primary key auto_increment,

    ->  name char(20) not null,

    ->  sex char(10) not null,

    ->  addr char(20) not null

    -> );  (建立一个名为teacher的标签)

show tables;

select * from teacher;  (查询表中的数据)

INSERT INTO teacher(name,sex,addr) VALUES("Lee","male","beijing");  (插入数据,id为自增的,不用咱们添加)

UPDATE TEACHER SET name = 'Amily' WHERE id = 1;  (更新数据,将id为1的那行name值更改)

DELETE FROM teacher WHERE name='Amily';(删除其中一行)

 

对数据进行筛选:

select 你要的信息 from 数据表(或多个)where 知足的条件(条件判断)

select * from teacher where addr='beijing' and sex='male';

select name teacher where addr='beijing' and sex='male';

'*'表明全部符合数据 

第二行语句显示出来的就只是name的那一行

where也可用于update或delete中

 

对数据进行排序:

select * from teacher order by name;(对name列进行排序   ASC(升)/DESC(降)默认升序排列)
select * from teacher order by 2; 结果同上,2表示对第二列进行操做

 

将两个表中的数据合并:

select 你想要的信息 from 数据表1 union select 你要的信息 from 数据表2
select name from teacher union select name from student
如有两个相同项,只显示一个
想要所有显示,用union all

 

注释:
单行:#...  (...表示注释的内容)
      --(此处一个空格)...

多行 :/*...*/

常见的内置函数
database();

current_user;
load_file() 文件要再次加反斜杠,由于会忽略了转义
version()
into+outfile 写入文件


 

1.2.5php

超文本预处理器

用php导出、导入数据库

导出:打开mysql命令行,查看数据表是否存在

打开cmd

>D:\phpStudy\MySQL\bin\mysqldump.exe -u root -p websecurity >C:\Users\nihao\Desktop\websecurity.sql
Enter password: ****

 

D:\phpStudy\MySQL\bin\mysqldump.exe  直接找到文件拖拽过来便可(mysqldump为导出)

 

-u root  用户名

-p 密码 输入后会显示出来,因此先放着,后面会提示要输入密码

数据库名称

>存储位置   若是没有,会新建;有的话,也能够直接拖拽

 

导入:

 drop database websecurity; (以前导出的事例中已经把websecurity导出,此处为了实验,就先删掉)

 source C:\Users\nihao\Desktop\websecurity.sql

此时在文件中手动添加了如下画红线的部分

要是没有在sql文件中加入上两行,就要在mysql命令行中先输入上两行,再用source导入

 

1.3.1web基础知识

web前端开发语言大体介绍

web后端开发语言大体介绍

web开发语言设计大盘点

 

在浏览器输入url后的web流程

 

 

 

2、web安全基础

常见的安全问题

钓鱼

发送伪造连接邮件,骗取受害者

 

经过伪造网址让咱们跳转到别人设置的页面,此页面可能会让咱们输入本身的我的信息

  • 诱惑性标题
  • 仿冒真实网站
  • 骗取用户帐号
  • 骗取用户资料

篡改

关键字

  • hacked by

搜索引擎语法

  • Intitle:Keyword 标题中含有关键词的网页
  • Intext:Keyword 正文中含有关键词的网页
  • Site:domain 在某个域名和子域名下的网页

暗链

攻破网站后植入第三方

 

 入侵后添加连接,隐藏在网页的连接

放入暗链主要是提升在搜索引擎的排名,别人在搜索关键字时,这些暗链的网站能够排到前面

webshell

大马

小马:一句话木马

webshell主要是后门,控制的流量和正常的流量混合在一块儿,不易被发现

常见的web漏洞

2.1.2XSS跨站脚本

经过插入恶意脚本盗取用户信息、钓鱼、制造蠕虫等

分类:

  • 存储型xss,存储在服务器中 
  • 反射型xss,从url中触发xss脚本
  • DOM型xss,经过前端JavaScript将脚本写到dom中触发,经过后端写到响应页面中,渲染时才会触发,在url的hash中

 

因此直接查看源码查找的是后端源码,经过搜索xss没法定位

经过f12查看当前页面源码,查找xss能够看到经过JavaScript调用的语句,发现是经过hash调用,

经过本页面右击查看源码,查找hash,发现后端触发xss语句

2.1.2CSRF跨站请求伪造

概念:

利用用户已登录的身份,在用户绝不知情的状况下,以用户的名义完成非法操做

经过view-source查看url,发现用户构造了转帐的form表单,经过form表单提交会有明显的网页跳转状况

经过iframe嵌入,用户看到的是外层页面,感觉不到嵌入网页的跳转状况,才能使用户不知情的状况下完成操做

2.2.3点击劫持

1.前置知识

相信你们都见过俄罗斯套娃,一层嵌套一层,在打开以前,内部是不可见的。网站也能够实现相似的操做

iframe标签能够建立包含另外一个文档的内联框架

在浏览器中打开,便可打开到src中的网页

实例:

对网页进行透明度设置为0,则网页不可见。若在网页上可放上“点击我”的图片,当咱们点击时就会触发隐藏在图片之下的网页按钮

点击劫持:经过覆盖不可见的框架误导受害者点击而形成的攻击行为

特色:

  •  隐蔽性高
  • 骗取用户操做
  • UI-覆盖攻击
  • 利用iframe或其它标签的属性

 实例:(这是视频中实例代码的,可是我不知道哪里错,等我知道了再回来改,欢迎指正)

<!Doctype html>
<html>
<meta http-equiv="Content-Type" content="text/html charset=utf-8" />
<head>
<title> 点击劫持</title>
<style>
    html,body,iframe(
        display:block;
        height:100%;
        width:100%;
        margin:0;
        padding:0;
        border:none;
    )/*被隐藏网页的设置*/
    iframe(
        opacity:0;
        filter:alpha(opacity=30);/*IE*/
        -moz-opacity:0.5;/*noz+fflush*/
        opacity:0.5;/*支持css的浏览器*/
        position:absolute;
        z-index:2;
    )/*调整网页可见度*/
    /*设置多个opacity,提升不一样网页的兼容性*/
    button(
    position:absolute;
    top:-5px;
    left:875px;
    z-index:1;/*图片与视觉的距离*/
    width:72px;
    height:26px;
    )
    
</style>
</head>
    <body>
        <button><img src="C:\Users\nihao\Desktop\222.jpg"></button>
        <iframe src="https://www.baidu.com/></iframe>
    </body>
</html>
View Code

2.2.4URL跳转漏洞

定义:借助未验证的URL跳转,将程序引用到第三方不安全的区域,从而致使安全问题

实现方式:

Header头跳转

javascript跳转

META标签跳转

2.2..5SQL注入

 能够访问和修改数据,或利用潜在的数据库漏洞进行攻击

例题:

流程:

  1. 获取用户请求参数
  2. 拼接到代码中
  3. SQL语句按照咱们构造参数的语义执行

必备条件:

能够控制输入的数据

服务器要执行的代码拼接了控制的数据

本质:数据和代码未分离,即数据看成了代码来执行

2.2.6命令注入

 

基本操做:

  • win+r 打开cmd
  • 查看本地网络:ipconfig
  • 查看系统用户:net user
  • 查看当前目录:dir "./"
  • 字符串查找:C:\Users\nihao>find "DELETE" C:\Users\nihao\Desktop\mysql.txt
  • 结果以下:
    • ---------- C:\USERS\NIHAO\DESKTOP\MYSQL.TXT
    •  DELETE FROM teacher WHERE name='Amily';(删除其中一行)

实例:

curl-I 请求网址并返回http响应头

实际中“&”在url中为参数分隔符,但咱们想让它作命令拼接符 就要进行转义 %26

过程介绍:

2.2.7文件操做漏洞

  • 文件上传漏洞
  • 任意文件下载
  • 文件包含漏洞

1.文件上传漏洞:

上传可执行脚本

2.任意文件下载

可能致使代码泄露、数据库配置文件泄露、系统文件泄露等

利用缘由:未验证下载文件格式

    未验证请求的路径

3.文件包含漏洞

  • 本地文件包含
  • 远程文件包含

测试远程文件包含的漏洞中,下面两个内容要开启

 

 

3、web漏洞扫描工具初级

3.1敏感文件探测

类型:

  • 网站管理后台
  • 数据文件
  • 备份文件
  • Webshell

实质:经过猜想文件名,根据返回的http状态码判断文件是否存在

HTTP状态码详解

 

扫描工具:御剑

扫描时所用的字典并非越大越好,因此经过判断目标网站可能的脚原本选择字典

3.2漏洞扫描工具的入门

综合性Web漏扫工具:AWVS,Netsparker,AppScan

使用漏洞扫描工具可能存在的问题:

1.对目标站点进行误伤:

如高流量,请求了危险的功能

2.盲区:逻辑漏洞

3.评级

4.漏扫工具的解读和应用

  • 测试用例可能须要调整,就是表面上看扫出来的结果没什么,但经过进一步查看可能发现漏洞
  • 误报 与 漏报
  • 将扫描结果做为人工测试的线索

3.3SQL注入

复习:

SQL注入主要是由于要执行的数据库代码拼接了用户的输入的数据

获取数据库敏感数据(拖库)

 

4、在线工具

搜索引擎的高级搜索语法

site:搜索特定的站点信息

info:站点的基本介绍

inurl:搜索URL中包含有指定字符串的网址

intitle:搜索网页标题中包含指定的字符串网址

intext:搜索站点页面内容中具备关键字内容的网址

filetype:搜索特定后缀名的文件

bing英文版直接输入ip:xxxxx,同ip站点查询,旁站

 

实例:

找到目标站点登录地址并暴力破解密码

  • site:testphp.vulnweb.com inurl:(login|admin)

像查看目标站点有没有泄露的数据库文件

  • site:testphp.vulnweb.com filetype:sql

 

site:http://testphp.vulnweb.com/ inurl:phpinfo.php

交互页面

  • site:http://testphp.vulnweb.com/ inurl:php?

若是目标站点关闭,能够查看浏览器的缓存:

  • cache:http://testphp.vulnweb.com

 

网络空间搜索

万物互联:我的计算机和服务器、路由器、智能家居、手机、电脑等

如何把每个接入互联网的设备看做一个节点,就构成了咱们的网络空间

SHODAN

ZoomEye

FOFA

基本原理:探测/爬取--》识别/打标签--》存储拱检索

在线网络工具 

基本的站点信息探测:whatweb.net

ip查询:www,ipip.nwt

www.cmd5.com

tool.chinaz.com

安全导航站点:www.anquanquan.info/#tools

 5、Web安全体系建设

防护:

输入检查:

  • 在服务器端检查
  • 数据合法性校验:类型、范围、长度、
  • 尽量使用“白名单”

输出检查;

  • 进行特定的过滤和转义,不让程序报错中显示暴露数据信息

针对性防护:

  • 例如重要的cookie设置为httponly,这样xss就获取不到该cookie

WAF:

  • 防火墙

修复

漏洞知识库

漏洞修复周期

漏洞复查

安全事件应急响应流程

事件确认:

  • 由产品方、安全方确认事件的真实性
  • 必要时和运维、公关、法务等其余团队共同确认

事件汇报:

  • 根据时间等级额外通知对应的负责人

事件处理:

  • 成立安全应急小组
  • 应急方案肯定
  • 应急方案执行
  • 事件恢复

归档和复盘:

  • 进行总结

 

 SDL

(Security Development Lifecycle 安全开发生产周期)

旨在从源头下降风险,提高web安全应用的安全性

 

 

模糊测试

 

《互联网企业安全高级指南》 第三章

常见的安全漏洞提交平台:待补充--

 

 

 

 

ftp、https、file三种协议:

FTP是File Transfer Protocol,文件传输协议;

HTTP是Hyper Text Transfer Protocol,超文本传输协议;

FILE是本地文件传输协议

FTP:

(1)FTP比HTTP复杂

FTP和HTTP同样都是Internet上普遍使用的协议,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的缘由,是由于FTP协议要用到两个TCP链接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另外一个是数据链路,用来上传或下载数据。

(2)FTP协议有两种工做方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求,服务器接受链接,创建一条命令链路。当须要传送数据时,客户端在命令链上用PORT命令告诉服务器:“我打开了XXXX端口,你过来链接我”。因而服务器从20端口向客户端的XXXX端口发送链接请求,创建一条数据链路来传送数据。

PASV(被动)方式的链接过程是:客户端向服务器的FTP端口(默认是21)发送链接请求,服务器接受链接,创建一条命令链路。当须要传送数据时,服务器在命令链上用PASV命令告诉客户端:“我打开了XXXX端口,你过来链接我”。因而客户端向服务器的XXXX端口发送链接请求,创建一条数据链路来传送数据。

从上面能够看出,两种方式的命令链路链接方法是同样的,而数据链路的创建方法就彻底不一样。而FTP的复杂性就在于此。

 

 

HTTP

 

当咱们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就能够了,例如http://www.microsoft.com,可是在浏览...w.microsoft.com ,你知道为何会多出一个“http”吗?

 

(1)HTTP协议是什么

咱们在浏览器的地址栏里输入的网站地址叫作URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址同样,每一个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级连接时,URL就肯定了要浏览的地址。浏览器经过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。所以,在咱们认识HTTP以前,有必要先弄清楚URL的组成,例如:http://www.microsoft.com/china/index.htm。它的含义以下:
1. http://:表明超文本传输协议,通知microsoft.com服务器显示Web页,一般不用输入;
2. www:表明一个Web(万维网)服务器;
3. Microsoft.com/:这是装有网页的服务器的域名,或站点服务器的名称;
4. China/:为该服务器上的子目录,就好像咱们的文件夹;
5. Index.htm:index.htm是文件夹中的一个HTML文件(网页)。

 

 

咱们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Application layer),它包含全部高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。

HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。这就是你为何在浏览器中看到的网页地址都是以http://开头的缘由。
自WWW诞生以来,一个多姿多彩的资讯和虚拟的世界便出如今咱们眼前,但是咱们怎么可以更加容易地找到咱们须要的资讯呢?当决定使用超文本做为WWW文档的标准格式后,因而在1990年,科学家们当即制定了可以快速查找这些超文本文档的协议,即HTTP协议。

(2)HTTP是怎样工做的

因为HTTP协议是基于请求/响应范式的(至关于客户机/服务器)。一个客户机与服务器创建链接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME(Multipurpose Internet Mail Extensions多用途互联网邮件扩展类型,设定某一拓展名的文件用特定方式打开)信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
许多HTTP通信是由一个用户代理初始化的而且包括一个申请在源服务器上资源的请求。最简单的状况多是在用户代理和服务器之间经过一个单独的链接来完成。在Internet上,HTTP通信一般发生在TCP/IP链接之上。缺省端口是TCP 80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。

 

以上简要介绍了HTTP协议的宏观运做方式,下面介绍一下HTTP协议的内部操做过程。

 

 

在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的链接期间,即在某个链接中的客户在另外一个链接中可能做为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:创建链接、发送请求信息、发送响应信息、关闭链接。这就好像上面的例子,咱们电话定货的全过程。

其实简单说就是任何服务器除了包括HTML文件之外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级连接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操做后回送所要求的文件。在这一过程当中,在网络上发送和接收的数据已经被分红一个或多个数据包(packet),每一个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每一个数据包的格式。若是事先不告诉你,你可能不会知道信息被分红用于传输和再从新组合起来的许多小块。

FILE

File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件同样。

uri中为何本地文件file后面跟三个斜杠, http等协议跟两个斜杠?

 

URI的结构为:

 

scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

 

若是有host,前面须要加//,所以对于http或https等网络地址来讲会写成:

 

https://blog.csdn.net/lishanleilixin/article/category/7191777

 

这样看上去很天然。若是是文件的话,文件没有host,因此中间的host部分就不要了,就变成了:

 

file:///lishanleilixin/article/category/7191777

 

由于若是没有host的话,第一个[]的内容就不存在了,这种赞成的写法有一个标准叫CURIE。

 

socket:

这是为了实现以上的通讯过程而创建成来的通讯管道,其真实的表明是客户端和服务器端的一个通讯进程,双方进程经过socket进行通讯,而通讯的规则采用指定的协议。

socket只是一种链接模式,不是协议,socket是对TCP/IP协议的封装,Socket自己并非协议,而是一个调用接口(API),

经过Socket,咱们才能使用TCP/IP协议。tcp、udp,简单的说(虽然不许确)是两个最基本的协议,

不少其它协议都是基于这两个协议如,http就是基于tcp的,.用socket能够建立tcp链接,也能够建立udp链接,

这意味着,用socket能够建立任何协议的链接,由于其它协议都是基于此的。

相关文章
相关标签/搜索